Core: No climate entites for Danfoss 014G0013 after update HA to 0.103

Created on 11 Dec 2019  路  72Comments  路  Source: home-assistant/core

Home Assistant release with the issue: 0.103

Last working Home Assistant release (if known): 0.102.3

Operating environment (Hass.io/Docker/Windows/etc.): RPi3B, Raspbian, Python 3.7.2, venv

Integration: zwave/climate

Description of problem:
After update HA to 0.103 there are no climate entities for Danfoss 014G0013 radiator thermostats. Only zwave.* and sensor.battery* entities are in HA.

Problem-relevant configuration.yaml entries and (fill out even if it seems unimportant):
Configuration via Integrations:

{
    "connection_class": "local_push",
    "data": {
        "network_key": "redacted",
        "usb_path": "/dev/zwave"
    },
    "domain": "zwave",
    "entry_id": "e45d19b24883408a91907bb2c3fd0d23",
    "options": {},
    "source": "user",
    "system_options": {
        "disable_new_entities": false
    },
    "title": "Z-Wave",
    "version": 1
}

Traceback (if applicable): No related errors in log.

climate zwave

Most helpful comment

Unfortunately https://github.com/home-assistant/home-assistant/pull/27040 assumed that every thermostat implements the COMMAND_CLASS_THERMOSTAT_MODE, but comments here prove otherwise. Would have been better to test it with different thermostats _before_ merging and releasing it.

Anyone having this issue needs to either:

Imho, since it is winter in the northern hemisphere, it is not wise to break the thermostats' functions just now.

All 72 comments

I have exactly the same issue with multiple Devolo and Danfoss Z-Wave devices after upgrading to 0.103. Needed to downgrade to 0.102 again, since these devices are very important during the winter ;-)

Same issue here with the climate entities for Danfoss 014G0013.

@bieniu it looks like it is. https://products.z-wavealliance.org/products/967/classes

Notice how the thermostat is missing COMMAND_CLASS_THERMOSTAT_MODE which is what that PR is looking for.

CC: @oandrew

Hey there @home-assistant/z-wave, mind taking a look at this issue as its been labeled with a integration (zwave) you are listed as a codeowner for? Thanks!

Same issue here.

Same issue here, affects both the danfoss/devolo 014g0013 and the POPP variant of the valve.

Same issue here, I added

climate:
  - platform: zwave

