Z-Wave Heatit floor thermostat

Hi!

Has anyone this Z-wave thermostat? http://products.z-wavealliance.org/products/1234
I’m new in this project.
I use HA on Ubuntu 16.04.2 under Hyper-V. I have Z-Wave stick Gen5 with several devices.
HA recognize the Heatit like generic thermostat.

My problem is, that HA can’t read Currently temperature.
How can I configure the Z-wave devices parameters?

The device node info:

Node Information

averageRequestRTT: 115
averageResponseRTT: 203
capabilities: beaming,listening,routing
friendly_name: ThermoFloor AS Heatit Thermostat TF 021
is_awake: true
is_failed: false
is_info_received: true
is_ready: true
is_zwave_plus: false
lastRequestRTT: 124
lastResponseRTT: 205
manufacturer_name: ThermoFloor AS
max_baud_rate: 40000
neighbors: 3,6
new_entity_id: zwave.thermofloor_as_heatit_thermostat_tf_021
node_id: 4
node_name: ThermoFloor AS Heatit Thermostat TF 021
old_entity_id: zwave.thermofloor_as_heatit_thermostat_tf_021_4
product_name: Heatit Thermostat TF 021
query_stage: Complete
receivedCnt: 29
receivedDups: 2
receivedTS: 2017-07-20 08:54:23:775
receivedUnsolicited: 26
retries: 0
sentCnt: 8
sentFailed: 2
sentTS: 2017-07-20 08:30:29:159

Atributes

new_entity_id: climate.thermofloor_as_heatit_thermostat_tf_021_energy_heat
current_temperature: null
operation_list: Off,Energy Heat,Heat (Default),Cool
operation_mode: Heat (Default)
temperature: 24.5
value_instance: 1
unit_of_measurement: °C
min_temp: 7
max_temp: 35
value_index: 11
node_id: 5
old_entity_id: climate.thermofloor_as_heatit_thermostat_tf_021_energy_heat_5_11
friendly_name: ThermoFloor AS Heatit Thermostat TF 021 Energy Heat

Thanks for Your helps!

Did you configure the thermostat to use the correct sensor? I think you have air sensor, floor sensor or external sensor… I have the same thermostat and it works fine.

Hi!

I configure with Domoticz, and copy the xml file to HA. With this process work fine.

https://home-assistant.io/docs/z-wave/settings/

Hi, are you interested in sharing your XML file?

Hi

