예제 #1
0
        private void DevicesOnDeviceAdded(object sender, InsteonDeviceEventArgs data)
        {
            logger.Debug("Device added.");

            var dataManager = new InsteonDataManager(false);
            var found       = dataManager.GetByAddress(data.Device.Address.ToString());

            if (found != null)
            {
                // update
                found.Category    = data.Device.Identity.DevCat;
                found.SubCategory = data.Device.Identity.SubCat;
                found.Firmware    = data.Device.Identity.FirmwareVersion;
                found.ProductKey  = data.Device.Identity.ProductKey?.StringKey();
                dataManager.Update(found);
            }
            else
            {
                // insert
                dataManager.Add(new InsteonDeviceModel()
                {
                    Address     = data.Device.Address.ToString(),
                    Category    = data.Device.Identity.DevCat,
                    SubCategory = data.Device.Identity.SubCat,
                    Firmware    = data.Device.Identity.FirmwareVersion,
                    ProductKey  = data.Device.Identity.ProductKey?.StringKey()
                });
            }
        }
예제 #2
0
        public void UpdateDeviceTest()
        {
            var manager = new InsteonDataManager(true);
            var device  = new InsteonDeviceModel()
            {
                Address     = "34.55.66",
                Category    = 0x01,
                SubCategory = 0x02,
                DisplayName = "Test Device",
                Firmware    = 0x45
            };

            var id = manager.Add(device);

            id.Should().Be(1);

            device.Id = 1;

            var d = manager.GetByAddress(device.Address);

            d.Should().NotBeNull();
            d.Address.Should().Be(device.Address);
            d.Category.Should().Be(device.Category);

            device.Category = 0x04;
            manager.Update(device);

            device.Category.Should().Be(0x04);
            d = manager.GetByAddress(device.Address);
            d.Address.Should().Be(device.Address);
            d.Category.Should().Be(device.Category);
        }
예제 #3
0
        public void DuplicateAddressFailTest()
        {
            var manager = new InsteonDataManager(true);
            var id      = manager.Add(new InsteonDeviceModel()
            {
                Address     = "34.55.66",
                Category    = 0x01,
                SubCategory = 0x02,
                DisplayName = "Test Device",
                Firmware    = 0x45
            });

            id.Should().Be(1);

            Action act = () =>
                         manager.Add(new InsteonDeviceModel()
            {
                Address     = "34.55.66",
                Category    = 0x01,
                SubCategory = 0x02,
                DisplayName = "Test Device 2",
                Firmware    = 0x45
            });

            act.ShouldThrow <Exception>();
        }
예제 #4
0
        public void SimpleExistsTest()
        {
            var manager = new InsteonDataManager(true);
            var devices = manager.GetAllDevices();

            Assert.That(devices.Count, Is.EqualTo(0));
        }
예제 #5
0
        private void LoadDevicesFromDatabase()
        {
            var dataManager = new InsteonDataManager(false);
            var devices     = dataManager.GetAllDevices();

            foreach (var device in devices)
            {
                var id = new InsteonIdentity(device.Category, device.SubCategory, device.Firmware);
                if (!id.IsEmpty)
                {
                    Network.Devices.Add(InsteonAddress.Parse(device.Address), id);
                }
            }
        }
예제 #6
0
        public void AddDeviceRecordTest()
        {
            var manager = new InsteonDataManager(true);
            var id      = manager.Add(new InsteonDeviceModel()
            {
                Address     = "34.55.66",
                Category    = 0x01,
                SubCategory = 0x02,
                DisplayName = "Test Device",
                Firmware    = 0x45
            });

            id.Should().Be(1);
        }
예제 #7
0
        public void RefreshDeviceDatabase()
        {
            var dataManager = new InsteonDataManager(false);

            Network.Devices.DeviceAdded -= DevicesOnDeviceAdded;

            var allLinks         = Network.Controller.GetDeviceLinkRecords(true);
            var insteonAddresses = allLinks.Select(l => l.Address).Distinct();

            // TODO: modify this so that we can call refresh when devices exist, and update netowrk items and db as necessary

            foreach (var insteonAddress in insteonAddresses)
            {
                if (Network.Devices.ContainsKey(insteonAddress))
                {
                    continue;
                }

                if (dataManager.GetByAddress(insteonAddress.ToString()) != null)
                {
                    continue;
                }

                InsteonIdentity?id;
                if (Network.Controller.TryGetLinkIdentity(insteonAddress, out id))
                {
                    if (id != null)
                    {
                        var d = Network.Devices.Add(insteonAddress, id.Value);

                        dataManager.Add(new InsteonDeviceModel()
                        {
                            Address     = d.Address.ToString(),
                            Category    = id.Value.DevCat,
                            SubCategory = id.Value.SubCat,
                            Firmware    = id.Value.FirmwareVersion,
                            ProductKey  = id.Value.ProductKey?.ToString(),
                        });

                        logger.DebugFormat("New device identified and added to device list. ({0})", d);
                    }
                    else
                    {
                        logger.Debug("What does this mean?");
                    }
                }
                else
                {
                    dataManager.Add(new InsteonDeviceModel()
                    {
                        Address     = insteonAddress.ToString(),
                        Category    = 0,
                        SubCategory = 0,
                        Firmware    = 0
                    });

                    logger.Warn("device didn't respond. Battery powered?");
                }
            }

            Network.Devices.DeviceAdded += DevicesOnDeviceAdded;
        }