Hive heating with ZHA - no auto mode

Hi experts,
I am using Hive heating with ZHA integration (no hub), which works very well so far.
But it looks like there is no ‘auto’ mode, only heating and off.

the problem is that if I change the target temperature either manually or with an automation, for example to boost the temperate or switch off if I go out.
there is no way to switch the target temperature back to what it was before charging it.
When I was using the custom integration with the hub, I could call the ‘HVAC mode Auto’.

I guess one option would be to first take a snapshot of the entity before making the change and then load the snapshot to put it back.
This would address if changed with an automation, but not if I change manually.
It would also be a problem if the schedule changes between taking and loading the snapshot.

Does anyone else have this issue or have any suggestions?
Thanks!

Just making the jump to moving my hive heating into ZHA… Managed to work out how to trigger heating and hot water boost by setting zigbee attributes, but this is the one missing bit - not being able to put it back into auto (schedule) mode.

Did you ever get anywhere with it?

I can’t help as I’m brand new to HA - but any chance you can share how you got heating/water boost to work? It’s the main thing I’m keen to do…

So the only way I could find to nicely control, was by setting certain zigbee endpoint attributes on my thermostat in quick succession. Prob one of the most complciated bits in my HA setup - wish it was more elegant!!! You will need to go into ZHA to find what the ieee address for your thermostat is, and insert. I have a single automation that acts as a ‘boost controller’, the below are extracts from that to show you what it’s doing when either HW or heating boost starts/ends. Hope this helps you!

Boost heating on:

        sequence:
          - alias: Set EP5 ID 0x0201 Attribute 0x001c to SystemMode.Emergency_Heating
            action: zha.set_zigbee_cluster_attribute
            data:
              cluster_type: in
              ieee: <FILL YOURS IN HERE>
              endpoint_id: 5
              cluster_id: 513
              attribute: 28
              value: SystemMode.Emergency_Heating
          - alias: >-
              Set EP5 ID 0x0201 Attribute 0x0023 to
              TemperatureSetpointHold.Setpoint_Hold_On
            action: zha.set_zigbee_cluster_attribute
            data:
              cluster_type: in
              ieee: <FILL YOURS IN HERE>
              endpoint_id: 5
              cluster_id: 513
              attribute: 35
              value: TemperatureSetpointHold.Setpoint_Hold_On
          - alias: Set EP5 ID 0x0201 Attribute 0x0024 to 60 Mins
            action: zha.set_zigbee_cluster_attribute
            data:
              cluster_type: in
              ieee: <FILL YOURS IN HERE>
              endpoint_id: 5
              cluster_id: 513
              attribute: 36
              value: 60
          - alias: Set EP5 ID 0x0201 Attribute 0x0012 to 22c
            action: zha.set_zigbee_cluster_attribute
            data:
              cluster_type: in
              ieee: <FILL YOURS IN HERE>
              endpoint_id: 5
              cluster_id: 513
              attribute: 18
              value: 2200

Boost hotwater on:

        sequence:
          - alias: Set EP6 ID 0x0201 Attribute 0x001c to SystemMode.Heat
            action: zha.set_zigbee_cluster_attribute
            data:
              cluster_type: in
              ieee: <FILL YOURS IN HERE>
              endpoint_id: 6
              cluster_id: 513
              attribute: 28
              value: SystemMode.Heat
          - action: timer.start
            metadata: {}
            data: {}
            target:
              entity_id: timer.hotwater_boost
          - delay:
              hours: 0
              minutes: 0
              seconds: 10
              milliseconds: 0
          - alias: Set EP6 ID 0x0201 Attribute 0x0024 to 30 Mins
            action: zha.set_zigbee_cluster_attribute
            data:
              cluster_type: in
              ieee: <FILL YOURS IN HERE>
              endpoint_id: 6
              cluster_id: 513
              attribute: 36
              value: 30
          - alias: >-
              Set EP6 ID 0x0201 Attribute 0x0023 to
              TemperatureSetpointHold.Setpoint_Hold_On
            action: zha.set_zigbee_cluster_attribute
            data:
              cluster_type: in
              ieee: <FILL YOURS IN HERE>
              endpoint_id: 6
              cluster_id: 513
              attribute: 35
              value: TemperatureSetpointHold.Setpoint_Hold_On
          - alias: Set EP6 ID 0x0201 Attribute 0x001c to SystemMode.Emergency_Heating
            action: zha.set_zigbee_cluster_attribute
            data:
              cluster_type: in
              ieee: <FILL YOURS IN HERE>
              endpoint_id: 6
              cluster_id: 513
              attribute: 28
              value: SystemMode.Emergency_Heating

End heating boost (back to normal heat mode):

        sequence:
          - alias: Set EP5 ID 0x0201 Attribute 0x001c to SystemMode.Heat
            action: zha.set_zigbee_cluster_attribute
            data:
              cluster_type: in
              ieee: <FILL YOURS IN HERE>
              endpoint_id: 5
              cluster_id: 513
              attribute: 28
              value: SystemMode.Heat
          - alias: >-
              Set EP5 ID 0x0201 Attribute 0x0023 to
              TemperatureSetpointHold.Setpoint_Hold_On
            action: zha.set_zigbee_cluster_attribute
            data:
              cluster_type: in
              ieee: <FILL YOURS IN HERE>
              endpoint_id: 5
              cluster_id: 513
              attribute: 35
              value: TemperatureSetpointHold.Setpoint_Hold_On
          - alias: Set EP5 ID 0x0201 Attribute 0x0012 to temp 20c
            action: zha.set_zigbee_cluster_attribute
            data:
              cluster_type: in
              ieee: <FILL YOURS IN HERE>
              endpoint_id: 5
              cluster_id: 513
              attribute: 18
              value: 20

