Devolo zwave thermostat

hi there,
i have devolo zwave room thermostat:
https://www.uk-automation.co.uk/devolo-home-control-room-thermostat-z-wave/
adding to zwave network was very easy, but in home assistant they appear only as thermometers.
I do not see them as thermostats, i do not see “setPoint” value that i’m setting with buttons on thermostats.
is there a working solution to this?

Could you provide the content of the zwcfg section for this node?
Probably it is defined like something else than a thermostat in the generic and specific sections.
Should be an easy fix for this.

Thanks for reply, please see below zwcfg

Driver xmlns=“http://code.google.com/p/open-zwave/” version=“3” node_id=“1” api_capabilities=“0” controller_capabilities=“40” poll_interval=“60000” poll_interval_between=“true”>
Node id=“1” name="" location="" basic=“2” generic=“2” specific=“1” type=“Static PC Controller” listening=“true” frequentListening=“false” beaming=“true” routing=“false” max_baud_rate=“40000” version=“4” query_stage=“Complete”>
Manufacturer id=“147” name=“Z-Wave.Me”>
Product type=“400” id=“2” name=“RaZberry Controller 2016 ZWave+” />
/Manufacturer>
CommandClasses>
CommandClass id=“32” name=“COMMAND_CLASS_BASIC” version=“1” after_mark=“true”>
Instance index=“1” />
Value type=“byte” genre=“basic” instance=“1” index=“0” label=“Basic” units="" read_only=“false” write_only=“false” verify_changes=“false” poll_intensity=“0” min=“0” max=“255” value=“0” />
/CommandClass>
/CommandClasses>
/Node>
Node id=“10” name="" location="" basic=“4” generic=“33” specific=“1” type=“Routing Multilevel Sensor” listening=“false” frequentListening=“false” beaming=“true” routing=“true” max_baud_rate=“40000” version=“4” query_stage=“Probe”>
Manufacturer id=“2” name=“Danfoss”>
Product type=“3” id=“8010” name=“RS Room Sensor” />
/Manufacturer>
CommandClasses>
CommandClass id=“32” name=“COMMAND_CLASS_BASIC” version=“1” request_flags=“4” after_mark=“true” innif=“true” mapping=“49”>
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=“25.31” />
/CommandClass>
CommandClass id=“67” name=“COMMAND_CLASS_THERMOSTAT_SETPOINT” version=“1” request_flags=“4” override_precision=“2” 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=“21.0” />
Value type=“decimal” genre=“user” instance=“1” index=“2” label=“Cooling” units=“C” read_only=“false” write_only=“false” verify_changes=“false” poll_intensity=“0” min=“0” max=“0” value=“21.0” />
Value type=“decimal” genre=“user” instance=“1” index=“3” label=“Unused” units=“C” read_only=“false” write_only=“false” verify_changes=“false” poll_intensity=“0” min=“0” max=“0” value=“0.0” />
/CommandClass>
CommandClass id=“91” name=“COMMAND_CLASS_CENTRAL_SCENE” version=“1” request_flags=“4” innif=“true” scenecount=“0”>
Instance index=“1” />
Value type=“int” genre=“system” instance=“1” index=“0” label=“Scene Count” units="" read_only=“true” write_only=“false” verify_changes=“false” poll_intensity=“0” min="-2147483648" max=“2147483647” value=“0” />
/CommandClass>
CommandClass id=“112” name=“COMMAND_CLASS_CONFIGURATION” version=“1” request_flags=“4” innif=“true”>
Instance index=“1” />
Value type=“short” genre=“config” instance=“1” index=“1” label=“Temperature Threshold” units="" read_only=“false” write_only=“false” verify_changes=“false” poll_intensity=“0” min=“1” max=“100” value=“1”>
Help>Temperature Report threshold (1=0.1C) /Help>
/Value>
Value type=“short” genre=“config” instance=“1” index=“2” label=“Setpoint resolution” units="" read_only=“false” write_only=“false” verify_changes=“false” poll_intensity=“0” min=“1” max=“100” value=“1”>
Help>Set-point display resolution (1=0.1C) /Help>
/Value>
Value type=“short” genre=“config” instance=“1” index=“3” label=“Min/Override Setpoint” units="" read_only=“false” write_only=“false” verify_changes=“false” poll_intensity=“0” min=“0” max=“40” value=“12”>
Help>Min Set-point and override limit /Help>
/Value>
Value type=“short” genre=“config” instance=“1” index=“4” label=“Max/Override Setpoint” units="" read_only=“false” write_only=“false” verify_changes=“false” poll_intensity=“0” min=“0” max=“40” value=“28”>
Help>Max Set-point and override limit /Help>
/Value>
Value type=“short” genre=“config” instance=“1” index=“5” label=“Led Flash Period” units="" read_only=“false” write_only=“false” verify_changes=“false” poll_intensity=“0” min=“0” max=“65535” value=“1”>
Help>Led Flash Period (0 to 65535 seconds) /Help>
/Value>
Value type=“list” genre=“config” instance=“1” index=“6” label=“Setpoint control function” units="" read_only=“false” write_only=“false” verify_changes=“false” poll_intensity=“0” min=“0” max=“0” vindex=“1” size=“1”>
Help>Setpoint control function /Help>
Item label=“Disabled” value=“0” />
Item label=“Enabled” value=“1” />
/Value>
Value type=“list” genre=“config” instance=“1” index=“7” label=“Temporarily override scheduler” units="" read_only=“false” write_only=“false” verify_changes=“false” poll_intensity=“0” min=“0” max=“0” vindex=“1” size=“1”>
Help>Temporarily override scheduler /Help>
Item label=“Disabled” value=“0” />
Item label=“Enabled” value=“1” />
/Value>
Value type=“list” genre=“config” instance=“1” index=“8” label=“Setpoint type” units="" read_only=“false” write_only=“false” verify_changes=“false” poll_intensity=“0” min=“0” max=“0” vindex=“2” size=“1”>
Help>Setpoint type in thermostat setpoint_reports /Help>
Item label=“Heating” value=“1” />
Item label=“Cooling” value=“2” />
Item label=“Auto Changeover” value=“10” />
/Value>
Value type=“byte” genre=“config” instance=“1” index=“9” label=“Led on time” units="" read_only=“false” write_only=“false” verify_changes=“false” poll_intensity=“0” min=“1” max=“5” value=“1”>
Help>Led on time (1=100ms) /Help>
/Value>
Value type=“byte” genre=“config” instance=“1” index=“10” label=“Number of flash” units="" read_only=“false” write_only=“false” verify_changes=“false” poll_intensity=“0” min=“0” max=“255” value=“5”>
Help>Number of led flashes (duration) /Help>
/Value>
Value type=“list” genre=“config” instance=“1” index=“11” label=“Led Color” units="" read_only=“false” write_only=“false” verify_changes=“false” poll_intensity=“0” min=“0” max=“0” vindex=“0” size=“1”>
Help>Led Color /Help>
Item label=“Green” value=“1” />
Item label=“Red” value=“2” />
/Value>
/CommandClass>
CommandClass id=“114” name=“COMMAND_CLASS_MANUFACTURER_SPECIFIC” version=“1” request_flags=“4” innif=“true”>
Instance index=“1” />
/CommandClass>
CommandClass id=“117” name=“COMMAND_CLASS_PROTECTION” version=“1” request_flags=“4” innif=“true”>
Instance index=“1” />
Value type=“list” genre=“system” instance=“1” index=“0” label=“Protection” units="" read_only=“false” write_only=“false” verify_changes=“false” poll_intensity=“0” min=“0” max=“0” vindex=“0” size=“1”>
Item label=“Unprotected” value=“0” />
Item label=“Protection by Sequence” value=“1” />
Item label=“No Operation Possible” value=“2” />
/Value>
/CommandClass>
CommandClass id=“128” name=“COMMAND_CLASS_BATTERY” version=“1” request_flags=“4” innif=“true”>
Instance index=“1” />
Value type=“byte” genre=“user” instance=“1” index=“0” label=“Battery Level” units="%" read_only=“true” write_only=“false” verify_changes=“false” poll_intensity=“0” min=“0” max=“255” value=“100” />
/CommandClass>
CommandClass id=“132” name=“COMMAND_CLASS_WAKE_UP” version=“2” innif=“true”>
Instance index=“1” />
Value type=“int” genre=“system” instance=“1” index=“0” label=“Wake-up Interval” units=“Seconds” read_only=“false” write_only=“false” verify_changes=“false” poll_intensity=“0” min="-2147483648" max=“2147483647” value=“360” />
Value type=“int” genre=“system” instance=“1” index=“1” label=“Minimum Wake-up Interval” units=“Seconds” read_only=“true” write_only=“false” verify_changes=“false” poll_intensity=“0” min="-2147483648" max=“2147483647” value=“300” />
Value type=“int” genre=“system” instance=“1” index=“2” label=“Maximum Wake-up Interval” units=“Seconds” read_only=“true” write_only=“false” verify_changes=“false” poll_intensity=“0” min="-2147483648" max=“2147483647” value=“86400” />
Value type=“int” genre=“system” instance=“1” index=“3” label=“Default Wake-up Interval” units=“Seconds” read_only=“true” write_only=“false” verify_changes=“false” poll_intensity=“0” min="-2147483648" max=“2147483647” value=“3600” />
Value type=“int” genre=“system” instance=“1” index=“4” label=“Wake-up Interval Step” units=“Seconds” read_only=“true” write_only=“false” verify_changes=“false” poll_intensity=“0” min="-2147483648" max=“2147483647” value=“1” />
/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.67” />
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.00” />
/CommandClass>
CommandClass id=“135” name=“COMMAND_CLASS_INDICATOR” version=“1” request_flags=“4” innif=“true”>
Instance index=“1” />
Value type=“byte” genre=“user” instance=“1” index=“0” label=“Indicator” units="" read_only=“false” write_only=“false” verify_changes=“false” poll_intensity=“0” min=“0” max=“255” value=“0” />
/CommandClass>
CommandClass id=“143” name=“COMMAND_CLASS_MULTI_CMD” version=“1” request_flags=“4” innif=“true”>
Instance index=“1” />
/CommandClass>
/CommandClasses>
/Node>
/Driver>

