Radio Thermostat CT101 Iris not updating operating_state and fan_state

I have a Radio Thermostat CT-101 Iris model that I’m using with HASS. Setting and getting the temperatures works fine. Originally I had issues with the temperature not updating, but I set polling_intensity: 1 for zwave device_config and now that’s working. Unfortunately the operating_state and fan_state attributes only seem to be updating once every 30-60 minutes at the most… so when I’m home I can hear the HVAC system cycle on and off (and even hear the relays in the thermostat itself… it’s within sight of my desk) but HASS never updates. There are times it will cycle on and off multiple times within an hour, and HASS never “finds out” about those. The thermostat is running off of 24VAC power from the HVAC not battery, and the zwave entity attributes confirm that it’s always awake and ready.

One thing that I noticed is that I set polling_intensity in configuration.yaml:

zwave:
  usb_path: /dev/ttyACM0
  device_config:
    zwave.2gig_technologies_ct101_thermostat_iris:
      polling_intensity: 1
    climate.2gig_technologies_ct101_thermostat_iris_cooling_1:
      polling_intensity: 1
    climate.2gig_technologies_ct101_thermostat_iris_heating_1:
      polling_intensity: 1
    sensor.2gig_technologies_ct101_thermostat_iris_temperature:
      polling_intensity: 1

But in my zwcfg xml, it looks like the polling is set up for the current temperature:

<CommandClass id="49" name="COMMAND_CLASS_SENSOR_MULTILEVEL" version="2" request_flags="1" innif="true">
        <Instance index="1" />
        <Instance index="2" endpoint="1" />
        <Instance index="3" endpoint="2" />
        <Value type="decimal" genre="user" instance="1" index="1" label="Temperature" units="F" read_only="true" write_only="false" verify_changes="false" poll_intensity="1" min="0" max="0" value="73.0" />
</CommandClass>

and for the current setpoints:

<CommandClass id="67" name="COMMAND_CLASS_THERMOSTAT_SETPOINT" version="1" request_flags="5" innif="true" base="0">
        <Instance index="1" />
        <Value type="decimal" genre="user" instance="1" index="1" label="Heating 1" units="F" read_only="false" write_only="false" verify_changes="false" poll_intensity="1" min="0" max="0" value="70" />
        <Value type="decimal" genre="user" instance="1" index="2" label="Cooling 1" units="F" read_only="false" write_only="false" verify_changes="false" poll_intensity="1" min="0" max="0" value="71" />
</CommandClass>

but not for the operating state or fan mode:

<CommandClass id="66" name="COMMAND_CLASS_THERMOSTAT_OPERATING_STATE" version="1" request_flags="5" innif="true">
        <Instance index="1" />
        <Value type="string" genre="user" instance="1" index="0" label="Operating State" units="" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="Idle" />
</CommandClass>
<CommandClass id="68" name="COMMAND_CLASS_THERMOSTAT_FAN_MODE" version="1" request_flags="5" innif="true">
        <Instance index="1" />
        <Value type="list" genre="user" instance="1" index="0" label="Fan Mode" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" vindex="0" size="1">
                <Item label="Auto Low" value="0" />
                <Item label="On Low" value="1" />
        </Value>
        <SupportedModes>
                <Mode index="0" label="Auto Low" />
                <Mode index="1" label="On Low" />
        </SupportedModes>
</CommandClass>

I was wondering if anyone else has a similar thermostat with this issue?

I guess the only thing I can really think of is that when I set polling_intensity via HASS it only gets applied to attributes that have an entity mapped to them, i.e. the current temperature and set points, and not to attributes that don’t have entities (i.e. operating_state and fan_state). Assuming that’s the case, I’d either need to hand-edit my zwcfg xml (which seems like a bad idea since HASS also manages this file) or else patch HASS somehow to fix this (possibly by adding sensor entities for the operating_state and fan_state?)

As far as I can tell I can’t set polling on these in HASS because HASS doesn’t bind any entities/values for operating_state and fan_mode. Even using the set_poll_intensity service won’t work because there’s no value ID.

I’ve been able to manually set poll_intensity="1" in my zwcfg xml and this fixes the problem; I now see the thermostat operating_state and fan_state updated as it should be and it properly reflects short cycles of the system. Now I just need to know what the right way to make this change, and ensure it stays changed, is.

1 Like

Have you been able to figure out how to get humidity readings in HASS from this thermostat?

I haven’t figured out humidity readings, but I haven’t really tried either. I didn’t even know that it had a humidity sensor and my HVAC system doesn’t have any sort of humidity control.

It was a bug in OpenZWave: https://github.com/OpenZWave/open-zwave/issues/1179

@dummptyhummpty did you actually get yours working? I’ve updated my openzwave and told python-openzwave to use the shared library; everything is talking on the network but still no humidity joy. Did you have to remove and re-add the thermostat from the network or work any other magic to get it talking?

