Radio Thermostat CT101

Place holder for golden Thread.

(Link some other threads here)

Does anyone have any configs on this hardware they would like to share.
I trying to figure out the details. Here is my current package.
Right now the CT101 is sitting on my desk and is not hooked up but is running on batteries till I learn some things.
Some of what I need to learn maybe just controlling climate entities.

Here is my current package.


group:
  thermostat_views:
    view: yes
    name: Thermostat
    entities:
    - group.thermostat_mode
  thermostat_mode:
    name: Thermostat Modes
    entities:
    - climate.2gig_technologies_ct101_thermostat_iris_cooling_1
    - climate.2gig_technologies_ct101_thermostat_iris_heating_1
    - sensor.thermostat_battery
    - sensor.thermostat_cool_fan_state
    - sensor.thermostat_heat_fan_state
    - sensor.thermostat_cool_operation_mode_state
    - sensor.thermostat_heat_operation_mode_state
    - sensor.thermostat_cool_current_temperature
    - sensor.thermostat_heat_current_temperature
    - sensor.thermostat_cool_temperature
    - sensor.thermostat_heat_temperature
    - sensor.thermostat_cool_min_temp
    - sensor.thermostat_heat_min_temp
    - sensor.thermostat_cool_max_temp
    - sensor.thermostat_heat_max_temp


sensor:
- platform: template
  sensors:
    thermostat_battery:
      friendly_name: "Thermostat Battery"
      unit_of_measurement: "%"
      value_template: >-
        {%- if states.zwave['2gig_technologies_ct101_thermostat_iris'].attributes.battery_level %}
            {{ states.zwave['2gig_technologies_ct101_thermostat_iris'].attributes.battery_level }}
        {% else %}
            Unknown
        {%- endif %}
#
    thermostat_cool_fan_state:
      friendly_name: "Thermostat Cool Fan State"
      value_template: >-
        {%- if states.climate['2gig_technologies_ct101_thermostat_iris_cooling_1'].attributes.fan_state %}
            {{ states.climate['2gig_technologies_ct101_thermostat_iris_cooling_1'].attributes.fan_state }}
        {% else %}
            Unknown
        {%- endif %}
    thermostat_heat_fan_state:
      friendly_name: "Thermostat Heat Fan State"
      value_template: >-
        {%- if states.climate['2gig_technologies_ct101_thermostat_iris_heating_1'].attributes.fan_state %}
            {{ states.climate['2gig_technologies_ct101_thermostat_iris_heating_1'].attributes.fan_state }}
        {% else %}
            Unknown
        {%- endif %}
#
    thermostat_cool_operation_mode_state:
      friendly_name: "Thermostat Heat Fan State"
      value_template: >-
        {%- if states.climate['2gig_technologies_ct101_thermostat_iris_cooling_1'].attributes.operation_mode %}
            {{ states.climate['2gig_technologies_ct101_thermostat_iris_cooling_1'].attributes.operation_mode }}
        {% else %}
            Unknown
        {%- endif %}
    thermostat_heat_operation_mode_state:
      friendly_name: "Thermostat Heat Fan State"
      value_template: >-
        {%- if states.climate['2gig_technologies_ct101_thermostat_iris_heating_1'].attributes.operation_mode %}
            {{ states.climate['2gig_technologies_ct101_thermostat_iris_heating_1'].attributes.operation_mode }}
        {% else %}
            Unknown
        {%- endif %}
#
    thermostat_cool_current_temperature:
      friendly_name: "Thermostat Cool Current Temperature"
      value_template: >-
        {%- if states.climate['2gig_technologies_ct101_thermostat_iris_cooling_1'].attributes.current_temperature %}
            {{ states.climate['2gig_technologies_ct101_thermostat_iris_cooling_1'].attributes.current_temperature }}
        {% else %}
            Unknown
        {%- endif %}
    thermostat_heat_current_temperature:
      friendly_name: "Thermostat Heat Current Temperature"
      value_template: >-
        {%- if states.climate['2gig_technologies_ct101_thermostat_iris_heating_1'].attributes.current_temperature %}
            {{ states.climate['2gig_technologies_ct101_thermostat_iris_heating_1'].attributes.current_temperature }}
        {% else %}
            Unknown
        {%- endif %}
#
    thermostat_cool_temperature:
      friendly_name: "Thermostat Cool Temperature"
      value_template: >-
        {%- if states.climate['2gig_technologies_ct101_thermostat_iris_cooling_1'].attributes.temperature %}
            {{ states.climate['2gig_technologies_ct101_thermostat_iris_cooling_1'].attributes.temperature }}
        {% else %}
            Unknown
        {%- endif %}
    thermostat_heat_temperature:
      friendly_name: "Thermostat Heat Temperature"
      value_template: >-
        {%- if states.climate['2gig_technologies_ct101_thermostat_iris_heating_1'].attributes.temperature %}
            {{ states.climate['2gig_technologies_ct101_thermostat_iris_heating_1'].attributes.temperature }}
        {% else %}
            Unknown
        {%- endif %}
