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); } }