Unable to get current_temperature from HeatIt Z-wave thermostat

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?

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?

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

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.

1 Like

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”?

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

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

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.

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.

1 Like

It is now September 2020 (hassio, Home Assistant 0.115.2), and I have the same problem with my Heat-IT thermostat.

My zwcfg.xml contains:

<CommandClass id="49" name="COMMAND_CLASS_SENSOR_MULTILEVEL" version="5">
	<Instance index="1" endpoint="2" />
	<Instance index="2" 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="" />
	<Value type="decimal" genre="user" instance="1" index="1" label="Temperature" 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="24.1" />
</CommandClass>

The indexing and instance numbering seems strange to me, but I don’t know if that would be the cause of this problem.

Did anyone find a good solution to this? Or do I need to create a generic_thermostat and use an external temp sensor to work around this?

Nothing has changed. There is an open architecture issue but it has not progressed.

You can hand edit your zwcfg*.xml file and set the index to 0 for the sensor you don’t want. HA will pick the other one.

Tried setting index to 0, but still shows temperature 0. I think I will go for a generic_thermostat solution for now… Hope the issue will get resolved down the road. Thanks for feedback and help!

Did you stop HA before editing the file?

Thanks for followup… Stopped HA. Changed the xml-file and did a reboot. No luck. :frowning:

I have an even weirder issue

from heatit56.xml file from openzwave:

But when i add the sensor i get 3 sensors, floor, air and external. There is no air sensor on this thermostat, so i dont know whats going on. I can change tempetature, but current temp show as 0 degrees. 2020-09-27 02_05_08-Overview - Home Assistant

2020-09-27 02_12_12-Overview - Home Assistant2020-09-27 02_13_37-Configuration - Home Assistant

I really dont understand why i have 3 sensors, external and air on one device, and the floor sensor on a seperate device, same name. Same NodeID (13)

1 Like

I have exactly the same issue after including a fx2 thermostat tonight. Editing the OZW xml did not help, one of the three temp sensors already was index=0.

My fx2 is an “old” one, and I don’t know what firmware version that is installed. Yours is new?

I will post any findings here.

Did EXACTLY this for my Heatit Z-TRM2 and now it’s showing the current temp. Thanks @fondberg and @freshcoast.

I have exactly the same issue as you. Did you already find a solution? @henrikrox

I have two different versions of the Heatit thermostat. The older one (TF 021) included without any issues. The new one (TF 056), however show “inclusion failed” or something in the display of the thermostat, when I include the device.

I have earlier included the two thermostats in both Smartthings and Hubitat and if I’m not mistaken, the newer one produced a pop-up in both those controllers asking me for a security code (which can be found on a label on the device). After that, the inclusion went fine.

In HA, that pop-up doesn’t show, and I’m thinking about if that can be the issue? How about the rest of you? Does the Heatit display show any error message during the inclusion?

And as far as I can see, the zwcfg*.xml file seems to be right from the start. Or shall the “Temperature” index be set to 0 as well?

			<CommandClass id="49" name="COMMAND_CLASS_SENSOR_MULTILEVEL" version="5">
				<Instance index="1" endpoint="2" />
				<Instance index="2" 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="" />
				<Value type="decimal" genre="user" instance="1" index="1" label="Temperature" 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="25.8" />
			</CommandClass>

TF 021:
old

TF 056:
new