/// <summary>
        /// Gets the device by topic.
        /// </summary>
        /// <param name="topic">The topic.</param>
        /// <returns></returns>
        internal static MqttIcueDevice GetDeviceByTopic(string topic)
        {
            MqttIcueDevice device = GetDeviceByStateTopic(topic);

            if (device != null)
            {
                return(device);
            }
            return(GetDeviceBySetTopic(topic));
        }
        /// <summary>
        /// Adds the icue device. Sets the topics and create instances of MqttIcueDevice
        /// </summary>
        /// <param name="icueDevice">The icue device.</param>
        /// <returns>the newly created instance of MqttIcueDevice</returns>
        internal static MqttIcueDevice AddIcueDevice(Device icueDevice, int suffixNumber)
        {
            if (icueDevice == null)
            {
                return(null);
            }
            string entityId = icueDevice.CorsairDevice.Model.Replace(" ", "_").Replace(":", "_");

            if (suffixNumber > 0)
            {
                entityId += "_" + suffixNumber;
            }
            string         stateTopic     = String.Format("homeassistant/light/icue2mtt/{0}/state", entityId);
            string         commandTopic   = String.Format("homeassistant/light/icue2mtt/{0}/set", entityId);
            string         discoveryTopic = String.Format("homeassistant/light/icue2mtt/{0}/config", entityId);
            MqttIcueDevice mqttIcueDevice = new MqttIcueDevice(icueDevice, stateTopic, commandTopic, discoveryTopic, suffixNumber);

            if (stateTopicDeviceMap.ContainsKey(stateTopic))
            {
                for (int i = 0; i < devices.Count; i++)
                {
                    if (devices[i].IcueDevice.CorsairDevice.Model.Equals(mqttIcueDevice.IcueDevice.CorsairDevice.Model) && suffixNumber == devices[i].SuffixNumber)
                    {
                        devices[i]     = mqttIcueDevice;
                        icueDevices[i] = icueDevice;
                        break;
                    }
                }
                setTopicDeviceMap[commandTopic] = mqttIcueDevice;
                stateTopicDeviceMap[stateTopic] = mqttIcueDevice;
            }
            else
            {
                devices.Add(mqttIcueDevice);
                icueDevices.Add(icueDevice);
                setTopicDeviceMap.Add(commandTopic, mqttIcueDevice);
                stateTopicDeviceMap.Add(stateTopic, mqttIcueDevice);
            }
            return(mqttIcueDevice);
        }