Add custom controls to zigbee device

I have a conbee II and have added a ZHA integration (the built in one) and recently I bought some chinese tuya smart radiator valves. When I added the to my network, I was surprised that so little controls were added with them:

Going through the device info, I see that there are A LOT of other options that should (and I want to) be able to tweak:

    "user_given_name": "Living room radiator",
    "device_reg_id": "b37e4b004752f8933dbb095e94f19fc7",
    "area_id": "living_room",
    "cluster_details": {
      "1": {
        "device_type": {
          "name": "THERMOSTAT",
          "id": 769
        },
        "profile_id": 260,
        "in_clusters": {
          "0x0000": {
            "endpoint_attribute": "basic",
            "attributes": {},
            "unsupported_attributes": {}
          },
          "0x0004": {
            "endpoint_attribute": "groups",
            "attributes": {},
            "unsupported_attributes": {}
          },
          "0x0005": {
            "endpoint_attribute": "scenes",
            "attributes": {},
            "unsupported_attributes": {}
          },
          "0xef00": {
            "endpoint_attribute": "tuya_manufacturer",
            "attributes": {
              "0x0107": {
                "attribute_name": "child_lock",
                "value": 0
              },
              "0x026d": {
                "attribute_name": "valve_state",
                "value": 100
              },
              "0x0202": {
                "attribute_name": "target_temperature",
                "value": 230
              },
              "0x0203": {
                "attribute_name": "temperature",
                "value": 205
              },
              "0x0404": {
                "attribute_name": "mode",
                "value": 2
              },
              "0x022c": {
                "attribute_name": "temperature_calibration",
                "value": -20
              },
              "0x0269": {
                "attribute_name": "boost_duration_seconds",
                "value": 300
              },
              "0x046a": {
                "attribute_name": "valve_force_state",
                "value": 0
              },
              "0x026b": {
                "attribute_name": "comfort_mode_temperature",
                "value": 20
              },
              "0x026c": {
                "attribute_name": "eco_mode_temperature",
                "value": 18
              },
              "0x016e": {
                "attribute_name": "battery_low",
                "value": 0
              },
              "0x046f": {
                "attribute_name": "week_format",
                "value": 2
              },
              "0x0272": {
                "attribute_name": "away_mode_temperature",
                "value": 15
              },
              "0x0174": {
                "attribute_name": "auto_lock",
                "value": 0
              },
              "0x0275": {
                "attribute_name": "away_duration_days",
                "value": 6
              }
            },
            "unsupported_attributes": {}
          },
          "0x0201": {
            "endpoint_attribute": "thermostat",
            "attributes": {
              "0x0000": {
                "attribute_name": "local_temperature",
                "value": 2050
              },
              "0x0002": {
                "attribute_name": "occupancy",
                "value": 1
              },
              "0x0010": {
                "attribute_name": "local_temperature_calibration",
                "value": -200
              },
              "0x0012": {
                "attribute_name": "occupied_heating_setpoint",
                "value": 2300
              },
              "0x0014": {
                "attribute_name": "unoccupied_heating_setpoint",
                "value": 1500
              },
              "0x001b": {
                "attribute_name": "ctrl_sequence_of_oper",
                "value": 2
              },
              "0x001c": {
                "attribute_name": "system_mode",
                "value": 4
              },
              "0x001e": {
                "attribute_name": "running_mode",
                "value": 4
              },
              "0x0025": {
                "attribute_name": "programing_oper_mode",
                "value": 0
              },
              "0x0029": {
                "attribute_name": "running_state",
                "value": 1
              },
              "0x4000": {
                "attribute_name": "comfort_heating_setpoint",
                "value": 2000
              },
              "0x4001": {
                "attribute_name": "eco_heating_setpoint",
                "value": 1800
              },
              "0x4002": {
                "attribute_name": "operation_preset",
                "value": 2
              },
              "0x4003": {
                "attribute_name": "work_days",
                "value": 2
              },
              "0x4004": {
                "attribute_name": "valve_open_percentage",
                "value": 100
              },
              "0x4005": {
                "attribute_name": "boost_duration_seconds",
                "value": 300
              },
              "0x4006": {
                "attribute_name": "valve_force_state",
                "value": 0
              },
              "0x4007": {
                "attribute_name": "unoccupied_duration_days",
                "value": 6
              }
            },
            "unsupported_attributes": {
              "0x0000": {
                "attribute_name": "local_temperature"
              },
              "0x0002": {
                "attribute_name": "occupancy"
              },
              "0x0003": {
                "attribute_name": "abs_min_heat_setpoint_limit"
              },
              "0x0004": {
                "attribute_name": "abs_max_heat_setpoint_limit"
              },
              "0x0005": {
                "attribute_name": "abs_min_cool_setpoint_limit"
              },
              "0x0006": {
                "attribute_name": "abs_max_cool_setpoint_limit"
              },
              "0x0029": {
                "attribute_name": "running_state"
              },
              "0x0007": {
                "attribute_name": "pi_cooling_demand"
              },
              "0x0008": {
                "attribute_name": "pi_heating_demand"
              },
              "0x0011": {
                "attribute_name": "occupied_cooling_setpoint"
              },
              "0x0012": {
                "attribute_name": "occupied_heating_setpoint"
              },
              "0x0013": {
                "attribute_name": "unoccupied_cooling_setpoint"
              },
              "0x0015": {
                "attribute_name": "min_heat_setpoint_limit"
              },
              "0x0016": {
                "attribute_name": "max_heat_setpoint_limit"
              },
              "0x0017": {
                "attribute_name": "min_cool_setpoint_limit"
              },
              "0x0018": {
                "attribute_name": "max_cool_setpoint_limit"
              },
              "0x0014": {
                "attribute_name": "unoccupied_heating_setpoint"
              },
              "0x001e": {
                "attribute_name": "running_mode"
              }
            }
          },
          "0x0204": {
            "endpoint_attribute": "thermostat_ui",
            "attributes": {
              "0x0001": {
                "attribute_name": "keypad_lockout",
                "value": 0
              },
              "0x5000": {
                "attribute_name": "auto_lock",
                "value": 0
              }
            },
            "unsupported_attributes": {}
          },
          "0x0006": {
            "endpoint_attribute": "on_off",
            "attributes": {},
            "unsupported_attributes": {
              "0x0000": {
                "attribute_name": "on_off"
              },
              "0x4003": {
                "attribute_name": "start_up_on_off"
              }
            }
          },
          "0x0001": {
            "endpoint_attribute": "power",
            "attributes": {
              "0x0021": {
                "attribute_name": "battery_percentage_remaining",
                "value": 200
              },
              "0x0031": {
                "attribute_name": "battery_size",
                "value": 3
              },
              "0x0033": {
                "attribute_name": "battery_quantity",
                "value": 2
              }
            },
            "unsupported_attributes": {
              "0x0020": {
                "attribute_name": "battery_voltage"
              },
              "0x0021": {
                "attribute_name": "battery_percentage_remaining"
              }
            }
          }
        },
        "out_clusters": {
          "0x000a": {
            "endpoint_attribute": "time",
            "attributes": {},
            "unsupported_attributes": {}
          },
          "0x0019": {
            "endpoint_attribute": "ota",
            "attributes": {},
            "unsupported_attributes": {}
          }
        }
      }

So my question: is there a way I can manipulate these or define my own controls in a certain way?

Disclaimer: After batling Zigbee2MQTT with lots of threads dormant for months and having to reset all my devices, I quit trying, so Z2M is currently not an option for me.

1 Like

Hi, did you find a solution for this? Or did you quit finding it?

If not all expected entities (clusters and attributes) are exposed by default in the ZHA UI then it likely needs a custom ZHA Device Handler (also known as ZHA-quirk) so suggest submitting a new device request support issue to the ZHA Device Handlers repository. Read and follow this section in ZHA docs → https://www.home-assistant.io/integrations/zha#how-to-add-support-for-new-and-unsupported-devices

If nothing else then you are more likely to get the attention and feedback from quirks developers and experts when posting issues there, also be sure to search issues there using the device signature as keyword to see if find existing issues → https://github.com/zigpy/zha-device-handlers

1 Like