From what I can tell there’s some weeeeeird stuff going on in RTCOA thermostat land…this, from the docs from their zwave module from another thermostat:

So now I’m wondering if we need to send messages to the thermostat in encapsulated form to get humidity out of it, and if so how on earth to go about doing that. Any ideas?

1 Like

I didn’t give this a try as I’m on HASS.IO and I’m not sure how to update OpenZwave.

I think I’m finally wrapping my brain around how to do it in the venv…if/when I get it sorted I’ll update y’all here.

1 Like

I have the same problem now with the status not updating. Did anyone ever figure out a fix?

@Dan_Bowkley, did you figure it out? It would be awesome to get these humidity reports working…

I did, and then the latest update broke it again. I’m still trying to figure out the new workaround. I have an unwanted day off tomorrow so I’ll have a good whack at it when I regain some semblance of consciousness.

The basic gist was to install the required version of python_openzwave but with the git flavor rather than the default one. That pulled the patch in from git rather than using the standard version. Honestly I’d be surprised if one of the upcoming normal versions doesn’t have the fix in there already as it’s part of the current mainline. Anyways the Hass folks decided to roll their own OpenZwave library and I don’t know how to get it to use the git OpenZwave.

If you’re happy running 0.81.5, you can do this:

sudo service home-assistant@homeassistant stop
sudo su -s /bin/bash homeassistant
source /srv/homeassistant/bin/activate
pip3 uninstall python_openzwave
pip3 uninstall homeassistant
pip3 install --no-cache-dir 'python_openzwave==0.4.10' --install-option="--flavor=git"
pip3 install 'homeassistant==0.81.5'
deactivate
exit
sudo service home-assistant@homeassistant start

That should get you running Hass 0.81.5 with the patch applied. You might have to let the zwave network come up and then restart Hass again to get it to show up.

Here’s where things get weird…browsing through the source to Hass’ fork of Openzwave, the patch is in fact in there. https://github.com/home-assistant/open-zwave/blob/master/cpp/src/command_classes/MultiInstance.cpp lines 353-357. So it should be working. Maybe there’s some lag in building the new versions? I did note that the requirements_all.txt demands homeassistant-pyozw==0.1.0 so maybe that’s an older version…seems unlikely though as the fork happened after the patch. I’ll keep digging but…frankly I don’t have a lot of hope at this point other than to kick back and wait for it to fix itself.

I’m out of ideas. @balloob do you know what’s up with this, or can you point us at someone who knows the zwave internals more intimately than I?

I made a mistake in my original answer, Hass 0.81.5 needs python_openzwave==0.4.10 not 0.4.11.

You can stop HA and edit the zwcfg XML directly to set the poll_intensity for the attibute(s) in question:

<CommandClass id="66" name="COMMAND_CLASS_THERMOSTAT_OPERATING_STATE" version="1" request_flags="5" innif="true">
    <Instance index="1" />
    <Value type="string" genre="user" instance="1" index="0" label="Operating State" units="" read_only="true" write_only="false" verify_changes="false" poll_intensity="1" min="0" max="0" value="Idle" />
</CommandClass>

Once you start back up, it should update at the interval you have set (60s default).

I tried updating the polling interval in the zwcfg, It would just get reverted back to 0 once HA started. I ended up writing an automation to ping the thermostat every 30 seconds. It’s a hack but at least I now know when my boiler starts with in 30seconds. Now the humidity not reporting…

This whole thermostat seems bugged. I’m glad I only paid $30 for it.

This is the automation I use to update the thermostat

  alias: Thermostat Refresh Timer
  trigger:
  - seconds: /30
    platform: time
  condition: []
  action:
  - data:
      entity_id: climate.2gig_technologies_ct101_thermostat_iris_heating_1_2
    service: zwave.refresh_entity

Did you ensure HA was stopped before editing? The XML gets rewritten on shutdown.

Yes I did, tried it numerous times, never worked.

Just an update, it seems like this is included in 0.82. I’m seeing humidity now.

Well, that didn’t go quite as planned…upgraded to 0.82 and now I get

2018-11-10 22:16:47 ERROR (MainThread) [homeassistant.config_entries] Error setting up entry Z-Wave (import from configuration.yaml) for zwave
Traceback (most recent call last):
  File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/config_entries.py", line 244, in async_setup
    result = await component.async_setup_entry(hass, self)
  File "/srv/homeassistant/lib/python3.5/site-packages/homeassistant/components/zwave/__init__.py", line 262, in async_setup_entry
    from openzwave.option import ZWaveOption
  File "/srv/homeassistant/lib/python3.5/site-packages/openzwave/option.py", line 29, in <module>
    import libopenzwave
ImportError: libopenzwave.so.1.4: cannot open shared object file: No such file or directory

Any ideas?

Same here, humidity is working as of .82. Still not updating operating state and fan correctly but humidity is showing. I think this thermostat just doesn’t report when it changes those two attributes. My fix was an automation to refresh it every 30 seconds.