#
    thermostat_cool_min_temp:
      friendly_name: "Thermostat Cool Minimum Temperature"
      value_template: >-
        {%- if states.climate['2gig_technologies_ct101_thermostat_iris_cooling_1'].attributes.min_temp %}
            {{ states.climate['2gig_technologies_ct101_thermostat_iris_cooling_1'].attributes.min_temp }}
        {% else %}
            Unknown
        {%- endif %}
    thermostat_heat_min_temp:
      friendly_name: "Thermostat Heat Minimum Temperature"
      value_template: >-
        {%- if states.climate['2gig_technologies_ct101_thermostat_iris_heating_1'].attributes.min_temp %}
            {{ states.climate['2gig_technologies_ct101_thermostat_iris_heating_1'].attributes.min_temp }}
        {% else %}
            Unknown
        {%- endif %}
#
    thermostat_cool_max_temp:
      friendly_name: "Thermostat Cool Maximum Temperature"
      value_template: >-
        {%- if states.climate['2gig_technologies_ct101_thermostat_iris_cooling_1'].attributes.max_temp %}
            {{ states.climate['2gig_technologies_ct101_thermostat_iris_cooling_1'].attributes.max_temp }}
        {% else %}
            Unknown
        {%- endif %}
    thermostat_heat_max_temp:
      friendly_name: "Thermostat Heat Maximum Temperature"
      value_template: >-
        {%- if states.climate['2gig_technologies_ct101_thermostat_iris_heating_1'].attributes.max_temp %}
            {{ states.climate['2gig_technologies_ct101_thermostat_iris_heating_1'].attributes.max_temp }}
        {% else %}
            Unknown
        {%- endif %}
#





        #{{ states.climate['2gig_technologies_ct101_thermostat_iris_cooling_1'].attributes.fan_state }}


# automation:
  # - alias: Set Thermostat Mode Off
    # trigger:
      # - platform: template
        # value_template: "{% if is_state('input_select.thermostat_mode', 'off') %}true{% endif %}"
    # action:
      # - service: switch.turn_Off
        # entity_id: switch.remotec_zfm80_switch

It looks like you have a typo in your config. In thermostat_cool_operation_mode_state you have the friendly_name as “Thermostat Heat Fan State”.

Other than that all I can say is WOW. I have a lot to learn about these things. Especially since I have 2 of them on a dual zone system. I’m also trying to figure out how to keep my kid’s rooms at the right temperature without going too hot or too cold.

Just got CT101 installed. I am going to shamelessly based upon my configuration on your set up.!

I have two of those hooked up to HASS: one for my garage heater, another one controlling my basement fireplace. My config is detailed here:

Madelinot… thanks for posting. Just getting started with hass.io and have a CT-101 with a Aeotec Z-stick Gen 5 controller. Added to the config the following and have basic monitoring working. Will shamelessly attempt to leverage some of your config. :slight_smile:

zwave:
usb_path: /dev/ttyACM0

climate:

  • platform: zwave

No problem… My CT101s are connected to ISY994 instead of a Z-wave stick. Yours may be a little easier in fact because I had to make API calls to the ISY994 to get the functions to work. Let me know how it goes…

I have another installation at my condo that will make use of the AEOTEC stick and another z-wave thermostat. I have not started that project yet, but will soon…

@rarebit I am interested in your setting/config also.
Couple of weeks ago I pulled my and put the original (dumb) thermostat back on, because the heater was not working. Turned out the thermostat was not the issue. Have not gone back to it yet.
While I was using it, I was confused by the entities returned. I figured out that the 2 modes (heat/cool) each had it’s own set temperature. I never did control it with HASS, just read the status. I will be interested in seeing what you learn. :slight_smile:

Side Note:
As I said, the thermostat was not the issue. What I learned is that high efficiency heaters (90% or greater) makes as much water as cooling. Mine is a 92%, and the water drain was clogged, causing water into the blower for the heat chamber. This caused the safety to kick in and cut the heat off. Other lesson is a heater drain has to have a p-trap. Make sense because the drain is exposed to the fumes. Also it is required because the heat chamber blower would cause a vacuum. My setup … After the p-trap is a T, so the A coil drain could join the drain pipe. We (my friend the tech) had to cut the pipes, someone glued the fittings, above and below the T, so we could tape off one end. Then tape off the vent for the p-trap, and could blow back through the remaining opening and clear the clog. Then using unions we pressed fitted the drains back. I will put a block in between the floor and elbow so the will not fall off. I don’t think it would anyway, but with the block there is no way. Looks like this is a common problem with high efficiency heaters. The other thing that was funny, when we were diagnosing the issue, the blower with water sounded like the bearings were going out. Once the clog was cleared the sound clear up. Also, without getting in the attic, I can see the drain, next time, I will check it first. After the fix there was a steady stream, not just a drip. Like I said, I was surprised at how much water a “heater” can make. :slight_smile:

