The name of the mode for automatic changeover between heat and cool is "auto" instead of "heat_cool". The standardized name for this mode for all climate devices is supposed to be heat_cool. I don't know if there is any significant difference between zwave modes ThermostatMode.AUTO and ThermostatMode.AUTO_CHANGE_OVER with the thermostats currently out in the wild. With my thermostat I suspect the automatic changover mode is ThermostatMode.AUTO. ThermostatMode.AUTO might be better mapped to HVAC_MODE_HEAT_COOL. It has been mapped to heat_cool with the previous zwave integration.
ThermostatMode.AUXILIARY is being mapped as HVAC_MODE_HEAT when "Aux Heat" is a completely seperate mode which should only be accessible via the service call climate.set_aux_heat. Thermostats that have both ThermostatMode.HEAT and ThermostatMode.AUXILIARY will have two modes mapped to HVAC_MODE_HEAT leading to situation where "Aux Heat" could inadvertently be called when the "Heat" mode is selected in the UI which could result in an expensive energy bill for people who have heat pumps and electrical resistance heat or propane as "Aux heat". Or it could cause the heat mode to fail to work at all in some configurations.
I attached an a mqtt dump. Relevant node_id is 36.
Other than the mode mapping issues, the integration is working well with my thermostat.
configuration.yaml
ozw documentation
ozw source
(message by IssueLinks)
Hey there @cgarwood, @marcelveldt, @MartinHjelmare, mind taking a look at this issue as its been labeled with a integration (ozw) you are listed as a codeowner for? Thanks!
(message by CodeOwnersMention)
Thanks for the very detailed report. Awesome! We'll work to address this.
ThermostatMode.AUXILIARY is not mapped to heat. It's handled as a PRESET.
The goal of the OZW integration is not to replicate the old Z-Wave component so there might be differences here and there. Can you confirm that AUX is properly handled as preset ?
Auto changeover has it's own Mode in the Z-Wave world. So Thermostatmode Auto != auto changeover regarding the specs. We tried to stay as close to the Z-Wave specs as possible with this new integration.
Handled as Mode only:
ThermostatMode.OFF: HVAC_MODE_OFF,
ThermostatMode.HEAT: HVAC_MODE_HEAT,
ThermostatMode.COOL: HVAC_MODE_COOL,
ThermostatMode.AUTO: HVAC_MODE_AUTO,
Handled as presets (but will indicate a translated mode when active)
ThermostatMode.AUXILIARY: HVAC_MODE_HEAT,
ThermostatMode.FAN: HVAC_MODE_FAN_ONLY,
ThermostatMode.FURNANCE: HVAC_MODE_HEAT,
ThermostatMode.DRY: HVAC_MODE_DRY,
ThermostatMode.AUTO_CHANGE_OVER: HVAC_MODE_HEAT_COOL,
ThermostatMode.HEATING_ECON: HVAC_MODE_HEAT,
ThermostatMode.COOLING_ECON: HVAC_MODE_COOL,
ThermostatMode.AWAY: HVAC_MODE_HEAT_COOL,
ThermostatMode.FULL_POWER: HVAC_MODE_HEAT,
Rectification: Aux is indeed missed in the translation to preset. We'll have to fix that.
Hi, I've also noticed my CT32 thermostat is reporting auto instead of heat_cool in hvac_modes. Z-Wave Auto mode requires setting the heating and cooling setpoints, so it would seem to map to heat_cool.
I have a CT100 thermostat (similar to @kpine's CT32) with the same problem. In my case, I don't have Auxiliary heat, just Heat, Cool, and Auto. I looked over the HA code here and the OpenZwave code here and I'm not 100% sure what's going on, but I have a few ideas:
Is it possible to manually override the mode mappings on a per-thermostat basis? Right now I've done this on my own HA instance, but it's ugly and hacky. Works great for me though as I only have a single thermostat in my house.
--- homeassistant/components/ozw/climate.py
+++ """Support for Z-Wave climate devices."""
@@ -103,7 +103,7 @@
ThermostatMode.OFF: HVAC_MODE_OFF,
ThermostatMode.HEAT: HVAC_MODE_HEAT,
ThermostatMode.COOL: HVAC_MODE_COOL,
- ThermostatMode.AUTO: HVAC_MODE_AUTO,
+ ThermostatMode.AUTO: HVAC_MODE_HEAT_COOL,
ThermostatMode.AUXILIARY: HVAC_MODE_HEAT,
ThermostatMode.FAN: HVAC_MODE_FAN_ONLY,
ThermostatMode.FURNANCE: HVAC_MODE_HEAT,
@@ -123,7 +123,7 @@
HVAC_MODE_AUTO: ThermostatMode.AUTO,
HVAC_MODE_FAN_ONLY: ThermostatMode.FAN,
HVAC_MODE_DRY: ThermostatMode.DRY,
- HVAC_MODE_HEAT_COOL: ThermostatMode.AUTO_CHANGE_OVER,
+ HVAC_MODE_HEAT_COOL: ThermostatMode.AUTO,
}
Or, maybe it's possible to override the reported value in the device.xml file that openzwave uses?
Thanks!
It seems that most Z-Wave thermostats do not support a full auto mode (schedule based) ?
In that case we can safely assume that AUTO can always be treated as AUTO CHANGEOVER (= HEAT_COOL)...
HVAC_MODE_HEAT_COOL says "The device supports heating/cooling to a range". But Z-Wave AUTO CHANGEOVER uses a single setpoint, not a range. Are they compatible?
It sounds like our thermostats (CT32 and CT100. I assume they're the same) send Auto mode because they have 2 setpoints. If that's the case, then I agree with @marcelveldt and ThermostatMode.AUTO should map to HVAC_MODE_HEAT_COOL.
Not sure what to do if a thermostat sends ThermostatMode.AUTO_CHANGE_OVER though.
AUTO and AUTO CHANGEOVER have very specific definitions, there is no ambiguity.
AUTO:
This mode is used to regulate the temperature using heating and cooling when the temperature is outside the range defined by the Heating (0x01) and Cooling (0x02) setpoints.
AUTO CHANGEOVER:
This mode is used to regulate the temperature at the Auto Changeover (0x0A) setpoint using heating and cooling.
Where is that documented? I was looking all over for something like it and couldn't find it.
SDS13781 - Z-Wave Application Command Class Specification
The modes are defined in Section 4.109.3, Table 138.
I think manufacturer literature does confuse the terms "Auto" and "Auto Changeover", perhaps interchanging them. The modes presented by OZW though are the ones defined in the spec.
To me, Z-Wave AUTO mode is clearly the same as HVAC_MODE_HEAT_COOL and Z-Wave AUTO CHANGEOVER seems like HVAC_MODE_AUTO, but I don't know what the differences really are, since my thermostat works just fine as "HVAC_MODE_AUTO", even if it seems wrong.
If you look at the climate.set_temperature service call though, there are some relevant mentions.
It says for the temperature field:
New target temperature for climate device (commonly referred to as a setpoint). Do not use if hvac_mode is heat_cool.
Which makes sense. These thermostats have heat and cool setpoints, and you can't set one specific temperature if you are in Z-Wave Auto (HA Heat/Cool) mode. Instead, target_temp_high/target_temp_low are required for heat_cool.
It seems like the temperature field would apply to the Z-Wave Auto Changeover (HA Auto) then, since it applies to a single setpoint.
Most helpful comment
Hi, I've also noticed my CT32 thermostat is reporting
autoinstead ofheat_coolinhvac_modes. Z-Wave Auto mode requires setting the heating and cooling setpoints, so it would seem to map to heat_cool.