Unable to control Centralite Pearl Thermostat with the climate domain

I have 4 Centralite Pearl thermostats all working well and I am able to control them fully.

I added 2 more and I am unable to control them climate.turn_on, climate.turn_off and setting the state. I am able to change the set_point temperature and read the temperature/state/etc from the 2 devices. I am using deconz and I am able to set the state through the deconz interface, so I suspect it is something to do with Home Assistant.

I don’t see any error/warnings in the home_assistant.log.

Environment
Home Assistant 2021.11.5
dresden elektronik Conbee II 2.12.06 firmware 26660700
deCONZ

I tried resetting the devices and re-discovering them. I restored home assistant to a backup and tried re-discovering the new devices.

Any suggestions to help debug the problem or solve the issue are welcome, I’m kind of stuck on next steps.

Thanks for any help.

FYI - I switched to zha and it I’m able to control the thermostats.

Hi Paul,

I’m about to embark on a central heating system that requires two dampers and two thermostats and I read with interest your use of the Centralite Pearl Zigbee thermostats which can be had on Amazon for only $29.00. I’m wondering if you could possibly share your code on how you use your system?

P.S I’m using deCONZ which has apparently got full support for this thermostat now?

I had a couple of requirements:

  1. I could schedule the heating
  2. I could set a timer for adhoc uses of the thermostat

For the scheduling I use GitHub - nielsfaber/scheduler-card: HA Lovelace card for control of scheduler entities. I find it fairly complete.

For adhoc uses I created a timer and control it in node-red. This is the card I use to control and monitor the thermostat.

type: custom:stack-in-card
mode: vertical
cards:
  - type: custom:banner-card
    heading: 🛏 Master Bedroom
    style: |
      ha-card {
        border: {% if is_state('climate.master_bedroom_thermostat_heat', 'heat') %} solid 8px orange {% endif %}; 
        font-size: 12px;
      }
  - type: horizontal-stack
    cards:
      - type: custom:bignumber-card
        title: Main
        entity: sensor.master_bedroom_thermostat_heat_temperature
        scale: 30px
        from: bottom
        min: 13
        max: 40
        hideunit: false
        color: '#000000'
      - type: custom:bignumber-card
        title: Setpoint
        entity: sensor.master_bedroom_thermostat_heat_setpoint_temperature
        scale: 30px
        from: bottom
        min: 16
        max: 25
        hideunit: false
        color: '#000000'
  - type: entities
    entities:
      - entity: input_boolean.show_thermostat_details_master_bedroom
  - type: conditional
    conditions:
      - entity: input_boolean.show_thermostat_details_master_bedroom
        state: 'on'
    card:
      type: custom:stack-in-card
      mode: vertical
      cards:
        - type: custom:apexcharts-card
          graph_span: 1d
          header:
            show: true
            title: Temperature
            show_states: true
            colorize_states: true
          yaxis:
            - id: temp
              min: 13
            - id: state
              opposite: true
              show: false
              max: 15
          all_series_config:
            stroke_width: 1
            group_by:
              duration: 10min
              func: avg
            show:
              legend_value: false
          series:
            - entity: sensor.master_bedroom_thermostat_heat_temperature
              name: Thermostat
              yaxis_id: temp
            - entity: sensor.master_bedroom_thermostat_heat_temperature
              name: Yesterday
              yaxis_id: temp
              offset: '-1d'
            - entity: sensor.master_bedroom_thermostat_heating_setpoint_temperature
              name: Setpoint
              yaxis_id: temp
              type: area
              stroke_width: 0
              opacity: 0.15
              show:
                in_header: false
            - entity: climate.master_bedroom_thermostat_heat
              name: State
              yaxis_id: state
              transform: 'return x === ''heat'' ? 1 : 0;'
              type: area
              show:
                in_header: false
        - type: custom:timer-bar-card
          entity: timer.master_bedroom_heater_timer
          name: Timer
          icon: mdi:timelapse
        - type: entities
          entities:
            - entity: input_boolean.master_bedroom_heater_timer_state
              name: Start Timer
        - entity: input_number.master_bedroom_heater_timer_duration
          type: custom:numberbox-card
          name: Duration
          icon_plus: mdi:chevron-up
          icon_minus: mdi:chevron-down
          secondary_info: last-changed
          initial: 60
          unit: Min
        - type: horizontal-stack
          cards:
            - type: custom:button-card
              icon: mdi:fast-forward-15
              size: 30%
              tap_action:
                action: call-service
                service: input_number.set_value
                service_data:
                  entity_id: input_number.master_bedroom_heater_timer_duration
                  value: 15
            - type: custom:button-card
              icon: mdi:fast-forward-30
              size: 30%
              tap_action:
                action: call-service
                service: input_number.set_value
                service_data:
                  entity_id: input_number.master_bedroom_heater_timer_duration
                  value: 30
            - type: custom:button-card
              icon: mdi:numeric-1-box-outline
              size: 30%
              tap_action:
                action: call-service
                service: input_number.set_value
                service_data:
                  entity_id: input_number.master_bedroom_heater_timer_duration
                  value: 60
            - type: custom:button-card
              icon: mdi:numeric-2-box-outline
              size: 30%
              tap_action:
                action: call-service
                service: input_number.set_value
                service_data:
                  entity_id: input_number.master_bedroom_heater_timer_duration
                  value: 120
            - type: custom:button-card
              icon: mdi:numeric-3-box-outline
              size: 30%
              tap_action:
                action: call-service
                service: input_number.set_value
                service_data:
                  entity_id: input_number.master_bedroom_heater_timer_duration
                  value: 180
            - type: custom:button-card
              icon: mdi:numeric-4-box-outline
              size: 30%
              tap_action:
                action: call-service
                service: input_number.set_value
                service_data:
                  entity_id: input_number.master_bedroom_heater_timer_duration
                  value: 240
        - type: horizontal-stack
          cards:
            - type: custom:button-card
              icon: mdi:dice-d20-outline
              size: 5%
              tap_action:
                action: call-service
                service: climate.set_temperature
                service_data:
                  entity_id: climate.master_bedroom_thermostat_heat
                  temperature: 20
        - type: custom:simple-thermostat
          entity: climate.master_bedroom_thermostat_heat
          header: false
          decimals: '1'
          unit: ' °C'
          style: ''
          sensors:
            - entity: sensor.master_bedroom_temperature
              name: Main
          control:
            hvac:
              cool: false
              auto: false
          label:
            temperature: Master Bedroom
          layout:
            mode:
              headings: false
