public async Task GetStateReturnsCorrectEntityState() { // ARRANGE // Fake what is coming from hass client var hassState = new HassState { EntityId = "light.testlight", State = "on", LastChanged = new DateTime(2020, 1, 2, 1, 2, 3), LastUpdated = new DateTime(2020, 1, 2, 3, 2, 1), Attributes = new Dictionary <string, object> { ["color_temp"] = 390, ["brightness"] = 100, ["friendly_name"] = "The test light" } }; DefaultHassClientMock.FakeStates["light.testlight"] = hassState; await RunDefauldDaemonUntilCanceled(); // ACT var entity = DefaultDaemonHost.GetState("light.testlight"); // ASSERT Assert.NotNull(entity); DefaultHassClientMock.AssertEqual(hassState, entity !); }
private static void MapAttributes(EntityState entityState, HassState hassState) { if (hassState.Attributes == null) { return; } // Cast so we can work with the expando object if (entityState.Attribute is not IDictionary <string, object> dict) { throw new ArgumentNullException(nameof(dict), "Expando object should always be dictionary!"); } foreach (var(key, value) in hassState.Attributes) { if (value is JsonElement elem) { var dynValue = elem.ConvertToDynamicValue(); if (dynValue != null) { dict[key] = dynValue; } } else { dict[key] = value; } } }
/// <summary> /// Converts HassState to EntityState /// </summary> /// <param name="hassState"></param> /// <returns></returns> public static EntityState Map(this HassState hassState) { var entityState = new EntityState { EntityId = hassState.EntityId, State = hassState.State, LastUpdated = hassState.LastUpdated, LastChanged = hassState.LastChanged, Context = ContextMapper.Map(hassState.Context) }; MapAttributes(entityState, hassState); return(entityState); }
/// <summary> /// Converts HassState to EntityState /// </summary> /// <param name="hassState">HassState object to map</param> public static EntityState Map(this HassState hassState) { _ = hassState ?? throw new NetDaemonArgumentNullException(nameof(hassState)); var entityState = new EntityState { EntityId = hassState.EntityId, State = hassState.State, LastUpdated = hassState.LastUpdated, LastChanged = hassState.LastChanged, Context = ContextMapper.Map(hassState.Context) }; MapAttributes(entityState, hassState); return(entityState); }
/// <summary> /// Converts HassState to DaemonState /// </summary> /// <param name="hassState"></param> /// <returns></returns> public static EntityState ToDaemonEntityState(this HassState hassState) { var entityState = new EntityState() { EntityId = hassState.EntityId, State = hassState.State, LastUpdated = hassState.LastUpdated, LastChanged = hassState.LastChanged }; if (hassState.Attributes == null) { return(entityState); } // Cast so we can work with the expando object var dict = entityState.Attribute as IDictionary <string, object>; if (dict == null) { throw new ArgumentNullException(nameof(dict), "Expando object should always be dictionary!"); } foreach (var(key, value) in hassState.Attributes) { if (value is JsonElement elem) { var dynValue = elem.ToDynamicValue(); if (dynValue != null) { dict[key] = dynValue; } } else { dict[key] = value; } } return(entityState); }
public void HassStateShouldConvertCorrectEntityState() { // ARRANGE var doc = JsonDocument.Parse("{\"str\": \"attr3value\"}"); var prop = doc.RootElement.GetProperty("str"); var hassState = new HassState { EntityId = "light.fake", Attributes = new Dictionary <string, object> { ["attr1"] = "attr1value", ["attr2"] = "attr2value", ["attr3"] = prop }, LastChanged = new DateTime(2000, 1, 1, 1, 1, 1), LastUpdated = new DateTime(2000, 1, 1, 1, 1, 2), Context = new HassContext { Id = "idguid", ParentId = "parentidguid", UserId = "useridguid" } }; // ACT var entityState = hassState.Map(); // ASSERT Assert.Equal("light.fake", entityState.EntityId); Assert.Equal(new DateTime(2000, 1, 1, 1, 1, 1), entityState.LastChanged); Assert.Equal(new DateTime(2000, 1, 1, 1, 1, 2), entityState.LastUpdated); Assert.NotNull(entityState.Attribute); Assert.Equal("attr1value", entityState?.Attribute?.attr1); Assert.Equal("attr2value", entityState?.Attribute?.attr2); Assert.Equal("attr3value", entityState?.Attribute?.attr3); Assert.NotNull(entityState?.Context); Assert.Equal("idguid", hassState.Context.Id); Assert.Equal("parentidguid", hassState.Context.ParentId); Assert.Equal("useridguid", hassState.Context.UserId); }
internal void AddStateChangeEvent(HassState oldState, HassState newState) { var data = new HassStateChangedEventData { EntityId = newState.EntityId, NewState = newState, OldState = oldState }; try { HomeAssistantEventMock.OnNext( new HassEvent { EventType = "state_changed", DataElement = data.ToJsonElement() } ); } catch (Exception e) { System.Console.WriteLine(e.Message); } }
/// <summary> /// Converts HassState to EntityState /// </summary> /// <param name="hassState">HassState object to map</param> public static EntityState Map(this HassState hassState) => hassState.MapWithArea(null);