home-assistant / core

:house_with_garden: Open source home automation that puts local control and privacy first.
https://www.home-assistant.io
Apache License 2.0
70.46k stars 29.39k forks source link

OZW climate operation mode mapping issues #35957

Closed ghost closed 4 years ago

ghost commented 4 years ago

The problem

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.

Environment

Problem-relevant configuration.yaml

Traceback/Error logs

mqtt_dump.txt

Additional information

probot-home-assistant[bot] commented 4 years ago

ozw documentation ozw source (message by IssueLinks)

probot-home-assistant[bot] commented 4 years ago

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)

MartinHjelmare commented 4 years ago

Thanks for the very detailed report. Awesome! We'll work to address this.

marcelveldt commented 4 years ago

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.

marcelveldt commented 4 years ago

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,

marcelveldt commented 4 years ago

Rectification: Aux is indeed missed in the translation to preset. We'll have to fix that.

kpine commented 4 years ago

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.

mew1033 commented 4 years ago

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:

  1. Auto Changeover mode is pretty much equivalent to Auto mode. They are just called different things by different manufacturers.
  2. The modes are distinct and have different meanings. Some (many?) thermostats report "Auto" mode when they really mean "AutoChangeover" mode. For example, the CT100 doesn't have any day/time scheduling at all. It can either work over Z-Wave or be manual. Its mode in which it can set both heat and cool setpoints is called "Auto" on the UI, but it behaves like the Zwave AutoChangeover mode.

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!

marcelveldt commented 4 years ago

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)...

kpine commented 4 years ago

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?

mew1033 commented 4 years ago

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.

kpine commented 4 years ago

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.

mew1033 commented 4 years ago

Where is that documented? I was looking all over for something like it and couldn't find it.

kpine commented 4 years ago

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.