This is the thermostat XML detail. You must change “Node id” and “name”.

	<Node id="22" name="Folyosó term" location="" basic="4" generic="8" specific="6" roletype="5" devicetype="4608" nodetype="0" type="General Thermostat V2" listening="true" frequentListening="false" beaming="true" routing="true" max_baud_rate="40000" version="4" query_stage="CacheLoad">
		<Manufacturer id="19b" name="ThermoFloor AS">
			<Product type="1" id="1" name="Heatit Thermostat TF 021" />
		</Manufacturer>
		<CommandClasses>
			<CommandClass id="32" name="COMMAND_CLASS_BASIC" version="1" request_flags="4" mapping="64">
				<Instance index="1" />
			</CommandClass>
			<CommandClass id="49" name="COMMAND_CLASS_SENSOR_MULTILEVEL" version="6" innif="true">
				<Instance index="1" />
				<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="18.5" />
			</CommandClass>
			<CommandClass id="50" name="COMMAND_CLASS_METER" version="4" request_flags="2" innif="true">
				<Instance index="1" />
				<Value type="decimal" genre="user" instance="1" index="0" label="Energy" units="kWh" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="0.0" />
				<Value type="bool" genre="user" instance="1" index="32" label="Exporting" units="" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="False" />
				<Value type="button" genre="system" instance="1" index="33" label="Reset" units="" read_only="false" write_only="true" verify_changes="false" poll_intensity="0" min="0" max="0" />
			</CommandClass>
			<CommandClass id="64" name="COMMAND_CLASS_THERMOSTAT_MODE" version="1" request_flags="4" innif="true">
				<Instance index="1" />
				<Value type="list" genre="user" instance="1" index="0" label="Mode" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" vindex="1" size="0">
					<Item label="Off" value="0" />
					<Item label="Heat (Default)" value="1" />
					<Item label="Cool" value="2" />
					<Item label="Energy Heat" value="11" />
				</Value>
				<SupportedModes>
					<Mode index="0" label="Off" />
					<Mode index="1" label="Heat" />
					<Mode index="2" label="Cool" />
					<Mode index="11" label="Heat Econ" />
				</SupportedModes>
			</CommandClass>
			<CommandClass id="67" name="COMMAND_CLASS_THERMOSTAT_SETPOINT" version="1" request_flags="4" innif="true" base="0">
				<Instance index="1" />
				<Value type="decimal" genre="user" instance="1" index="1" label="Heating" units="C" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="19.0" />
				<Value type="decimal" genre="user" instance="1" index="11" label="Energy Heat" units="C" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="18.0" />
			</CommandClass>
			<CommandClass id="90" name="COMMAND_CLASS_DEVICE_RESET_LOCALLY" version="1" request_flags="4" innif="true">
				<Instance index="1" />
			</CommandClass>
			<CommandClass id="94" name="COMMAND_CLASS_ZWAVE_PLUS_INFO" version="1" request_flags="4" innif="true">
				<Instance index="1" />
				<Value type="byte" genre="system" instance="1" index="0" label="ZWave+ Version" units="" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="1" />
				<Value type="short" genre="system" instance="1" index="1" label="InstallerIcon" units="" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="-32768" max="32767" value="4608" />
				<Value type="short" genre="system" instance="1" index="2" label="UserIcon" units="" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="-32768" max="32767" value="4608" />
			</CommandClass>
			<CommandClass id="112" name="COMMAND_CLASS_CONFIGURATION" version="1" request_flags="4" innif="true">
				<Instance index="1" />
				<Value type="list" genre="config" instance="1" index="1" label="Operation mode" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" vindex="1" size="0">
					<Item label="Off" value="0" />
					<Item label="Heat" value="1" />
					<Item label="Cool" value="2" />
					<Item label="Energy save heat" value="11" />
				</Value>
				<Value type="list" genre="config" instance="1" index="2" label="Temperature sensor" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" vindex="1" size="0">
					<Item label="F  - Floor mode" value="0" />
					<Item label="A  - Room temperature mode" value="1" />
					<Item label="AF - Room mode w/floor limitations" value="2" />
					<Item label="A2 - Room temperature mode" value="3" />
					<Item label="P  - Power regulator" value="4" />
					<Item label="FP - Floor mode with minimum power limitation" value="5" />
				</Value>
				<Value type="list" genre="config" instance="1" index="3" label="Floor sensor type" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" vindex="0" size="0">
					<Item label="10k ntc" value="0" />
					<Item label="12k ntc" value="1" />
					<Item label="15k ntc" value="2" />
					<Item label="22k ntc" value="3" />
					<Item label="33k ntc" value="4" />
					<Item label="47k ntc" value="5" />
				</Value>
				<Value type="short" genre="config" instance="1" index="4" label="DIFF l. Temperature control Hysteresis" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="3" max="30" value="5">
					<Help>3-30 (0,2C - 3.0C)</Help>
				</Value>
				<Value type="short" genre="config" instance="1" index="5" label="FLo: Floor min limit" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="50" max="400" value="50">
					<Help>50-400 (5.0C - 40.0C)</Help>
				</Value>
				<Value type="short" genre="config" instance="1" index="6" label="FHi: Floor max limit" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="50" max="400" value="400">
					<Help>50-400 (5.0C - 40.0C)</Help>
				</Value>
				<Value type="short" genre="config" instance="1" index="7" label="ALo: Air min limit" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="50" max="400" value="50">
					<Help>50-400 (5.0C - 40.0C)</Help>
				</Value>
				<Value type="short" genre="config" instance="1" index="8" label="AHi: Air max limit" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="50" max="400" value="400">
					<Help>50-400 (5.0C - 40.0C)</Help>
				</Value>
				<Value type="byte" genre="config" instance="1" index="9" label="PLo: Min temperature in Power Reg Mode" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="9" value="0">
					<Help>0-9. Min temperature in Power Regulator Mode (setting 2. Temperature sensor - P)</Help>
				</Value>
				<Value type="short" genre="config" instance="1" index="10" label="CO mode setpoint" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="50" max="400" value="210">
					<Help>50-400 (5.0C - 40.0C)</Help>
				</Value>
				<Value type="short" genre="config" instance="1" index="11" label="ECO mode setpoint" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="50" max="400" value="180">
					<Help>50-400 (5.0C - 40.0C)</Help>
				</Value>
				<Value type="short" genre="config" instance="1" index="12" label="P setting" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="10" value="2">
					<Help>0-10</Help>
				</Value>
				<Value type="short" genre="config" instance="1" index="13" label="COOL setpoint" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="50" max="400" value="180">
					<Help>Only if cooling is enabled. 50-400 (5.0C - 40.0C)</Help>
				</Value>
			</CommandClass>
			<CommandClass id="114" name="COMMAND_CLASS_MANUFACTURER_SPECIFIC" version="1" request_flags="4" innif="true">
				<Instance index="1" />
			</CommandClass>
			<CommandClass id="115" name="COMMAND_CLASS_POWERLEVEL" version="1" request_flags="4" innif="true">
				<Instance index="1" />
				<Value type="list" genre="system" instance="1" index="0" label="Powerlevel" units="dB" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" vindex="0" size="1">
					<Item label="Normal" value="0" />
					<Item label="-1dB" value="1" />
					<Item label="-2dB" value="2" />
					<Item label="-3dB" value="3" />
					<Item label="-4dB" value="4" />
					<Item label="-5dB" value="5" />
					<Item label="-6dB" value="6" />
					<Item label="-7dB" value="7" />
					<Item label="-8dB" value="8" />
					<Item label="-9dB" value="9" />
				</Value>
				<Value type="byte" genre="system" instance="1" index="1" label="Timeout" units="seconds" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="0" />
				<Value type="button" genre="system" instance="1" index="2" label="Set Powerlevel" units="" read_only="false" write_only="true" verify_changes="false" poll_intensity="0" min="0" max="0" />
				<Value type="byte" genre="system" instance="1" index="3" label="Test Node" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="0" />
				<Value type="list" genre="system" instance="1" index="4" label="Test Powerlevel" units="dB" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" vindex="0" size="1">
					<Item label="Normal" value="0" />
					<Item label="-1dB" value="1" />
					<Item label="-2dB" value="2" />
					<Item label="-3dB" value="3" />
					<Item label="-4dB" value="4" />
					<Item label="-5dB" value="5" />
					<Item label="-6dB" value="6" />
					<Item label="-7dB" value="7" />
					<Item label="-8dB" value="8" />
					<Item label="-9dB" value="9" />
				</Value>
				<Value type="short" genre="system" instance="1" index="5" label="Frame Count" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="-32768" max="32767" value="0" />
				<Value type="button" genre="system" instance="1" index="6" label="Test" units="" read_only="false" write_only="true" verify_changes="false" poll_intensity="0" min="0" max="0" />
				<Value type="button" genre="system" instance="1" index="7" label="Report" units="" read_only="false" write_only="true" verify_changes="false" poll_intensity="0" min="0" max="0" />
				<Value type="list" genre="system" instance="1" index="8" label="Test Status" units="" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" vindex="0" size="1">
					<Item label="Failed" value="0" />
					<Item label="Success" value="1" />
					<Item label="In Progress" value="2" />
				</Value>
				<Value type="short" genre="system" instance="1" index="9" label="Acked Frames" units="" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="-32768" max="32767" value="0" />
			</CommandClass>
			<CommandClass id="133" name="COMMAND_CLASS_ASSOCIATION" version="1" request_flags="4" innif="true">
				<Instance index="1" />
				<Associations num_groups="2">
					<Group index="1" max_associations="1" label="Lifeline" auto="true">
						<Node id="1" />
					</Group>
					<Group index="2" max_associations="8" label="On/Off control" auto="false" />
				</Associations>
			</CommandClass>
			<CommandClass id="134" name="COMMAND_CLASS_VERSION" version="1" request_flags="4" innif="true">
				<Instance index="1" />
				<Value type="string" genre="system" instance="1" index="0" label="Library Version" units="" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="6" />
				<Value type="string" genre="system" instance="1" index="1" label="Protocol Version" units="" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="3.83" />
				<Value type="string" genre="system" instance="1" index="2" label="Application Version" units="" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="1.08" />
			</CommandClass>
		</CommandClasses>
