So, this same problem actually came up in Discord. The way I understand it is that for z-wave thermostats, HA is choosing the first temperature sensor it discovers and sets it as the current_temperature
. In the XML config file, this thermostat defines these temperature sensors:
You should have something that looks like this in your zwcfg*.xml file for the node:
<CommandClass id="49" name="COMMAND_CLASS_SENSOR_MULTILEVEL" version="1" request_flags="4" create_vars="true" base="0">
<Value type="decimal" genre="user" instance="1" index="1" label="Internal sensor" units="C" read_only="true" write_only="false" min="0" max="0"/>
<Value type="decimal" genre="user" instance="2" index="1" label="External sensor" units="C" read_only="true" write_only="false" min="0" max="0" />
<Value type="decimal" genre="user" instance="3" index="1" label="Floor sensor" units="C" read_only="true" write_only="false" min="0" max="0" />
</CommandClass>
HA is probably seeing the sensors in order of instance, 1-3. The index values indicate the sensor type, 1 means temperature sensor. HA sees that a) the node is a thermostat type and b) this sensor is a temperature sensor, so it selects the value as the current_temperature. When HA is notified about instance 2 and 3, it ignores those for the purpose of the current_temperature because it is already set. Instead, the unused sensor are created as sensor entities… AFAIK, there’s no way you can tell HA which sensor to choose, the code is not written in a way to handle multiple temperature sensors.
You can also see in the attributes that value_instance
which corresponds to the Internal Sensor. If you goto the Z-Wave control panel, select the node and click on “Print node info”, in the homeassisant.log file you’ll get output about all the node values. It will show the other instances.
You could try hacking your zwcfg*.xml file to see if you can force the floor sensor to be used, but it’s obviously not a viable long term solution. There’s a few things you could try:
- Set the
index
value to 0 for the Internal sensor and External sensor. Index 0 has no meaning. It won’t be detected as a temperature sensor or any other kind of sensor. HA will then skip instances 1 and 2 and choose 3 (floor sensor) as the current_temperature.
- Renumber the instances so Floor sensor is instance 1. It’s possible OZW might notify HA about it first, so HA should choose it as current_temperature.
- Remove the Internal and External sensor values completely, HA won’t see them at all.
I don’t have this device so I can’t test it, but I did see from another discussion forum that they were using the first method (set index to 0). The question is when does OZW overwrite the cache values? It might decide to rewrite the values based on what it discovers, or it might not. But it could be worth a try to see if hacking the zwcfg.xml file works. If it does, you’ll probably want to submit an Issue to the HA github project to allow for configuration of a specific sensors.
Another approach that might work would be to create your own thermostat using the Generic Thermostat component and the sensor.floor_sensor, but that seems like a lot of work for something that should be supported by default. For example, you could set target_sensor
to the floor sensor, and use a Template Switch to turn the heat on and off.