#input booleans

show_thermostat_details_master_bedroom:
  name: Thermostat Details
  icon: mdi:thermostat

master_bedroom_heater_timer_state:
  name: Master Bedroom Heater Timer State
  icon: mdi:timer

#timer 

master_bedroom_heater_timer_duration:
  name: Master Bedroom Heater Duration
  min: 0
  max: 360
  initial: 60
  step: 5
  unit_of_measurement: Min
  mode: slider
#template

- platform: history_stats
  name: Master Bedroom Heating Time
  entity_id: climate.master_bedroom_thermostat_heat
  state: "heat"
  type: time
  #start: "{{ now().replace(hour=0, minute=0, second=0) }}"
  end: "{{ now() }}"
  duration:
    hours: 5
#template
- sensor:
    - name: "Master Bedroom Thermostat Heating Setpoint Temperature"
      device_class: temperature
      unit_of_measurement: "°C"
      state: >
        {% if is_state("sensor.master_bedroom_thermostat_heat_state", "heating") -%}
          {{ state_attr('climate.master_bedroom_thermostat_heat', 'temperature') }}
        {%- else -%}
          0
        {%- endif %}

    - name: "Master Bedroom Thermostat Heat Setpoint Temperature"
      device_class: temperature
      unit_of_measurement: "°C"
      state: >
        {% if state_attr('climate.master_bedroom_thermostat_heat', 'temperature') -%}
          {{ state_attr('climate.master_bedroom_thermostat_heat', 'temperature') }}
        {%- else -%}
          0
        {%- endif %}

    - name: "Master Bedroom Thermostat Heat Temperature"
      device_class: temperature
      unit_of_measurement: "°C"
      state: "{{ state_attr('climate.master_bedroom_thermostat_heat', 'current_temperature') }}"

I did start with deCONZ and it seemed supported, however I couldn’t get the 2 of 6 working. ZHA seems fairly stable. I have 1 out of the 6 thermostats that goes through batteries fairly quickly, the others have their original batteries for the last 4-5 months.

Hi Paul. Wow, thanks for sharing all that info! I’m keen to try the Zigbee thermostats (even with deCONZ) as there is nothing close for the price. I know it’s possible to use both deCONZ and ZHA at the same time (with two sticks) so if needs be, I can go that route.

My main purpose is to control two air dampers; one to each bedroom. The system we are getting is a single zone one as the multi-zone add-on adds over $2000 so I’m keen to do it a bit cheaper. The plan is just to use the Zigbee thermostats is each bedroom to open and close the corresponding damper to lower the temperature in the bedrooms in isolation of the main system thermostat. I’ll need some rules to increase the main thermostat if the bedroom thermostat is configured above the temp in the main zone but if it’s less, I can just temper by opening and closing the valve?

See any problem in my logic?

I can’t really comment to the mechanical/electrical aspects of your plan, I’m not all that familiar with what a damper is, however it is definitely possible to control the themostat however you’d like.

My choice was mostly to use schedules for controls, but I don’t see a problem with controlling the temperature of the thermostat programmatically based on another temperature sensor.

Keep in mind the thermostat has its own temperature sensor that will turn on/off the heating/cooling, so you’d have to set the setpoint arbitrarily high/low to override the thermostat’s own control.

Your question around multiple zigbees would be better placed to a more knowledgeable group as an individual question.

There is nothing stopping you starting with deConz and see how far you get. I had to abandon it, for zha, as I couldn’t get 2 of them to work.

Appreciate the feedback. I’ve ordered two of the Zigbee thermostats and 2 x 240v dampers which I’ll control using a Shelly 2.5 and see how that goes. Thanks again for sharing all the code.