1 Like

Thank you very much! Just a final question, where would you put this XML file?

you can find it usually your home assistant home directory.
Usually: /home/homeassistant/.homeassistant

XML file name: zwcfg_…XML

It contain your Heatit config. Find it, and replace with shared config.

Thanks for sharing the xml file. I am also using TF 021 from Heatit. It now reports current temperature after applying your change. But instead of reporting the current temperature from the internal sensor, it is reporting the thermostat set point temperature as the current temperature. Could you explain where in the xml file handles the current temperature so that I can look further into it? Thanks

Sorry forget about. It is firmware 1.8 that makes the thermostat only report and display it’s set point temperature

Hi,

I use the external sensor. If you use the internal sensor, the thermostat (and HA) show the set temperature with firmware 1.8.

Thanks. Just figured it out on their website. Looks like I need to get a cable to upgrade the firmware to 1.9. Expensive tho…

Kejszijo - thank you for that XML. It works well!

I have upgraded to 1.92, in the meantime, and lost the ability to change the set-points.

Is your thermostat v 1.8 or 1.92 firmware? Do you have any suggestions on modifying the XML to support 1.92?

Hi,

My thermostat firmware is 1.8. I have no update cable, so I can’t upgrade it. My suggestion is, if you can, remove node from your network and add node again, and save z-wave config. Check config. If no change, try the other way. Remove node, and try it add again with domoticz. It create the config file too, check changes.
but it can be a firmware fail… :frowning:

Thanks, Kejszijo.

Removing it didn’t work. I guess that’s also a side effect of the upgrade.

In the end I downgraded it to the old firmware, v1.8, removed it from HA and re-added it.

I will keep it on 1.8 for now until I find a good way of modifying your XML with the suitable parameters for v1.9 firmware.

Did you develop the XML yourself? Could you give me some pointers on how I could figure out the right params to put in the XML? I would very much appreciate it. I have never developed for Wave devices before.

cheers,
sherali

Hi,

My configuration file is from domoticz. I didn’t develop it. I try the thermostat in domoticz, it’s create a config file. After, I copy it to HA. I didn’t touch it.

Look at this, maybe help.
http://www.domoticz.com/forum/viewtopic.php?f=56&t=8273