to my config, as per the docs (https://www.home-assistant.io/integrations/zwave/#climate is that new??) but it didn't seem to make any difference.

The worst thing is, I roll back to 0.102.3 but still no thermostats! With or without this new?config.

Same issues none of my Danfoss Thermostat are showing in the UI. It shows them when im at the Integration Page as: This entity is not currently available.

Same Issue here. 7 Devolo thermostats and all of them lost the climate setpoint (Command Class Thermostat Setpoint) part of the integration although current temperature, battery level and Z-Wave status still working fine.

Happened after upgrading to 0.103.

Manufacturer name: Devolo Home Control Radiator Thermostat (014G0013)

Same here. zwave.* entity is there also a sensor.* entity but the climate.* entity are all gone for my Danfoss Z Thermostat 014G0013

Same issue here, I added

climate:
  - platform: zwave

to my config, as per the docs (https://www.home-assistant.io/integrations/zwave/#climate is that new??) but it didn't seem to make any difference.

No that not new, at least not in 0.103

Exactly same issue here.

Exactly same issue here.

I have 5 thermostats and that same issue, try remove and add again thermostat and nothing. Only Battery can see

Unfortunately https://github.com/home-assistant/home-assistant/pull/27040 assumed that every thermostat implements the COMMAND_CLASS_THERMOSTAT_MODE, but comments here prove otherwise. Would have been better to test it with different thermostats _before_ merging and releasing it.

Anyone having this issue needs to either:

Imho, since it is winter in the northern hemisphere, it is not wise to break the thermostats' functions just now.

Since I'm also affected I tried debugging this issue and it seems it has something to do with the changes in the base command class here: https://github.com/home-assistant/home-assistant/pull/27040/files#diff-4969ac1f2c73099aaf2558a6097c4912. Turning on debug logging for the Z-Wave component also gives me thousends of command class issues, which are quite annoying to debug.

However according to spec (pdf) it seems that Thermostat Mode and Thermostat Setpoint are two completely different Z-Wave command classes. That's why I suppose the solutation is somewhere around there.

I tried to add a new Climate entry with the correct command class in the device discovery dict but this doesn't seem to work. Perhaps I'm missing something here? Otherwise this could solve this issue.

{
    const.DISC_COMPONENT: "climate", # Thermostat Setpoint devices
    const.DISC_GENERIC_DEVICE_CLASS: [
        const.GENERIC_TYPE_THERMOSTAT,
        const.GENERIC_TYPE_SENSOR_MULTILEVEL,
    ],
    const.DISC_VALUES: dict(
        DEFAULT_VALUES_SCHEMA,
        **{
            const.DISC_PRIMARY: {
                const.DISC_COMMAND_CLASS: [const.COMMAND_CLASS_THERMOSTAT_SETPOINT]
            },
            "temperature": {
                const.DISC_COMMAND_CLASS: [const.COMMAND_CLASS_SENSOR_MULTILEVEL],
                const.DISC_INDEX: [const.INDEX_SENSOR_MULTILEVEL_TEMPERATURE],
                const.DISC_OPTIONAL: True,
            },
        }
    )
},

@oandrew the devices that aren't working (mostly Danfoss / Devolo / Popp) only expose command class 67 (See also Open Z Wave).

@electrofloat Appearently we found the same thing 馃槃. The thing is though, that @oandrew correctly amended the tests with this change. Even leaving a setpoint device in place. So maybe there is something going on there as well....

Having this issue with a Honeywell T6 Pro

My devolo thermostats are also impacted.

Sorry about this, everyone.

I will try to take a look at it/fix it tomorrow/this weekend.
Also It would be super helpful if you could share xml definitions of problematic devices from
your zwcfg_*.xml file. e.g. <Node> ... </Node>.
Thanks!

@oandrew Danfoss 014G0013

<Node id="4" name="Danfoss 014G0013" location="sypialnia" basic="4" generic="8" specific="4" type="Setpoint Thermostat" listening="false" frequentListening="false" beaming="true" routing="true" max_baud_rate="40000" version="4" query_stage="Complete">
    <Manufacturer id="2" name="Danfoss">
        <Product type="5" id="4" name="Z Thermostat 014G0013" />
    </Manufacturer>
    <CommandClasses>
        <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 1" units="C" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="21.00" />
        </CommandClass>
        <CommandClass id="70" name="COMMAND_CLASS_CLIMATE_CONTROL_SCHEDULE" version="1" request_flags="4" innif="true" change_counter="0">
            <Instance index="1" />
            <Value type="schedule" genre="user" instance="1" index="1" label="Monday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
            <Value type="schedule" genre="user" instance="1" index="2" label="Tuesday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
            <Value type="schedule" genre="user" instance="1" index="3" label="Wednesday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
            <Value type="schedule" genre="user" instance="1" index="4" label="Thursday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
            <Value type="schedule" genre="user" instance="1" index="5" label="Friday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
            <Value type="schedule" genre="user" instance="1" index="6" label="Saturday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
            <Value type="schedule" genre="user" instance="1" index="7" label="Sunday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
            <Value type="list" genre="user" instance="1" index="8" label="Override State" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" vindex="0" size="1">
                <Item label="None" value="0" />
                <Item label="Temporary" value="1" />
                <Item label="Permanent" value="2" />
            </Value>
            <Value type="byte" genre="user" instance="1" index="9" label="Override Setback" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="127" />
        </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="48" />
        </CommandClass>
        <CommandClass id="129" name="COMMAND_CLASS_CLOCK" version="1" request_flags="4" innif="true">
            <Instance index="1" />
            <Value type="list" genre="user" instance="1" index="0" label="Day" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" vindex="4" size="1">
                <Item label="Monday" value="1" />
                <Item label="Tuesday" value="2" />
                <Item label="Wednesday" value="3" />
                <Item label="Thursday" value="4" />
                <Item label="Friday" value="5" />
                <Item label="Saturday" value="6" />
                <Item label="Sunday" value="7" />
            </Value>
            <Value type="byte" genre="user" instance="1" index="1" label="Hour" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="5" />
            <Value type="byte" genre="user" instance="1" index="2" label="Minute" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="31" />
        </CommandClass>
        <CommandClass id="132" name="COMMAND_CLASS_WAKE_UP" version="2" request_flags="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="300" />
            <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="60" />
            <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="1800" />
            <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="300" />
            <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="60" />
        </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.01" />
        </CommandClass>
        <CommandClass id="143" name="COMMAND_CLASS_MULTI_CMD" version="1" request_flags="4" innif="true">
            <Instance index="1" />
        </CommandClass>
    </CommandClasses>
</Node>

Here is the xml definition for the POPP Wireless Thermostatic Valve TRV, shown as Danfoss Popp Radiator Thermostat in HA:
https://pastebin.com/MBt1fbJB

Unfortunately #27040 assumed that every thermostat implements the COMMAND_CLASS_THERMOSTAT_MODE, but comments here prove otherwise. Would have been better to test it with different thermostats _before_ merging and releasing it.

Anyone having this issue needs to either:

  • revert back to previous version of HA, or
  • revert #27040 manually while HA is stopped.

Imho, since it is winter in the northern hemisphere, it is not wise to break the thermostats' functions just now.

I went back to 0.102.3 and my Devolos are working now! Thanks for the advice!

I hope we can solve this issue asap.

Same issue with Eurotronic and Fibaro for me

My Devolo thermostats were gone after updating to 0.103, too. After downgrading back to 0.102.3 everything is working again.

Here's how to perform a downgrade using SSH:

hassio homeassistant update --version 0.102.3

@oandrew Danfoss Z Thermostat 014G0013 xml defintion:

<Node id="4" name="" location="" basic="4" generic="8" specific="4" type="Setpoint Thermostat" listening="false" frequentListening="false" beaming="true" routing="true" max_baud_rate="40000" version="4" query_stage="Complete">
        <Manufacturer id="2" name="Danfoss">
            <Product type="5" id="4" name="Z Thermostat 014G0013" />
        </Manufacturer>
        <CommandClasses>
            <CommandClass id="67" name="COMMAND_CLASS_THERMOSTAT_SETPOINT" version="1" request_flags="4" override_precision="2" innif="true" base="0" typeInterpretation="B">
                <Instance index="1" />
                <Value type="decimal" genre="user" instance="1" index="1" label="Heating 1" units="C" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="23.00" />
            </CommandClass>
            <CommandClass id="70" name="COMMAND_CLASS_CLIMATE_CONTROL_SCHEDULE" version="1" request_flags="4" innif="true" change_counter="0">
                <Instance index="1" />
                <Value type="schedule" genre="user" instance="1" index="1" label="Monday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
                <Value type="schedule" genre="user" instance="1" index="2" label="Tuesday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
                <Value type="schedule" genre="user" instance="1" index="3" label="Wednesday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
                <Value type="schedule" genre="user" instance="1" index="4" label="Thursday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
                <Value type="schedule" genre="user" instance="1" index="5" label="Friday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
                <Value type="schedule" genre="user" instance="1" index="6" label="Saturday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
                <Value type="schedule" genre="user" instance="1" index="7" label="Sunday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
                <Value type="list" genre="user" instance="1" index="8" label="Override State" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" vindex="0" size="1">
                    <Item label="None" value="0" />
                    <Item label="Temporary" value="1" />
                    <Item label="Permanent" value="2" />
                </Value>
                <Value type="byte" genre="user" instance="1" index="9" label="Override Setback" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="127" />
            </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="40" />
            </CommandClass>
            <CommandClass id="129" name="COMMAND_CLASS_CLOCK" version="1" request_flags="4" innif="true">
                <Instance index="1" />
                <Value type="list" genre="user" instance="1" index="0" label="Day" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" vindex="5" size="1">
                    <Item label="Monday" value="1" />
                    <Item label="Tuesday" value="2" />
                    <Item label="Wednesday" value="3" />
                    <Item label="Thursday" value="4" />
                    <Item label="Friday" value="5" />
                    <Item label="Saturday" value="6" />
                    <Item label="Sunday" value="7" />
                </Value>
                <Value type="byte" genre="user" instance="1" index="1" label="Hour" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="2" />
                <Value type="byte" genre="user" instance="1" index="2" label="Minute" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="25" />
            </CommandClass>
            <CommandClass id="132" name="COMMAND_CLASS_WAKE_UP" version="2" request_flags="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="300" />
                <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="60" />
                <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="1800" />
                <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="300" />
                <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="60" />
            </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.01" />
            </CommandClass>
            <CommandClass id="143" name="COMMAND_CLASS_MULTI_CMD" version="1" request_flags="4" innif="true">
                <Instance index="1" />
            </CommandClass>
        </CommandClasses>
</Node>

For Z-Wave Plus there are two defined types of thermostats (see SDS11847 Z-Wave Plus Device Type Specification):

Section 4.26 Thermostat - HVAC

The Thermostat (HVAC) Device Type is intended by thermostats that support set points and modes. It is typically used for all mainstream thermostats that can support e.g. Heating, Cooling and Fans.

Device Type: Thermostat - HVAC
Identifiers: GENERIC_TYPE_THERMOSTAT, SPECIFIC_TYPE_THERMOSTAT_GENERAL_V2
Mandatory Command Classes: Thermostat Mode, Thermostat Set Point, etc.

Section 4.27 Thermostat - Setback

The Thermostat Setback Device Type is intended for thermostats that typically do not allow for actual temperature settings but rather adjust the temperature up and down to certain thresholds.

Device Type: Thermostat - Setback
Identifiers: GENERIC_TYPE_THERMOSTAT, SPECIFIC_TYPE_SETBACK_THERMOSTAT
Mandatory Command Classes: Thermostat Setback, etc., NOT Thermostat Mode

The Danfoss, etc. are Setback/Setpoint types, which you can see in the XML (so OZW is certainly aware of that):

<Node id="4" name="" location="" basic="4" generic="8" specific="4" type="Setpoint Thermostat" listening="false" frequentListening="false" beaming="true" routing="true" max_baud_rate="40000" version="4" query_stage="Complete">

Here is my "Generic" thermostat which provides Mode and Set Point classes, and is working great in 0.103:

 <Node id="5" name="" location="" basic="4" generic="8" specific="6" roletype="7" devicetype="4608" nodetype="0" type="General Thermostat V2" listening="false" frequentListening="true" beaming="true" routing="true" max_baud_rate="40000" version="4" query_stage="Complete">

type _Setpoint Thermostat_ vs. _General Thermostat V2_.

Probably want to check the (specific) type, and use the old behavior for Setback thermostats, and new behavior for General V2.

Non Z-Wave plus have other specific types. Most of them define mandatory classes, some don't (see SDS10242).

OZW exposes all the specific types here.

Same issue here with maxcube, no climate.*

same issue also here :( with popp

Hello,

The definitions of some if my thermostats

Popp

    <Node id="10" name="" location="" basic="4" generic="8" specific="4" type="Setpoint Thermostat" listening="false" frequentListening="false" beaming="true" routing="true" max_baud_rate="40000" version="4" query_stage="Complete">
        <Manufacturer id="2" name="Danfoss">
            <Product type="115" id="a010" name="Popp Radiator Thermostat" />
        </Manufacturer>
        <CommandClasses>
            <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="20.50" />
            </CommandClass>
            <CommandClass id="67" name="COMMAND_CLASS_THERMOSTAT_SETPOINT" version="2" request_flags="2" override_precision="2" innif="true" base="0">
                <Instance index="1" />
                <Value type="decimal" genre="user" instance="1" index="1" label="Heating 1" units="C" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="20.50" />
            </CommandClass>
            <CommandClass id="70" name="COMMAND_CLASS_CLIMATE_CONTROL_SCHEDULE" version="1" request_flags="4" innif="true" change_counter="0">
                <Instance index="1" />
                <Value type="schedule" genre="user" instance="1" index="1" label="Monday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
                <Value type="schedule" genre="user" instance="1" index="2" label="Tuesday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
                <Value type="schedule" genre="user" instance="1" index="3" label="Wednesday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
                <Value type="schedule" genre="user" instance="1" index="4" label="Thursday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
                <Value type="schedule" genre="user" instance="1" index="5" label="Friday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
                <Value type="schedule" genre="user" instance="1" index="6" label="Saturday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
                <Value type="schedule" genre="user" instance="1" index="7" label="Sunday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
                <Value type="list" genre="user" instance="1" index="8" label="Override State" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" vindex="0" size="1">
                    <Item label="None" value="0" />
                    <Item label="Temporary" value="1" />
                    <Item label="Permanent" value="2" />
                </Value>
                <Value type="byte" genre="user" instance="1" index="9" label="Override Setback" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="127" />
            </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="69" />
            </CommandClass>
            <CommandClass id="129" name="COMMAND_CLASS_CLOCK" version="1" request_flags="4" innif="true">
                <Instance index="1" />
                <Value type="list" genre="user" instance="1" index="0" label="Day" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" vindex="1" size="1">
                    <Item label="Monday" value="1" />
                    <Item label="Tuesday" value="2" />
                    <Item label="Wednesday" value="3" />
                    <Item label="Thursday" value="4" />
                    <Item label="Friday" value="5" />
                    <Item label="Saturday" value="6" />
                    <Item label="Sunday" value="7" />
                </Value>
                <Value type="byte" genre="user" instance="1" index="1" label="Hour" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="22" />
                <Value type="byte" genre="user" instance="1" index="2" label="Minute" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="21" />
            </CommandClass>
            <CommandClass id="132" name="COMMAND_CLASS_WAKE_UP" version="2" request_flags="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="300" />
                <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="60" />
                <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="1800" />
                <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="300" />
                <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="60" />
            </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="143" name="COMMAND_CLASS_MULTI_CMD" version="1" request_flags="4" innif="true">
                <Instance index="1" />
            </CommandClass>
        </CommandClasses>
    </Node>

Original Danfoss without themp report

    <Node id="16" name="" location="" basic="4" generic="8" specific="4" type="Setpoint Thermostat" listening="false" frequentListening="false" beaming="true" routing="true" max_baud_rate="40000" version="4" query_stage="Complete">
        <Manufacturer id="2" name="Danfoss">
            <Product type="5" id="4" name="Z Thermostat 014G0013" />
        </Manufacturer>
        <CommandClasses>
            <CommandClass id="67" name="COMMAND_CLASS_THERMOSTAT_SETPOINT" version="2" request_flags="2" override_precision="2" innif="true" base="0">
                <Instance index="1" />
                <Value type="decimal" genre="user" instance="1" index="1" label="Heating 1" units="C" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="20.50" />
            </CommandClass>
            <CommandClass id="70" name="COMMAND_CLASS_CLIMATE_CONTROL_SCHEDULE" version="1" request_flags="4" innif="true" change_counter="0">
                <Instance index="1" />
                <Value type="schedule" genre="user" instance="1" index="1" label="Monday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
                <Value type="schedule" genre="user" instance="1" index="2" label="Tuesday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
                <Value type="schedule" genre="user" instance="1" index="3" label="Wednesday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
                <Value type="schedule" genre="user" instance="1" index="4" label="Thursday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
                <Value type="schedule" genre="user" instance="1" index="5" label="Friday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
                <Value type="schedule" genre="user" instance="1" index="6" label="Saturday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
                <Value type="schedule" genre="user" instance="1" index="7" label="Sunday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
                <Value type="list" genre="user" instance="1" index="8" label="Override State" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" vindex="0" size="1">
                    <Item label="None" value="0" />
                    <Item label="Temporary" value="1" />
                    <Item label="Permanent" value="2" />
                </Value>
                <Value type="byte" genre="user" instance="1" index="9" label="Override Setback" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="127" />
            </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="83" />
            </CommandClass>
            <CommandClass id="129" name="COMMAND_CLASS_CLOCK" version="1" request_flags="4" innif="true">
                <Instance index="1" />
                <Value type="list" genre="user" instance="1" index="0" label="Day" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" vindex="5" size="1">
                    <Item label="Monday" value="1" />
                    <Item label="Tuesday" value="2" />
                    <Item label="Wednesday" value="3" />
                    <Item label="Thursday" value="4" />
                    <Item label="Friday" value="5" />
                    <Item label="Saturday" value="6" />
                    <Item label="Sunday" value="7" />
                </Value>
                <Value type="byte" genre="user" instance="1" index="1" label="Hour" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="12" />
                <Value type="byte" genre="user" instance="1" index="2" label="Minute" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="0" />
            </CommandClass>
            <CommandClass id="132" name="COMMAND_CLASS_WAKE_UP" version="2" request_flags="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="300" />
                <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="60" />
                <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="1800" />
                <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="300" />
                <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="60" />
            </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.01" />
            </CommandClass>
            <CommandClass id="143" name="COMMAND_CLASS_MULTI_CMD" version="1" request_flags="4" innif="true">
                <Instance index="1" />
            </CommandClass>
        </CommandClasses>
    </Node>

Devolo version of the hardware

    <Node id="18" name="" location="" basic="4" generic="8" specific="4" type="Setpoint Thermostat" listening="false" frequentListening="false" beaming="true" routing="true" max_baud_rate="40000" version="4" query_stage="Complete">
        <Manufacturer id="2" name="Danfoss">
            <Product type="5" id="175" name="Devolo Home Control Radiator Thermostat" />
        </Manufacturer>
        <CommandClasses>
            <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="19.47" />
            </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 1" units="C" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="19.00" />
            </CommandClass>
            <CommandClass id="70" name="COMMAND_CLASS_CLIMATE_CONTROL_SCHEDULE" version="1" request_flags="4" innif="true" change_counter="0">
                <Instance index="1" />
                <Value type="schedule" genre="user" instance="1" index="1" label="Monday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
                <Value type="schedule" genre="user" instance="1" index="2" label="Tuesday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
                <Value type="schedule" genre="user" instance="1" index="3" label="Wednesday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
                <Value type="schedule" genre="user" instance="1" index="4" label="Thursday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
                <Value type="schedule" genre="user" instance="1" index="5" label="Friday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
                <Value type="schedule" genre="user" instance="1" index="6" label="Saturday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
                <Value type="schedule" genre="user" instance="1" index="7" label="Sunday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
                <Value type="list" genre="user" instance="1" index="8" label="Override State" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" vindex="0" size="1">
                    <Item label="None" value="0" />
                    <Item label="Temporary" value="1" />
                    <Item label="Permanent" value="2" />
                </Value>
                <Value type="byte" genre="user" instance="1" index="9" label="Override Setback" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="127" />
            </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="82" />
            </CommandClass>
            <CommandClass id="129" name="COMMAND_CLASS_CLOCK" version="1" request_flags="4" innif="true">
                <Instance index="1" />
                <Value type="list" genre="user" instance="1" index="0" label="Day" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" vindex="0" size="1">
                    <Item label="Monday" value="1" />
                    <Item label="Tuesday" value="2" />
                    <Item label="Wednesday" value="3" />
                    <Item label="Thursday" value="4" />
                    <Item label="Friday" value="5" />
                    <Item label="Saturday" value="6" />
                    <Item label="Sunday" value="7" />
                </Value>
                <Value type="byte" genre="user" instance="1" index="1" label="Hour" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="14" />
                <Value type="byte" genre="user" instance="1" index="2" label="Minute" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="28" />
            </CommandClass>
            <CommandClass id="132" name="COMMAND_CLASS_WAKE_UP" version="2" request_flags="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="300" />
                <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="60" />
                <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="1800" />
                <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="300" />
                <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="60" />
            </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="143" name="COMMAND_CLASS_MULTI_CMD" version="1" request_flags="4" innif="true">
                <Instance index="1" />
            </CommandClass>
        </CommandClasses>
    </Node>

Philippe

Can someone test the fix with real devices? Thanks

Can someone test the fix with real devices? Thanks

Hi Andrew, let me know what I need to do

Can someone test the fix with real devices? Thanks

Hi Andrew, let me know what I need to do

I don't know what the recommended way is - in this case - to test out a commit, but on linux I would do something like the following:

systemctl stop homeassistant.service
cd homeassistant/lib/python3.7/site-packages/homeassistant/components/zwave
cp climate.py climate.py_
cp discovery_schemas.py discovery_schemas.py_
wget https://raw.githubusercontent.com/home-assistant/home-assistant/f62167d60c94f9ced9aeb71de37054d966743f9b/homeassistant/components/zwave/climate.py
wget https://raw.githubusercontent.com/home-assistant/home-assistant/f62167d60c94f9ced9aeb71de37054d966743f9b/homeassistant/components/zwave/discovery_schemas.py
systemctl start homeassistant.service

If it works, great. If it doesn't, stop HA again, cp back .py_ files, start HA and you get back where you were.

You can copy homeassistant/components/zwave from my branch into your config directory custom_components/zwave to override a component.

More info here: https://developers.home-assistant.io/docs/en/creating_component_loading.html

You can copy homeassistant/components/zwave from my branch into your config directory custom_components/zwave to override a component.

More info here: https://developers.home-assistant.io/docs/en/creating_component_loading.html

no change...

<Node id="19" name="" location="" basic="4" generic="8" specific="4" type="Setpoint Thermostat" listening="false" frequentListening="false" beaming="true" routing="true" max_baud_rate="40000" version="4" query_stage="Complete">
    <Manufacturer id="2" name="Danfoss">
        <Product type="5" id="4" name="Z Thermostat 014G0013" />
    </Manufacturer>
    <CommandClasses>
        <CommandClass id="67" name="COMMAND_CLASS_THERMOSTAT_SETPOINT" version="1" request_flags="4" override_precision="2" innif="true" base="0" typeInterpretation="B">
            <Instance index="1" />
            <Value type="decimal" genre="user" instance="1" index="1" label="Heating 1" units="C" read_only="false" write_only="false" verify_changes="false" poll_intensity="1" min="0" max="0" value="21.00" />
        </CommandClass>
        <CommandClass id="70" name="COMMAND_CLASS_CLIMATE_CONTROL_SCHEDULE" version="1" request_flags="4" innif="true" change_counter="0">
            <Instance index="1" />
            <Value type="schedule" genre="user" instance="1" index="1" label="Monday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
            <Value type="schedule" genre="user" instance="1" index="2" label="Tuesday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
            <Value type="schedule" genre="user" instance="1" index="3" label="Wednesday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
            <Value type="schedule" genre="user" instance="1" index="4" label="Thursday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
            <Value type="schedule" genre="user" instance="1" index="5" label="Friday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
            <Value type="schedule" genre="user" instance="1" index="6" label="Saturday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
            <Value type="schedule" genre="user" instance="1" index="7" label="Sunday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
            <Value type="list" genre="user" instance="1" index="8" label="Override State" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" vindex="0" size="1">
                <Item label="None" value="0" />
                <Item label="Temporary" value="1" />
                <Item label="Permanent" value="2" />
            </Value>
            <Value type="byte" genre="user" instance="1" index="9" label="Override Setback" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="127" />
        </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="0" />
        </CommandClass>
        <CommandClass id="129" name="COMMAND_CLASS_CLOCK" version="1" request_flags="4" innif="true">
            <Instance index="1" />
            <Value type="list" genre="user" instance="1" index="0" label="Day" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" vindex="3" size="1">
                <Item label="Monday" value="1" />
                <Item label="Tuesday" value="2" />
                <Item label="Wednesday" value="3" />
                <Item label="Thursday" value="4" />
                <Item label="Friday" value="5" />
                <Item label="Saturday" value="6" />
                <Item label="Sunday" value="7" />
            </Value>
            <Value type="byte" genre="user" instance="1" index="1" label="Hour" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="5" />
            <Value type="byte" genre="user" instance="1" index="2" label="Minute" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="26" />
        </CommandClass>
        <CommandClass id="132" name="COMMAND_CLASS_WAKE_UP" version="2" request_flags="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="300" />
            <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="60" />
            <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="1800" />
            <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="300" />
            <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="60" />
        </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.01" />
        </CommandClass>
        <CommandClass id="143" name="COMMAND_CLASS_MULTI_CMD" version="1" request_flags="4" innif="true">
            <Instance index="1" />
        </CommandClass>
    </CommandClasses>
</Node>

I already tried a similar fix earlier. But it seems that this COMMAND_CLASS is not picked up correctly. This is easily spotted by turning on debug logging on the Z-Wave component.

I also think your earlier PR and tests were fine already. Except that Z-Wave (non plus) thermostats were not picked up correctly some way or another.

@oandrew I moved zwave code from your PR to my custom_components folder and did the update to 0.103 (again) and everything is working as expected. Didn't lose the setpoint (climate.*) entity of my Devolo thermostats. So should be fine to merge into master for the next release.

If you need any info / logs just tell me.

EDIT:
Here is one of my thermostats from zwcfg*.xml
https://pastebin.com/4ztZDVWM

And thanks for the quick fix !

@Idanit did you download the zwave folder from the correct branch?

https://github.com/oandrew/home-assistant/archive/zwave-thermostat-bugfix.zip

  • download zip file and unpack
  • copy homeassitant/components/zwave folder to your config/custom_components folder and restart HA.

Oh no, my mistake, very sorry for for misleading. I did this "You can copy homeassistant/components/zwave from my branch into your config directory custom_components/zwave to override a component." Gimme couple of minutes...

Still nothing.

<Node id="19" name="" location="" basic="4" generic="8" specific="4" type="Setpoint Thermostat" listening="false" frequentListening="false" beaming="true" routing="true" max_baud_rate="40000" version="4" query_stage="Session">
    <Manufacturer id="2" name="Danfoss">
        <Product type="5" id="4" name="Z Thermostat 014G0013" />
    </Manufacturer>
    <CommandClasses>
        <CommandClass id="67" name="COMMAND_CLASS_THERMOSTAT_SETPOINT" version="1" request_flags="4" override_precision="2" innif="true" base="0" typeInterpretation="B">
            <Instance index="1" />
            <Value type="decimal" genre="user" instance="1" index="1" label="Heating 1" units="C" read_only="false" write_only="false" verify_changes="false" poll_intensity="1" min="0" max="0" value="22.00" />
        </CommandClass>
        <CommandClass id="70" name="COMMAND_CLASS_CLIMATE_CONTROL_SCHEDULE" version="1" request_flags="4" innif="true" change_counter="0">
            <Instance index="1" />
            <Value type="schedule" genre="user" instance="1" index="1" label="Monday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
            <Value type="schedule" genre="user" instance="1" index="2" label="Tuesday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
            <Value type="schedule" genre="user" instance="1" index="3" label="Wednesday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
            <Value type="schedule" genre="user" instance="1" index="4" label="Thursday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
            <Value type="schedule" genre="user" instance="1" index="5" label="Friday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
            <Value type="schedule" genre="user" instance="1" index="6" label="Saturday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
            <Value type="schedule" genre="user" instance="1" index="7" label="Sunday" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" />
            <Value type="list" genre="user" instance="1" index="8" label="Override State" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" vindex="0" size="1">
                <Item label="None" value="0" />
                <Item label="Temporary" value="1" />
                <Item label="Permanent" value="2" />
            </Value>
            <Value type="byte" genre="user" instance="1" index="9" label="Override Setback" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="127" />
        </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="0" />
        </CommandClass>
        <CommandClass id="129" name="COMMAND_CLASS_CLOCK" version="1" request_flags="4" innif="true">
            <Instance index="1" />
            <Value type="list" genre="user" instance="1" index="0" label="Day" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" vindex="3" size="1">
                <Item label="Monday" value="1" />
                <Item label="Tuesday" value="2" />
                <Item label="Wednesday" value="3" />
                <Item label="Thursday" value="4" />
                <Item label="Friday" value="5" />
                <Item label="Saturday" value="6" />
                <Item label="Sunday" value="7" />
            </Value>
            <Value type="byte" genre="user" instance="1" index="1" label="Hour" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="15" />
            <Value type="byte" genre="user" instance="1" index="2" label="Minute" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="16" />
        </CommandClass>
        <CommandClass id="132" name="COMMAND_CLASS_WAKE_UP" version="2" request_flags="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="300" />
            <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="60" />
            <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="1800" />
            <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="300" />
            <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="60" />
        </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.01" />
        </CommandClass>
        <CommandClass id="143" name="COMMAND_CLASS_MULTI_CMD" version="1" request_flags="4" innif="true">
            <Instance index="1" />
        </CommandClass>
    </CommandClasses>
</Node>

@Idanit Can you verify that the custom component was loaded? You should see this in the HA log:

2019-12-15 13:29:08 INFO (SyncWorker_0) [homeassistant.loader] Loaded zwave from custom_components.zwave
2019-12-15 13:29:08 WARNING (MainThread) [homeassistant.loader] You are using a custom integration for zwave which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you do experience issues
with Home Assistant.

and logs with custom_components.zwave:

2019-12-15 13:29:27 INFO (Dummy-2) [custom_components.zwave] Z-Wave network is ready for use. All awake nodes have been queried. Sleeping nodes will be queried when they awake.

If you don't see the WARNING, or custom_components.zwave, then the custom component was not loaded.

2019-12-15 21:47:22 WARNING (MainThread) [homeassistant.loader] You are using a custom integration for zwave which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you do experience issues with Home Assistant.

@Idanit what's the output of shasum custom_components/zwave/climate.py ?

To throw in another positiv confirmation: Fix works on 0.103.0.
I have the climate entity back.

(sha of climate.py is d8f0abf4f43b8eb220588e1a7d9404bf0751a794)

@Idanit could you please run this command from your config directory.

shasum custom_components/zwave/*

You should see exactly the following:

$ shasum custom_components/zwave/*
d626a14486c11b5c429ba181cd176c2759e04094  custom_components/zwave/binary_sensor.py
d8f0abf4f43b8eb220588e1a7d9404bf0751a794  custom_components/zwave/climate.py
50e14d34e4e2f974945429b1e532b70447bf3552  custom_components/zwave/config_flow.py
148d68e2c4c0c688af14058c788e123ca9294d13  custom_components/zwave/const.py
733e13fa8d692906527cf85fa2792a88fc91b6b5  custom_components/zwave/cover.py
04ca95605a7f6affd4692677ecc792f94e9aa49d  custom_components/zwave/discovery_schemas.py
05b565acf54c30fd3899f42d6e5ca1dd03996a60  custom_components/zwave/fan.py
d33470bf054ab12ee0a926008f55fcb3b378a07c  custom_components/zwave/__init__.py
49b8849fd60d249944ce67d937e08c96b2fe1284  custom_components/zwave/light.py
b9adbd51836ad265e017b1a826afd66e5f1443eb  custom_components/zwave/lock.py
d1ac2f3f9a642b209f523ab549043af1c4237df8  custom_components/zwave/manifest.json
fe45ad09adaaa78e0eef27aee63d358310600565  custom_components/zwave/node_entity.py
781bb3af49abe5f16457a6909bbb2f35880c8f60  custom_components/zwave/sensor.py
33eb30b92f25dd714c30b1a783932e41cfc55ab8  custom_components/zwave/services.yaml
93ec040f32ffd92a90d54f1f9e3b160e555eaabb  custom_components/zwave/strings.json
334fd3e0e53580be693bcbd403403ead3064e2be  custom_components/zwave/switch.py
1266c1ff69e2255d0d3393021f1c31be128966e7  custom_components/zwave/util.py
fcb94aaef371e1c25969afde4f202274b1833dd8  custom_components/zwave/websocket_api.py
16bc27e64d231448f416dde12d7a426229b97477  custom_components/zwave/workaround.py

You could also try enabling debug logs and see if it might show something. Here's an example to add to configuration.yaml when using the custom component:

logger:
  default: info
  logs:
    custom_components.zwave: debug

Then restart HA and it will show debug logs for zwave. Maybe post a copy of home-assistant.log after doing so.

@Idanit please edit your comment and remove all the pasted stuff.
From terminal run shasum custom_components/zwave/*.py and paste your result here.
It should look something like this:

$ shasum custom_components/zwave/*.py
d626a14486c11b5c429ba181cd176c2759e04094  custom_components/zwave/binary_sensor.py
c30c658e3b458f6eaf655e507f3a465d64dcedce  custom_components/zwave/climate.old.py
d8f0abf4f43b8eb220588e1a7d9404bf0751a794  custom_components/zwave/climate.py
50e14d34e4e2f974945429b1e532b70447bf3552  custom_components/zwave/config_flow.py
148d68e2c4c0c688af14058c788e123ca9294d13  custom_components/zwave/const.py
733e13fa8d692906527cf85fa2792a88fc91b6b5  custom_components/zwave/cover.py
04ca95605a7f6affd4692677ecc792f94e9aa49d  custom_components/zwave/discovery_schemas.py
05b565acf54c30fd3899f42d6e5ca1dd03996a60  custom_components/zwave/fan.py
d33470bf054ab12ee0a926008f55fcb3b378a07c  custom_components/zwave/__init__.py
49b8849fd60d249944ce67d937e08c96b2fe1284  custom_components/zwave/light.py
b9adbd51836ad265e017b1a826afd66e5f1443eb  custom_components/zwave/lock.py
fe45ad09adaaa78e0eef27aee63d358310600565  custom_components/zwave/node_entity.py
781bb3af49abe5f16457a6909bbb2f35880c8f60  custom_components/zwave/sensor.py
334fd3e0e53580be693bcbd403403ead3064e2be  custom_components/zwave/switch.py
1266c1ff69e2255d0d3393021f1c31be128966e7  custom_components/zwave/util.py
fcb94aaef371e1c25969afde4f202274b1833dd8  custom_components/zwave/websocket_api.py
16bc27e64d231448f416dde12d7a426229b97477  custom_components/zwave/workaround.py

Home Assistant (2)

Hello,

Another positive feedback of the fix.
d8f0abf4f43b8eb220588e1a7d9404bf0751a794 custom_components/zwave/climate.py

All variants of Danfoss zwave devices I have (Popp, original Danfoss & Devolo) still have the climate part on 0.103.0 with the zwave part override

Philippe

@Idanit How about md5sum instead? Please just copy and paste the command as given so it shows all the files. Make sure you are in the config directory first.

md5sum custom_components/zwave/*.py

Expected output:

$ md5sum custom_components/zwave/*.py
b19eabe4f8601a6f9d8392cf039ddb92  custom_components/zwave/__init__.py
992e77c89f8622104845e3e0188694ce  custom_components/zwave/binary_sensor.py
4b53034a0899981a22577f16e09349fa  custom_components/zwave/climate.py
d8ecd39f7ed33f943992f34d024a514c  custom_components/zwave/config_flow.py
9967ff09a77a77459cb6c46413ff9c50  custom_components/zwave/const.py
b60898066d7018996dd46a2cd8b7a448  custom_components/zwave/cover.py
bd47fc19d1db5ca3b4f02da6b5bebb69  custom_components/zwave/discovery_schemas.py
718205b7f4aee920f794adec943243d9  custom_components/zwave/fan.py
d94537eee62311f1827ec7e29e0f62a3  custom_components/zwave/light.py
fc5866a04ffd89734edbc9baab68c909  custom_components/zwave/lock.py
a8f1464d8243cd64b56eb8bfe810b7bb  custom_components/zwave/node_entity.py
7f2edf3a9754a778b6361f8078e5c017  custom_components/zwave/sensor.py
8afcaf8a5a26cf25b5816865b9a85d97  custom_components/zwave/switch.py
3bb277d42541a7094fb4a832894e6a35  custom_components/zwave/util.py
f7735c1321237aa13f4d85ce7fd9d45c  custom_components/zwave/websocket_api.py
98ed321a103458404f88674431bb5d81  custom_components/zwave/workaround.py

On my (now working) setup:

# md5sum custom_components/zwave/*.py
992e77c89f8622104845e3e0188694ce  custom_components/zwave/binary_sensor.py
4b53034a0899981a22577f16e09349fa  custom_components/zwave/climate.py
d8ecd39f7ed33f943992f34d024a514c  custom_components/zwave/config_flow.py
9967ff09a77a77459cb6c46413ff9c50  custom_components/zwave/const.py
b60898066d7018996dd46a2cd8b7a448  custom_components/zwave/cover.py
bd47fc19d1db5ca3b4f02da6b5bebb69  custom_components/zwave/discovery_schemas.py
718205b7f4aee920f794adec943243d9  custom_components/zwave/fan.py
b19eabe4f8601a6f9d8392cf039ddb92  custom_components/zwave/__init__.py
d94537eee62311f1827ec7e29e0f62a3  custom_components/zwave/light.py
fc5866a04ffd89734edbc9baab68c909  custom_components/zwave/lock.py
a8f1464d8243cd64b56eb8bfe810b7bb  custom_components/zwave/node_entity.py
7f2edf3a9754a778b6361f8078e5c017  custom_components/zwave/sensor.py
8afcaf8a5a26cf25b5816865b9a85d97  custom_components/zwave/switch.py
3bb277d42541a7094fb4a832894e6a35  custom_components/zwave/util.py
f7735c1321237aa13f4d85ce7fd9d45c  custom_components/zwave/websocket_api.py
98ed321a103458404f88674431bb5d81  custom_components/zwave/workaround.py

OK, after restarting hassio not only HA everything back on track. Thanks for Your patience!

Hi it works also for my Danfoss Devolo :) thanks

My Devolo TRVs have returned in 103.2 but my Horstmann HRT4-ZW climate entity has now disappeared (it was present in 103.0 but was missing some functionality).

Here's the Node element from zwcfg:

    <Node id="33" name="" location="" basic="1" generic="8" specific="0" type="Thermostat" listening="false" frequentListening="false" beaming="true" routing="false" max_baud_rate="40000" version="3" secured="true" query_stage="CacheLoad">
        <Manufacturer id="59" name="Horstmann (Secure Meters)">
            <Product type="1" id="3" name="HRT4-ZW Thermostat Transmitter" />
        </Manufacturer>
        <CommandClasses>
            <CommandClass id="32" name="COMMAND_CLASS_BASIC" version="1" request_flags="4">
                <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>
            <CommandClass id="37" name="COMMAND_CLASS_SWITCH_BINARY" version="1" request_flags="4" after_mark="true" innif="true">
                <Instance index="1" />
                <Value type="bool" genre="user" instance="1" index="0" label="Switch" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="False" />
            </CommandClass>
            <CommandClass id="49" name="COMMAND_CLASS_SENSOR_MULTILEVEL" version="1" 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="20.1" />
            </CommandClass>
            <CommandClass id="64" name="COMMAND_CLASS_THERMOSTAT_MODE" version="1" request_flags="4" after_mark="true" 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="0" size="1">
                    <Item label="Off" value="0" />
                    <Item label="Heat" value="1" />
                </Value>
                <SupportedModes>
                    <Mode index="0" label="Off" />
                    <Mode index="1" label="Heat" />
                </SupportedModes>
            </CommandClass>
            <CommandClass id="67" name="COMMAND_CLASS_THERMOSTAT_SETPOINT" version="1" request_flags="4" innif="true" base="0" typeInterpretation="B">
                <Instance index="1" />
                <Value type="decimal" genre="user" instance="1" index="1" label="Heating 1" units="C" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="20.0" />
            </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="Temperature sensor reading" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="1" vindex="1" size="1">
                    <Item label="Disable" value="0" />
                    <Item label="Enable" value="255" />
                </Value>
                <Value type="list" genre="config" instance="1" index="2" label="Temperature Scale" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="1" vindex="0" size="1">
                    <Item label="Celsius" value="0" />
                    <Item label="Fahrenheit" value="255" />
                </Value>
                <Value type="byte" genre="config" instance="1" index="3" label="Temperature Delta T" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="1">
                    <Help>Delta T in steps of 0.1 degree.</Help>
                </Value>
            </CommandClass>
            <CommandClass id="114" name="COMMAND_CLASS_MANUFACTURER_SPECIFIC" version="1" request_flags="4" innif="true">
                <Instance index="1" />
            </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="99" />
            </CommandClass>
            <CommandClass id="132" name="COMMAND_CLASS_WAKE_UP" version="2" request_flags="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="300" />
                <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="256" />
                <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="131071" />
                <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="86400" />
                <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="133" name="COMMAND_CLASS_ASSOCIATION" version="1" request_flags="4" innif="true">
                <Instance index="1" />
                <Associations num_groups="5">
                    <Group index="1" max_associations="4" label="Thermostat Mode Set" auto="true">
                        <Node id="1" />
                        <Node id="32" />
                    </Group>
                    <Group index="2" max_associations="4" label="Binary Switch Set" auto="true">
                        <Node id="1" />
                    </Group>
                    <Group index="3" max_associations="4" label="Unsolicited Battery Level Reports" auto="true">
                        <Node id="1" />
                    </Group>
                    <Group index="4" max_associations="4" label="Thermostat Set Point Reports" auto="true">
                        <Node id="1" />
                    </Group>
                    <Group index="5" max_associations="4" label="Unsolicited Sensor Multilevel Reports" auto="true">
                        <Node id="1" />
                    </Group>
                </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="2" />
                <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="2.78" />
                <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="6.00" />
            </CommandClass>
        </CommandClasses>
    </Node>

Either your cache information is bad, or the manufacturer did not design the device in a friendly way. It looks to be a non-Zwave Plus thermostat and they didn't assign it a specific device class (specific="0"). HA uses the specific device class to determine which command class it should use as the primary when creating the climate entity (thermostat mode vs set point classes). Here are the thermostat specific types:

image

Technically, since this is not Z-Wave Plus, I guess they are in the clear. The spec doesn't say you can't use SPECIFIC_TYPE_NOT_USED (assuming that's actually 0), but it's not very nice. OZW doesn't even have a definition for that specific type.

It's probably preferable for HA to fallback to using the Setpoint command class if no specific type is set, since that's how it basically used to work. Who knows what other devices do that. Or use the workaround code for this specific device.

Is there anything I can do for the time being? I'll try removing the thermostat and adding it again as a secure device, I'm fairly sure the instructions said it could be done.

Easiest for now is to probably shutdown HA and hand edit the file. Replace specific="0" with something like specific="4", which will make it appear like a Setpoint thermostat. It shouldn't change back unless you refresh the node info (not sure of that either), or the file gets corrupted and you have to delete it.

I don't know if re-adding the node will help. You can try, it wouldn't hurt except for the bit of work required to the setup.

Code wise, you could do the custom component workaround talked about earlier, and edit the code here, but that's the most work. I think you could add a 0 to the end of the list, and HA would then treat it as a thermostat device with specific type 0 as a setpoint thermostat.

        const.DISC_SPECIFIC_DEVICE_CLASS: [
            const.SPECIFIC_TYPE_THERMOSTAT_HEATING,
            const.SPECIFIC_TYPE_SETPOINT_THERMOSTAT,
            0,
        ],

@typhoon2099
could you try this branch https://github.com/oandrew/home-assistant/tree/zwave-thermostat-non-specific ?

You can copy homeassistant/components/zwave from my branch into your config directory custom_components/zwave to override a component.

More info here: https://developers.home-assistant.io/docs/en/creating_component_loading.html

I'm currently running Home Assistant on Hassio, so I'm not sure if I can test branches very easily (though I haven't really done much investigation into it). I've tried editing the zwcfg to specific="4", but it doesn't seem to survive a reboot (I didn't edit the file while shut down, my setup is a bit fiddly).

I think I can suffer a few days more without the thermostat in Home Assistant, I've only recently installed it so I'm used to not being able to set the temperature remotely. But I do miss playing with my new toy!

I'm not sure if I can test branches very easily

It's very easy. You can download the code @oandrew has provided, then extract the entire zwave folder into /config/custom_components. After restarting HA, it will pickup the modified code. Instructions are also described above in past comments.

I didn't edit the file while shut down

Well, that is a requirement. The file is saved during every HA shutdown, overwriting anything you may have changed while it was running.

Hi,

I have the same issue with the HRT4-ZW thermostat.
I have reverted back to 0.102.3 and it works.

I run ubuntu and have a virtualenv install with pip.

What is a little unclear for me is if this issue would be fixed in 104? I don't see the reverted code being merged anywhere. I could easily have missed it of course!

Well, that is a requirement. The file is saved during every HA shutdown, overwriting anything you may have changed while it was running.

Does that include when the click Reboot from Hass.io > System > Host System? I had assumed that Home Assistant got killed rather than gracefully shut down. I'll have a go of the custom ZWave component when I get home from work and see if it works.

Ah, so I've installed the custom zwave component, restarted, and now I have thermostat control back! And know I know how to work on my integration for controlling my Sony BluRay player!

Thank you @kpine. I've been battling with my Hostmann SCSC-17 thermostat for days. The climate entities had disappeared completely.
Downloading and extracting the custom zwave component has bought it back to life again.

@Idanit did you download the zwave folder from the correct branch?

https://github.com/oandrew/home-assistant/archive/zwave-thermostat-bugfix.zip

  • download zip file and unpack
  • copy homeassitant/components/zwave folder to your config/custom_components folder and restart HA.

In my case this custom component not helped :(
Anybody can help!?

My file:

<Node id="6" name="" location="" basic="4" generic="8" specific="6" type="General Thermostat V2" listening="true" frequentListening="false" beaming="true" routing="true" max_baud_rate="40000" version="4" query_stage="Complete">
        <Manufacturer id="115" name="Z-Wave.Me">
            <Product type="24" id="1" name="Floor Thermostat" />
        </Manufacturer>
        <CommandClasses>
            <CommandClass id="32" name="COMMAND_CLASS_BASIC" version="1" request_flags="4" innif="true" mapping="64">
                <Instance index="1" />
            </CommandClass>
            <CommandClass id="49" name="COMMAND_CLASS_SENSOR_MULTILEVEL" version="4" 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="21.7" />
            </CommandClass>
            <CommandClass id="64" name="COMMAND_CLASS_THERMOSTAT_MODE" version="2" 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="0" size="1">
                    <Item label="Heat" value="1" />
                    <Item label="Furnace" value="7" />
                    <Item label="Heat Econ" value="11" />
                </Value>
                <SupportedModes>
                    <Mode index="1" label="Heat" />
                    <Mode index="7" label="Furnace" />
                    <Mode index="11" label="Heat Econ" />
                </SupportedModes>
            </CommandClass>
            <CommandClass id="67" name="COMMAND_CLASS_THERMOSTAT_SETPOINT" version="2" request_flags="2" innif="true" base="1" typeInterpretation="B">
                <Instance index="1" />
                <Value type="decimal" genre="user" instance="1" index="2" label="Cooling 1" units="C" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="0.0" />
                <Value type="decimal" genre="user" instance="1" index="4" label="Unused 4" units="C" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="0.0" />
                <Value type="decimal" genre="user" instance="1" index="8" label="Dry Air" units="C" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="0.0" />
            </CommandClass>
            <CommandClass id="112" name="COMMAND_CLASS_CONFIGURATION" version="1" request_flags="4" innif="true">
                <Instance index="1" />
            </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="119" name="COMMAND_CLASS_NODE_NAMING" version="1" request_flags="4" innif="true">
                <Instance index="1" />
            </CommandClass>
            <CommandClass id="133" name="COMMAND_CLASS_ASSOCIATION" version="1" request_flags="4" innif="true">
                <Instance index="1" />
                <Associations num_groups="1">
                    <Group index="1" max_associations="10" label="Group 1" auto="true">
                        <Node id="1" />
                    </Group>
                </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="3" />
                <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.42" />
                <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.01" />
            </CommandClass>
        </CommandClasses>
    </Node>

Upgraded to 0.104.2 and my Horstmann thermostat has stopped working again :(
Anyone else had issues?

Upgraded to 0.104.2 and my Horstmann thermostat has stopped working again :(
Anyone else had issues?

I have not tried, but still on 0.102.x
I believe the fixes discussed here are more workarounds and i don't think anybody really is aiming to add them to the main branch.

So - i'm not sure how this is going to be solved permanently for us?

I have the same problem with my Horstmann HRT4-ZW Thermostat. 0.104 and 0.103 didn't work. only works after going back to 0.102

I have problems with my Heatit z-wave thermostats after updating to 0.104. I now only have mode and temperature entities and I used to have several more such as heat and energy, which are the ones i miss the most.

I did not notice any problems after 0.103, but i don't think I looked at my thermostatst then as the temperature did not require me to tinker with thermostats then. So it might have been a problem since 0.103.

For my Horstmann HRT4-ZW i managed to change the 'specific=0' to 'specific=4' in the xml file (while HA was shutdown) as suggested in an earlier post and it came back.

HI

Just checking - is this going to be permanently fixed for the HRT4-ZW at some point, or will we always have to do a workaround after an upgrade?

I might be missing something with regards to how to fix this, but i think we'd want to close this issue with everybody happy and able to easily upgrade HA.

I had to update the XML file manually. I don't think it's great from a user's perspective in terms of being able to add the HRT4-ZW to your network and start using it. It adds a barrier to entry for Home Assistant.

Issue #30180 is open and tracking this problem for the HRT4-ZW. There is a 1-line code fix posted above in the comments. Not sure why it hasn't been submitted by the original author, but someone who owns the thermostat and can confirm the fix is working should probably take the initiative and submit a PR.

Was this page helpful?
0 / 5 - 0 ratings