A fix in the works :+1:
https://github.com/home-assistant/home-assistant/pull/15451

Hi turbokongen,

does it mean with next update of Home-assistant there will be good news? When could this happen? I’m about to order 10 more of these thermostats, but i wanted to test with 2 if all is working.

Thanks.

It is available in the latest beta 0.74.b4

Hi turbokongen,
to be sure, it’s in 0.74.1 for sure?

what do i need to for these changes to happen?
i’ve updated HA to 0.74.1 but they still show only temperature, not like thermostats…

Thanks.

You are right. It didnt make it into either of the mentioned ones. Then it will be available in 0.75 for sure. You can always run the dev branch if you want to test the change immideatly.

Got it. thanks!

Hi turbokongen,

short question, as with 0.75 update i have now “climate” section, each sensor appears as three items. Name_Cooling, Name_Heating, Name_Unused. Cooling and heating now has “target” value which can be set via HA and via on device buttons. What i’m confused, is how to actually use it as thermostat (e.g. assign some zwave switch based on heating need, when target temp. is lower than current). Or maybe device could have “numeric” value when it should be ON (in heating mode)?

Also - can “unknown” be somewhere changed to “Target”?

Thanks in advance.

What you are asking of are available in the generic_thermostat component. There you can assign what switch to use as heater, and what sensor to use as current_temperature. The zwave climate is a representativ of the device thermostat(everything is inside the zwave device)

Hi, thanks.
Is it possible to “sync” target temperature for devolo thermostat with “generic” thermostat?
so when generic up/down target change syncs to Develo device, and vice versa, Devolo’s target syncs to “generics” and based on that relay goes on or off

eg:
climate:

  • platform: generic_thermostat
    name: “Thermostat”
    heater: switch.relay04
    target_sensor: sensor.danfoss_rs_room_sensor_temperature
    min_temp: 15
    max_temp: 30
    target_temp: 21

so that target_temp: something like climate.dusas_heating.temperature

I thunk you must use automations for that.
When generic target_temp chabges, fire automation that sets target_temp on devolo. Probably need to use templates a well.