will post what I have for sure… right now the devices are just on a bench. This project is targeted toward a vacation home where initially all I really want to do is preheat the home before heading to it. The heaters there are not hi-efficiency but it’s good to know what you experienced. Anyway hope to spend some time on this over the weekend.

Does the thermostat_cool_operation_mode_state return the current state or the current mode? e.g. does it show cool if the mode is cool (in the summer) and heat for heat mode (winter) regardless of what the machine is actually doing at the moment. Or does it show cooling when machine is running and idle when machine is idle.

I am trying to have a automation based on if the machine is running or not. For example when heat is on turn on ceiling fan in bedroom.

Thanks @penright - I also just got started with HA and replaced my old zwave RCS thermostats with the CT101’s and used your sensor/group strategy.
I’m still learning the HA platform and since this device has heating & cooling - is there a way to show/hide the appropriate cool/heat sensors based on season?
Also; I’m not sure if the CT101 has a fan only setting; sometimes I just like to run the fan without heat/cool to air the house. I would have thought the operation would allow cool,heat,off,auto and fan but there is no option.
Am I missing something there?
Thanks again for the setup - it saved me a lot of time.
Cheers

Did you ever get this running? I have a CT101 and am trying to get the same automation working.

binary_sensors:
  - platform: template
        hvacfan:
          value_template: '{% if is_state_attr("climate.2gig_technologies_ct101_thermostat_iris_heating_1", "fan_state", "Running") %}True{% else %}False{% endif %}'
          friendly_name: 'HVAC Blower Status'
          entity_id: climate.2gig_technologies_ct101_thermostat_iris_heating_1
          device_class: moving

Then you can do an automation like:

automation:
  - id: '1504390477853'
    alias: Turn fan on when heat running
    trigger:
      platform: state
      entity_id: binary_sensor.hvacfan
      to: 'True'
    action:
    - service: switch.turn_on
      entity_id: switch.ge_45609_onoff_relay_switch_switch_2

You’ll probably have to play around with the polling settings for the thermostat as by default it seems to only very infrequently poll the device for status changes. My zwave_device_config.yaml looks like this:

usb_path: /dev/ttyUSB0
polling_interval: 30000
network_key: !secret zwave_netkey
config_path: /home/homeassistant/.homeassistant/openzwave/open-zwave/config
device_config:
  sensor.2gig_technologies_ct101_thermostat_iris_temperature:
    ignored: false
    polling_intensity: 1
  climate.2gig_technologies_ct101_thermostat_iris_cooling_1:
    ignored: false
    polling_intensity: 1
  climate.2gig_technologies_ct101_thermostat_iris_heating_1:
    ignored: false
    polling_intensity: 1

That polls the thermostat every 30 seconds. I realize that’s generally a bit ridiculous, but my thermostat is the only device that gets polled so it’s not that big of a deal.

Awesome! That’s almost EXACTLY what I finally came up with just yesterday.

So I’ve finally got my CT101 reporting humidity and generally doing everything it’s supposed to be doing. I had to creatively update the OpenZwave library, everything else can be done from within your yaml and xml files.

Assuming you’re on Linux and using a Python virtual environment, run this from your command line:

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

That should get you up and running with the very latest version of Openzwave which has been patched to handle the bug in the CT101’s humidity sensor.

I wonder when this update will get pushed to hassio?

sorry for the dumb questions - I installed a CT101 that works manually. Running Hass.io and trying to figure out how to set up a simple temp up in the morning and off in eve. In Overview I see the CT101 under Z-Wave and I also see heat & cool in Climate (which happens to be in Celcius but that’s not my problem). In Developer Tools/Services I try climate.set.temperature and I get Failed error. I’m not able to communicate with the thermostat. I’m missing something and/or I prob need something additional but I’m new to this and not sure what to do. I’ve been using the Hass.io web interface so far. Though not an expert I know python so not afraid to go beyond that. Any advice would be appreciated.

Can you see the heating or cooling in your HA page and can you control the target temperature from there?

I can see heating/cooling window but without the temp control up/down arrows. Did you add your’s as a node or secure node?

I did not add it securely.