コード例 #1
0
        public void ProcessControllerDirective()
        {
            try
            {
                if (Payload.targetSetpoint != null)
                {
                    Temperature target = new Temperature(Payload.targetSetpoint.scale, Payload.targetSetpoint.value);
                    Endpoint.SetValueAsync("CurrentSetPoint", Math.Round(target.Kelvin, 1).ToString(CultureInfo.InvariantCulture)).GetAwaiter().GetResult();
                }
                if (Payload.lowerSetpoint != null)
                {
                    Temperature lower = new Temperature(Payload.lowerSetpoint.scale, Payload.lowerSetpoint.value);
                    Endpoint.SetValueAsync("HeatingSetPoint", Math.Round(lower.Kelvin, 1).ToString(CultureInfo.InvariantCulture)).GetAwaiter().GetResult();
                }
                if (Payload.upperSetpoint != null)
                {
                    Temperature upper = new Temperature(Payload.upperSetpoint.scale, Payload.upperSetpoint.value);
                    Endpoint.SetValueAsync("CoolingSetPoint", Math.Round(upper.Kelvin, 1).ToString(CultureInfo.InvariantCulture)).GetAwaiter().GetResult();
                }
                if (Payload.thermostatMode != null)
                {
                    string mode = Request.directive.payload.thermostatMode.value;
                    switch (mode)
                    {
                    case "AUTO":
                        Endpoint.SetValueAsync("TemperatureMode", "0").GetAwaiter().GetResult();
                        break;

                    case "HEAT":
                        Endpoint.SetValueAsync("TemperatureMode", "1").GetAwaiter().GetResult();
                        break;

                    case "COOL":
                        Endpoint.SetValueAsync("TemperatureMode", "2").GetAwaiter().GetResult();
                        break;

                    case "OFF":     // 3 is emergency heat in premise
                        Endpoint.SetValueAsync("TemperatureMode", "4").GetAwaiter().GetResult();
                        break;
                    }
                }
                if (Payload.targetSetpointDelta != null)
                {
                    Temperature target = new Temperature(Endpoint.GetValueAsync <double>("CurrentSetPoint").GetAwaiter().GetResult());
                    switch (Payload.targetSetpointDelta.scale)
                    {
                    case "FAHRENHEIT":
                        target.Fahrenheit += Payload.targetSetpointDelta.value;
                        break;

                    case "CELSIUS":
                        target.Celsius += Payload.targetSetpointDelta.value;
                        break;

                    case "KELVIN":
                        target.Kelvin += Payload.targetSetpointDelta.value;
                        break;
                    }
                    Endpoint.SetValueAsync("CurrentSetPoint", Math.Round(target.Kelvin, 1).ToString(CultureInfo.InvariantCulture)).GetAwaiter().GetResult();
                }
                Response.Event.header.name = "Response";
                Response.context.properties.AddRange(PropertyHelpers.FindRelatedProperties(Endpoint, ""));
            }
            catch (Exception ex)
            {
                ReportError(AlexaErrorTypes.INTERNAL_ERROR, ex.Message);
            }
        }