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

Idanit commented 4 years ago

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

Teocell commented 4 years ago

Hi it works also for my Danfoss Devolo :) thanks

typhoon2099 commented 4 years ago

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

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.

typhoon2099 commented 4 years ago

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.

kpine commented 4 years ago

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,
        ],
oandrew commented 4 years ago

@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

typhoon2099 commented 4 years ago

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!

kpine commented 4 years ago

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.

cyclops1982 commented 4 years ago

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!

typhoon2099 commented 4 years ago

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.

typhoon2099 commented 4 years ago

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!

rickjmatthews commented 4 years ago

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.

allmoney 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

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

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

cyclops1982 commented 4 years ago

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?

cmillsy commented 4 years ago

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

2rs commented 4 years ago

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.

cmillsy commented 4 years ago

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.

cyclops1982 commented 4 years ago

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.

typhoon2099 commented 4 years ago

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.

kpine commented 4 years ago

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.