示例#1
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);
                }
            }
        }
        private InsteonController(InsteonNetwork network, InsteonAddress address, InsteonIdentity identity)
        {
            this.network = network;
            Address = address;
            Identity = identity;

            timer.Interval = 4 * 60 * 1000; // 4 minutes
            timer.AutoReset = false;
            timer.Elapsed += (sender, args) =>
                {
                    IsInLinkingMode = false;
                    OnDeviceLinkTimeout();
                };
            
        }
 internal SwitchedLighting(InsteonNetwork network, InsteonAddress address, InsteonIdentity identity) : base(network, address, identity)
 {
 }
 internal DimmableLighting(InsteonNetwork network, InsteonAddress address, InsteonIdentity identity)
     : base(network, address, identity)
 {
 }
 public static string GetDeviceCategoryName(this InsteonIdentity insteonIdentity)
 {
     return(DeviceCategoryLookup[insteonIdentity.DevCat]);
 }
示例#6
0
 internal IoLinc(InsteonNetwork network, InsteonAddress address, InsteonIdentity identity)
     : base(network, address, identity)
 {
 }
 internal PowerLincUsbModem(InsteonNetwork network, InsteonAddress address, InsteonIdentity identity)
     : base(network, address, identity)
 {
 }
 internal MiniRemote(InsteonNetwork network, InsteonAddress address, InsteonIdentity identity, int buttonCount)
     : base(network, address, identity)
 {
     NumberOfButtons = buttonCount;
 }
        private bool GetProductData(InsteonDeviceLinkRecord link, out InsteonIdentity? identity)
        {
            Dictionary<PropertyKey, int> properties;

            logger.DebugFormat("Controller {0} GetLinkProductData", Address.ToString());
            byte[] message = { (byte)InsteonModemSerialCommand.StandardOrExtendedMessage, link.Address[2], link.Address[1], link.Address[0], 
                                 (byte) MessageFlagsStandard.ThreeHopsThreeRemaining, (byte)InsteonDirectCommands.ProductDataRequest, Byte.MinValue };

            var status = network.Messenger.TrySendReceive(message, false, (byte)InsteonModemSerialCommand.ExtendedMessage, InsteonMessageType.ProductDataResponse, out properties);

            if (status == EchoStatus.NAK)
            {
                logger.ErrorFormat("received NAK trying to get ProductData information");
                identity = null;
                return false;
            }
            if (status == EchoStatus.ACK)
            {
                if (properties == null)
                {
                    logger.ErrorFormat("Device Id {0} has null properties object", Address.ToString());
                    identity = null;
                    return false;
                }
                var pk = new InsteonProductKey((byte)properties[PropertyKey.ProductKeyHigh], (byte)properties[PropertyKey.ProductKeyMid], (byte)properties[PropertyKey.ProductKeyLow]);
                identity = new InsteonIdentity((byte)properties[PropertyKey.DevCat], (byte)properties[PropertyKey.SubCat], (byte)properties[PropertyKey.FirmwareVersion], pk);
                return true;
            }

            logger.ErrorFormat("received unknown status trying to get productdata information");
            identity = null;
            return false; // echo was not ACK or NAK
        }
        private bool GetLinkIdentity(InsteonAddress address, out InsteonIdentity? identity)
        {
            Dictionary<PropertyKey, int> properties;

            logger.DebugFormat("Device {0} GetLinkIdentity", Address.ToString());
            byte[] message = { (byte)InsteonModemSerialCommand.StandardOrExtendedMessage, address[2], address[1], address[0], 
                                 (byte) MessageFlagsStandard.ThreeHopsThreeRemaining, (byte)InsteonDirectCommands.IdRequest, Byte.MinValue };

            var status = network.Messenger.TrySendReceive(message, false, (byte)InsteonModemSerialCommand.StandardMessage, InsteonMessageType.SetButtonPressed, out properties);

            if (status == EchoStatus.NAK)
            {
                logger.ErrorFormat("received NAK trying to get idendity information");
                identity = null;
                return false;
            }
            if (status == EchoStatus.ACK)
            {
                if (properties == null)
                {
                    logger.ErrorFormat("Device Id {0} has null properties object", Address.ToString());
                    identity = null;
                    return false;
                }
                identity = new InsteonIdentity((byte)properties[PropertyKey.DevCat], (byte)properties[PropertyKey.SubCat], (byte)properties[PropertyKey.FirmwareVersion]);
                return true;

            }

            logger.ErrorFormat("received unknown status trying to get idendity information");
            identity = null;
            return false; // echo was not ACK or NAK
        }
 public bool TryGetLinkIdentity(InsteonAddress address, out InsteonIdentity? identity)
 {
     return GetLinkIdentity(address, out identity);
 }
 public bool TryGetLinkIdentity(InsteonDeviceLinkRecord link, out InsteonIdentity? identity)
 {
     //GetProductData(link, out identity) ||
     return GetLinkIdentity(link.Address, out identity);
 }
 internal void OnMessage(InsteonMessage message)
 {
     if (message.MessageType == InsteonMessageType.DeviceLink)
     {
         var address = new InsteonAddress(message.Properties[PropertyKey.Address]);
         var identity = new InsteonIdentity((byte)message.Properties[PropertyKey.DevCat],
                                             (byte)message.Properties[PropertyKey.SubCat],
                                             (byte)message.Properties[PropertyKey.FirmwareVersion]);
         var device = network.Devices.Add(address, identity);
         timer.Stop();
         IsInLinkingMode = false;
         if (linkingMode.HasValue)
         {
             if (linkingMode != InsteonLinkMode.Delete)
             {
                 OnDeviceLinked(device);
             }
             else
             {
                 OnDeviceUnlinked(device);
             }
         }
         else
         {
             OnDeviceLinked(device);
         }
     }
 }
        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);
            }
        }