Hi Allen - sorry for the delay
Here are my findings:
I’m using Home Assistant OS 7.0 with core-2021.12.7, and have both a Nest 2020 Thermostat and a Nest Learning Thermostat. [The results are slightly different]
My Nest 2020 Thermostat doesn’t reflect that it is in “Eco” mode when it’s automatically set based on lack of activity, but I noticed I can infer it based on the set temp being 56 degrees:
hvac_modes:
- 'off'
- heat
min_temp: 45
max_temp: 95
preset_modes:
- none
- eco
current_temperature: 68
temperature: 56
hvac_action: 'off'
preset_mode: none
friendly_name: Basement Thermostat
supported_features: 17
When I put the thermostat into “away” mode in the Google Home app, I see no change:
hvac_modes:
- 'off'
- heat
min_temp: 45
max_temp: 95
preset_modes:
- none
- eco
current_temperature: 68
temperature: 56
hvac_action: 'off'
preset_mode: none
friendly_name: Basement Thermostat
supported_features: 17
When I use the Google Home app to put the device into Eco mode manually, I also see no change:
hvac_modes:
- 'off'
- heat
min_temp: 45
max_temp: 95
preset_modes:
- none
- eco
current_temperature: 68
temperature: 56
hvac_action: 'off'
preset_mode: none
friendly_name: Basement Thermostat
supported_features: 17
When I put the thermostat back into Comfort mode, or it automatically switches out of Eco/Away, and th set temp goes back to 69:
hvac_modes:
- 'off'
- heat
min_temp: 45
max_temp: 95
preset_modes:
- none
- eco
current_temperature: 68
temperature: 69
hvac_action: 'off'
preset_mode: none
friendly_name: Basement Thermostat
supported_features: 17
This is what I see in the logs with the advanced logging you recommended at the time the device transitions between normal heat to “eco mode”, because it senses I’m away (I removed unique info):
2022-01-01 16:30:15 DEBUG (MainThread) [google_nest_sdm.event] EventMessage raw_data={'eventId': '**REMOVED**', 'timestamp': '2022-01-01T21:30:14.004412Z', 'resourceUpdate': {'name': 'enterprises/**REMOVED**/devices/**REMOVED**', 'traits': {'sdm.devices.traits.ThermostatHvac': {'status': 'OFF'}}}, 'userId': '**REMOVED**', 'resourceGroup': ['enterprises/**REMOVED**/devices/**REMOVED**']}
2022-01-01 16:30:18 DEBUG (MainThread) [google_nest_sdm.event] EventMessage raw_data={'eventId': '**REMOVED**', 'timestamp': '2022-01-01T21:30:17.584106Z', 'resourceUpdate': {'name': 'enterprises/**REMOVED**/devices/**REMOVED**', 'traits': {'sdm.devices.traits.ThermostatMode': {'mode': 'HEAT', 'availableModes': ['HEAT', 'OFF']}, 'sdm.devices.traits.ThermostatEco': {'availableModes': ['OFF', 'MANUAL_ECO'], 'mode': 'OFF', 'heatCelsius': 13.5, 'coolCelsius': 28.0}, 'sdm.devices.traits.ThermostatTemperatureSetpoint': {'heatCelsius': 13.5}}}, 'userId': '**REMOVED**', 'resourceGroup': ['enterprises/**REMOVED**/devices/**REMOVED**']}
It looks like the only thing that changes is the set temperature. However, in the Google Home/Nest app it shows the device is in Eco mode. For the other changes (manual/forced away/forced Eco) I also see no difference in the logs.
Now, with my Google Nest Learning Thermostat I have slightly different behavior. Here, the device DOES show it’s in Eco mode, but only if I set the Eco mode from the Google Nest app. If I use the Google Home app, or Away mode, or wait for auto mode, there is no change in the Eco value. But this is the way it shows if I do force Eco mode from the Google Nest app:
hvac_modes:
- 'off'
- heat_cool
- heat
- cool
- fan_only
min_temp: 45
max_temp: 95
fan_modes:
- 'on'
- 'off'
preset_modes:
- none
- eco
current_temperature: 71
temperature: 62
target_temp_high: null
target_temp_low: null
fan_mode: 'off'
hvac_action: 'off'
preset_mode: eco
friendly_name: Living Room Thermostat
supported_features: 27
And in the logs, it reflects this eco mode as being manually set:
2022-01-01 17:38:14 DEBUG (MainThread) [google_nest_sdm.event] EventMessage raw_data={'eventId': '**REMOVED**', 'timestamp': '2022-01-01T22:38:13.320972Z', 'resourceUpdate': {'name': 'enterprises/**REMOVED**/devices/**REMOVED**', 'traits': {'sdm.devices.traits.ThermostatMode': {'mode': 'HEAT', 'availableModes': ['HEAT', 'COOL', 'HEATCOOL', 'OFF']}, 'sdm.devices.traits.ThermostatEco': {'availableModes': ['OFF', 'MANUAL_ECO'], 'mode': 'MANUAL_ECO', 'heatCelsius': 16.666672, 'coolCelsius': 24.444443}, 'sdm.devices.traits.ThermostatTemperatureSetpoint': {}}}, 'userId': '**REMOVED**', 'resourceGroup': ['enterprises/**REMOVED**/devices/**REMOVED**']}
If I observe the logs, the availableModes is always ‘OFF’ for the other states (Away, Auto-Eco).
This leads me to believe there is some difference in the way Google is reporting out activity for both the Nest 2020 thermostat and the Learning Thermostat. It also appears to be a limitation of the way Auto Eco and Away modes are handled in the logs. For some reason the Google Nest and Google Home apps are able to properly reflect this activity, but the API isn’t returning enough information to properly identify? So if I want to know if it’s set to Eco, I need to infer from the set temp, which is probably sufficient, but not as easy to program, if I ever tweak the temperature preference.
Unrelated, but may be of interest: I also noticed some errors in the more detailed logs
2022-01-01 14:45:21 INFO (Thread-6) [google.cloud.pubsub_v1.subscriber._protocol.streaming_pull_manager] Observed non-terminating stream error 503 The service was unable to fulfill your request. Please try again. [code=8a75]
2022-01-01 14:45:21 INFO (Thread-6) [google.cloud.pubsub_v1.subscriber._protocol.streaming_pull_manager] Observed recoverable stream error 503 The service was unable to fulfill your request. Please try again. [code=8a75]
2022-01-01 14:45:21 INFO (Thread-6) [google.api_core.bidi] Re-established stream
2022-01-01 14:45:21 INFO (Thread-ConsumeBidirectionalStream) [google.cloud.pubsub_v1.subscriber._protocol.streaming_pull_manager] Observed non-terminating stream error 503 The service was unable to fulfill your request. Please try again. [code=8a75]
2022-01-01 14:45:21 INFO (Thread-ConsumeBidirectionalStream) [google.cloud.pubsub_v1.subscriber._protocol.streaming_pull_manager] Observed recoverable stream error 503 The service was unable to fulfill your request. Please try again. [code=8a75]