home-assistant / core

:house_with_garden: Open source home automation that puts local control and privacy first.
https://www.home-assistant.io
Apache License 2.0
73.7k stars 30.83k forks source link

No climate entites for Danfoss 014G0013 after update HA to 0.103 #29844

Closed bieniu closed 4 years ago

bieniu commented 4 years ago

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.

Alcatr4zz commented 4 years ago

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 ;-)

jladefoged commented 4 years ago

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

bieniu commented 4 years ago

Maybe this issue is related to this https://github.com/home-assistant/home-assistant/pull/27040

dshokouhi commented 4 years ago

@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

probot-home-assistant[bot] commented 4 years ago

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!

mmatesic01 commented 4 years ago

Same issue here.

bartus81 commented 4 years ago

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

StyxyDog commented 4 years ago

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.

Idanit commented 4 years ago

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

SeoFood commented 4 years ago

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.

robertlandes commented 4 years ago

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)

aradriel commented 4 years ago

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

jiiins commented 4 years ago

Exactly same issue here.

adrianoamalfi commented 4 years ago

Exactly same issue here.

pauligbrest commented 4 years ago

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

electrofloat commented 4 years ago

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.

alex3305 commented 4 years ago

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....

musicatwrk commented 4 years ago

Having this issue with a Honeywell T6 Pro

kowi-k commented 4 years ago

My devolo thermostats are also impacted.

oandrew commented 4 years ago

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!

bieniu commented 4 years ago

@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>
jiiins commented 4 years ago

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

Teocell commented 4 years ago

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.

Ascariota commented 4 years ago

Same issue with Eurotronic and Fibaro for me

olli-dot-dev commented 4 years ago

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

aradriel commented 4 years ago

@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>
kpine commented 4 years ago

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.

dzikus commented 4 years ago

Same issue here with maxcube, no climate.*

arteta22000 commented 4 years ago

same issue also here :( with popp

opensource-alt commented 4 years ago

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

oandrew commented 4 years ago

Can someone test the fix with real devices? Thanks

Teocell commented 4 years ago

Can someone test the fix with real devices? Thanks

Hi Andrew, let me know what I need to do

electrofloat commented 4 years ago

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.

oandrew commented 4 years ago

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

Idanit commented 4 years ago

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>
alex3305 commented 4 years ago

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.

robertlandes commented 4 years ago

@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 !

robertlandes commented 4 years ago

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

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

Idanit commented 4 years ago

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...

Idanit commented 4 years ago

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>
kpine commented 4 years ago

@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.

Idanit commented 4 years ago

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.

oandrew commented 4 years ago

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

afabin commented 4 years ago

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

(sha of climate.py is d8f0abf4f43b8eb220588e1a7d9404bf0751a794)

kpine commented 4 years ago

@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.

oandrew commented 4 years ago

@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
Idanit commented 4 years ago

Home Assistant (2)

opensource-alt commented 4 years ago

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

kpine commented 4 years ago

@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
opensource-alt commented 4 years ago

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