hotwater boost off:

        sequence:
          - alias: >-
              Set EP6 ID 0x0201 Attribute 0x0023 to
              TemperatureSetpointHold.Setpoint_Hold_Off
            action: zha.set_zigbee_cluster_attribute
            data:
              cluster_type: in
              ieee: <FILL YOURS IN HERE>
              endpoint_id: 6
              cluster_id: 513
              attribute: 35
              value: TemperatureSetpointHold.Setpoint_Hold_Off
          - alias: Set EP6 ID 0x0201 Attribute 0x001c to SystemMode.Off
            action: zha.set_zigbee_cluster_attribute
            data:
              cluster_type: in
              ieee: <FILL YOURS IN HERE>
              endpoint_id: 6
              cluster_id: 513
              attribute: 28
              value: SystemMode.Off

Amazing, thank you! I was halfway there but you helped fill in some of the gaps :slight_smile: I’ve tinkered and done a few extras:

  • Missed your trick of using an alias as a comment (editing in the UI loses comments and hex literals) - instead added lengthy variable names
  • Added fields for time and temperature - so it will prompt for input, or can have input fed into it
  • Found that 0 duration will cancel it, so didn’t need the another script - just run the same one

Also I wanted to show the remaining duration like the thermostat module does - ZHA somehow doesn’t allow getting an attribute, but eventually found zha_toolkit (via HACS) which allows this.

Time/status update script - run via automation every minute while the heating status is ‘heating’, and also called after starting/stopping boost:

sequence:
  - variables:
      ieee: [value here]
      endpoint_id: 5
      cluster_id_0x201: 513
      attribute_0x01c_system_mode: 28
      attribute_0x024_temp_setpoint_hold_duration: 36
  - data:
      ieee: "{{ ieee }}"
      endpoint: "{{ endpoint_id }}"
      cluster: "{{ cluster_id_0x201 }}"
      attribute: "{{ attribute_0x024_temp_setpoint_hold_duration }}"
      state_id: sensor.hive_ch_boost_time
      allow_create: true
    action: zha_toolkit.attr_read
  - data:
      ieee: "{{ ieee }}"
      endpoint: "{{ endpoint_id }}"
      cluster: "{{ cluster_id_0x201 }}"
      attribute: "{{ attribute_0x01c_system_mode }}"
      state_id: sensor.hive_ch_system_mode
      allow_create: true
    action: zha_toolkit.attr_read
alias: Hive CH Get Status

Then the boost script:

sequence:
  - alias: hive_ch_boost
    sequence:
      - variables:
          ieee: 00:1e:5e:09:02:a1:92:71
          endpoint_id: 5
          cluster_id_0x201: 513
          attribute_0x01c_system_mode: 28
          attribute_0x023_temp_setpoint_hold: 35
          attribute_0x024_temp_setpoint_hold_duration: 36
          attribute_0x012_occupied_heating_setpoint: 18
      - data:
          cluster_type: in
          ieee: "{{ ieee }}"
          endpoint_id: "{{ endpoint_id }}"
          cluster_id: "{{ cluster_id_0x201 }}"
          attribute: "{{ attribute_0x01c_system_mode }}"
          value: 5
        action: zha.set_zigbee_cluster_attribute
      - data:
          cluster_type: in
          ieee: "{{ ieee }}"
          endpoint_id: "{{ endpoint_id }}"
          cluster_id: "{{ cluster_id_0x201 }}"
          attribute: "{{ attribute_0x023_temp_setpoint_hold }}"
          value: 1
        action: zha.set_zigbee_cluster_attribute
      - data:
          cluster_type: in
          ieee: "{{ ieee }}"
          endpoint_id: "{{ endpoint_id }}"
          cluster_id: "{{ cluster_id_0x201 }}"
          attribute: "{{ attribute_0x024_temp_setpoint_hold_duration }}"
          value: "{{ duration }}"
        action: zha.set_zigbee_cluster_attribute
      - data:
          cluster_type: in
          ieee: "{{ ieee }}"
          endpoint_id: "{{ endpoint_id }}"
          cluster_id: "{{ cluster_id_0x201 }}"
          attribute: "{{ attribute_0x012_occupied_heating_setpoint }}"
          value: "{{ temperature * 100 }}"
        action: zha.set_zigbee_cluster_attribute
  - action: script.hive_ch_get_status
    metadata: {}
    data: {}
alias: Hive CH Boost
fields:
  duration:
    selector:
      number:
        min: 0
        max: 240
        step: 15
    name: Duration
    default: 60
    required: true
  temperature:
    selector:
      number:
        min: 18
        max: 28
        step: 1
    name: Target temp
    default: 25
    required: true

I then ended up with this in the dashboard:

Rinse/repeat for hot water…