Unable to get current_temperature from HeatIt Z-wave thermostat


#1

Hi.

Just installed a new z-wave thermostat (ThermoFloor AS Heatit Thermostat TF 033). I attached the include floor-sensor to it and the configuration set to use this as the sensor. All other settings are left as standard values. I get readings from all the other sensors, except the floor sensor not giving me the current temperature.
image
Does anyone know if this is even possible? I can attach the z-wave config for the device if this will help?


#2

Are you expecting the floor sensor to show up as the heat.current_temperature value?

Do you have the sensor entities that correspond to the external_sensor and floor_sensor?


#3

Yes and yes, I can see both entities. Both external and floor sensor. Both showing “0”.
IMG_20190111_205054


#4

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:

  1. 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.
  2. 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.
  3. 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.


#5

The floor sensor showing a value of 0 is also a problem. Did you change any configuration options? For example, there’s a “Sensor mode” configuration option. Does it need to be set to “Floor sensor”?


#6

Yes, the config needs to be set to the correct sensor type, and as I wrote in my first post, this has been done, but with no success I’m afraid


#7

I will check this and come back to you. Thank you so much for the advice!


#8

The thermostat display is showing the right temperature then? Even if you can fix the climate entity to use the desired sensor, if it’s still set to 0 that won’t make a difference.

Might try posting any activity from OZW_Log.txt for Node020, see if any updates are being received, as well as the output from “Print node info” (appears in homeassistant.log) and the contents of zwcfg*.xml for the node.


#9

I got it working by changing the section for COMMAND_CLASS_SENSOR_MULTILEVEL to

			<CommandClass id="49" name="COMMAND_CLASS_SENSOR_MULTILEVEL" version="5">
				<Instance index="1" endpoint="3" />
				<Value type="decimal" genre="user" instance="1" index="0" label="External sensor" units="C" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="0.0" />
				<Value type="decimal" genre="user" instance="2" index="1" label="Floor sensor" units="C" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="0.0" />
			</CommandClass>

I chatted with @freshcoast and this should probably be configurable in the future in HA but until then it seems like an ok solution to manually set the sensor in the xml.