public void SetAwayState(AwayState state) { WebClient http = new WebClient(); string response = http.UploadString(this.Url + "/settings", String.Format("away={0}", (int)state)); if (response.Contains(SUCCESS_KEYWORD)) { this.AwayState = state; } else { this.logger.Error(String.Format("Error setting away state. {0}.", response)); } }
/// <summary> /// Gets the current heating state of the thermostat, based on an educated guess (verified by experimentation). /// </summary> public static ThermostatHeatingState GetHeatingState(this ThermostatModel model, AwayState awayState) { var state = ThermostatHeatingState.NotHeatingOrCooling; if (model.IsOnline) { switch (model.HvacMode) { case HvacMode.SystemIsOff: state = ThermostatHeatingState.Off; break; case HvacMode.HeatAndCool: var targetTemperatureHigh = awayState == AwayState.Home ? model.TargetTemperatureHighF : model.AwayTemperatureHighF; var targetTemperatureLow = awayState == AwayState.Home ? model.TargetTemperatureLowF : model.AwayTemperatureLowF; if (targetTemperatureHigh > model.AmbientTemperatureF) { state = ThermostatHeatingState.Heating; // sort of a guess } else if (targetTemperatureLow < model.AmbientTemperatureF) { state = ThermostatHeatingState.Cooling; // sort of a guess } break; default: var targetTemperature = awayState == AwayState.Home ? model.TargetTemperatureF : model.AwayTemperatureLowF; if (model.CanHeat && targetTemperature > model.AmbientTemperatureF) { state = ThermostatHeatingState.Heating; // sort of a guess } else if (model.CanCool && targetTemperature < model.AmbientTemperatureF) { state = ThermostatHeatingState.Cooling; // sort of a guess } break; } } else { state = ThermostatHeatingState.Offline; } return state; }
/// <summary> /// Sets the state of the structure. In order for a structure to be in the Auto-Away state, all /// devices must also be in Auto-Away state. When any device leaves the Auto-Away state, then the /// structure also leaves the Auto-Away state. /// </summary> /// <param name="structureId">The unique identifier for the <see cref="Structure"/>.</param> /// <param name="awayState">The state of the structure. Values can be "home", "away", or "auto-away".</param> /// <param name="callback">A <see cref="Callback"/> to receive whether the change was successful.</param> public void SetAway(string structureId, AwayState awayState, Callback callback = null) { restClient.WriteString(GetPath(structureId), Structure.KEY_AWAY, awayState.GetValueString(), callback); }
private void FireHeatingStateChangedEvents(Dictionary<string, ThermostatModel> thermostats, AwayState awayState) { if (ThermostatStateChanged == null) return; foreach (var thermostat in thermostats) { if (_session.PreviousThermostats.ContainsKey(thermostat.Value.DeviceId)) { var previousThermostat = _session.PreviousThermostats[thermostat.Value.DeviceId]; var currentHeatingState = thermostat.Value.GetHeatingState(awayState); if (previousThermostat.GetHeatingState(awayState) != currentHeatingState || previousThermostat.HasLeaf != thermostat.Value.HasLeaf) { ThermostatStateChanged(this, new ThermostatStateEventArgs { DeviceId = thermostat.Value.DeviceId, Previous = new ThermostatState { Heating = previousThermostat.GetHeatingState(awayState), HasLeaf = previousThermostat.HasLeaf }, Current = new ThermostatState { Heating = currentHeatingState, HasLeaf = thermostat.Value.HasLeaf } }); } } } }
public void SetAway(string accessToken, string structureId, AwayState awayState) { if (_log.IsInfoEnabled) { _log.InfoFormat("Setting away state of structure '{0}' to {1}.", structureId, awayState); } var setAwayUrl = string.IsNullOrEmpty(_session.AwaySetSubsequentUrl[structureId]) ? string.Format("https://developer-api.nest.com/devices/structures/{0}/away?auth={1}", structureId, accessToken) : _session.AwaySetSubsequentUrl[structureId]; string subsequentAwaySetUrl; SetNewValue(setAwayUrl, "\"" + Utils.ToEnumString(awayState) + "\"", out subsequentAwaySetUrl); _session.AwaySetSubsequentUrl[structureId] = subsequentAwaySetUrl; }