示例#1
0
        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 !);
        }
示例#2
0
        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;
                }
            }
        }
示例#3
0
        /// <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);
        }
示例#4
0
        /// <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);
        }
示例#5
0
        /// <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);
        }
示例#6
0
        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);
        }
示例#7
0
    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);