예제 #1
0
        private static void MQTTProcessor(string strTopic, string strPayload)
        {
            long   lRequestId     = RequestManager.GetRequestId();
            int    iZone          = 0;
            double dblTemperature = 0;

            Logging.WriteDebugLog("Service.MQTTProcessor() [0x{0}] {1}", lRequestId.ToString("X8"), strTopic);

            // Per Zone Temperature
            if (strTopic.StartsWith("actronque/zone") && strTopic.EndsWith("/temperature/set"))
            {
                iZone = int.Parse(strTopic.Substring(14, 1));

                if (double.TryParse(strPayload, out dblTemperature))
                {
                    Que.ChangeTemperature(lRequestId, dblTemperature, iZone);
                }
            }
            // Per Zone Mode
            else if (strTopic.StartsWith("actronque/zone") && strTopic.EndsWith("/mode/set"))
            {
                iZone = int.Parse(strTopic.Substring(14, 1));

                switch (strPayload)
                {
                case "off":
                    Que.ChangeZone(lRequestId, iZone, false);

                    break;

                case "auto":
                    Que.ChangeZone(lRequestId, iZone, true);
                    Que.ChangeMode(lRequestId, AirConditionerMode.Automatic);

                    break;

                case "cool":
                    Que.ChangeZone(lRequestId, iZone, true);
                    Que.ChangeMode(lRequestId, AirConditionerMode.Cool);

                    break;

                case "heat":
                    Que.ChangeZone(lRequestId, iZone, true);
                    Que.ChangeMode(lRequestId, AirConditionerMode.Heat);

                    break;

                case "fan_only":
                    Que.ChangeZone(lRequestId, iZone, true);
                    Que.ChangeMode(lRequestId, AirConditionerMode.Fan_Only);

                    break;
                }
            }
            // Zone
            else if (strTopic.StartsWith("actronque/zone") && strTopic.EndsWith("/set"))
            {
                iZone = int.Parse(strTopic.Substring(14, 1));

                Que.ChangeZone(lRequestId, iZone, strPayload == "ON" ? true : false);
            }
            // Master
            else
            {
                switch (strTopic)
                {
                // Mode
                case "actronque/mode/set":
                    switch (strPayload)
                    {
                    case "off":
                        Que.ChangeMode(lRequestId, AirConditionerMode.Off);

                        break;

                    case "auto":
                        Que.ChangeMode(lRequestId, AirConditionerMode.Automatic);

                        break;

                    case "cool":
                        Que.ChangeMode(lRequestId, AirConditionerMode.Cool);

                        break;

                    case "heat":
                        Que.ChangeMode(lRequestId, AirConditionerMode.Heat);

                        break;

                    case "fan_only":
                        Que.ChangeMode(lRequestId, AirConditionerMode.Fan_Only);

                        break;
                    }

                    break;

                // Fan Speed
                case "actronque/fan/set":
                    switch (strPayload)
                    {
                    case "hiautogh":
                        Que.ChangeFanMode(lRequestId, FanMode.Automatic);

                        break;

                    case "low":
                        Que.ChangeFanMode(lRequestId, FanMode.Low);

                        break;

                    case "medium":
                        Que.ChangeFanMode(lRequestId, FanMode.Medium);

                        break;

                    case "high":
                        Que.ChangeFanMode(lRequestId, FanMode.High);

                        break;
                    }

                    break;

                // Temperature
                case "actronque/temperature/set":
                    if (double.TryParse(strPayload, out dblTemperature))
                    {
                        Que.ChangeTemperature(lRequestId, dblTemperature, 0);
                    }

                    break;
                }
            }
        }