ZHA - Konfiguration von Geräten

Nach dem ich vor 2 Wochen auf ZHA umgestiegen bin, musste ich mich zwangsweise mit dem Thema Konfiguration von ZigBee Geräten unter ZHA ein wenig auseinander setzen. Dabei bin ich auf die Integration ZHA Toolkit aus dem HACS gestoßen. Und möchte euch gerne die Funktionsweise am Bsp. von Energie Report vorstellen.

Nach der Installation von ZHA Toolkit aus dem HACS ist noch ein Ertrag in der configuration,yaml notwendig

zha_toolkit:

Danach ein Home Assistant Neustart, damit die zha_toolkit Aktionen zur verfügung stehen.

Zuerst sollte man das jeweilige Gerät scannen, also die Abfrage nach verfügbaren Clustern durchführen. Aktion: zha_toolkit.scan_device
Das ganze in den Entwicklungswerkzeugen → Aktionen

Als Device Reference (ieee) gibt man einfach eine beliebige Entität des betroffenen Gerätes an.
Hier am Beispiel einer INNR Plugs SP120

action: zha_toolkit.scan_device
data:
  ieee: switch.innr_garage

Das Ergebnis sieht dann so aus:

zha_toolkit_version: v1.1.33
zigpy_version: 0.87.0
zigpy_rf_version: 0.48.0
ieee_org: switch.innr_garage
ieee: 00:15:8d:00:03:41:7b:a1
command: scan_device
command_data: null
start_time: "2025-12-07T20:59:38.859478+00:00"
errors: []
params:
  dir: 0
  tries: 1
  expect_reply: true
  args: []
  kwargs: {}
  read_before_write: true
  read_after_write: true
scan:
  ieee: 00:15:8d:00:03:41:7b:a1
  nwk: "0xe546"
  model: SP 120
  manufacturer: innr
  manufacturer_id: "0x4454"
  endpoints:
    - id: 1
      device_type: "0x0010"
      profile: "0xc05e"
      in_clusters:
        "0x0000":
          cluster_id: "0x0000"
          title: Basic
          name: basic
          attributes: {}
          commands_received: {}
          commands_generated: {}
        "0x0003":
          cluster_id: "0x0003"
          title: Identify
          name: identify
          attributes: {}
          commands_received: {}
          commands_generated: {}
        "0x0004":
          cluster_id: "0x0004"
          title: Groups
          name: groups
          attributes: {}
          commands_received: {}
          commands_generated: {}
        "0x0005":
          cluster_id: "0x0005"
          title: Scenes
          name: scenes
          attributes: {}
          commands_received: {}
          commands_generated: {}
        "0x0006":
          cluster_id: "0x0006"
          title: On/Off
          name: on_off
          attributes: {}
          commands_received: {}
          commands_generated: {}
        "0x0008":
          cluster_id: "0x0008"
          title: Level control
          name: level
          attributes: {}
          commands_received: {}
          commands_generated: {}
        "0x000a":
          cluster_id: "0x000a"
          title: Time
          name: time
          attributes: {}
          commands_received: {}
          commands_generated: {}
        "0x0702":
          cluster_id: "0x0702"
          title: MeteringClusterInnr
          name: smartenergy_metering
          attributes: {}
          commands_received: {}
          commands_generated: {}
        "0x0b04":
          cluster_id: "0x0b04"
          title: Electrical Measurement
          name: electrical_measurement
          attributes: {}
          commands_received: {}
          commands_generated: {}
      out_clusters:
        "0x0003":
          cluster_id: "0x0003"
          title: Identify
          name: identify
          attributes: {}
          commands_received: {}
          commands_generated: {}
        "0x000a":
          cluster_id: "0x000a"
          title: Time
          name: time
          attributes: {}
          commands_received: {}
          commands_generated: {}
        "0x0019":
          cluster_id: "0x0019"
          title: Ota
          name: ota
          attributes: {}
          commands_received: {}
          commands_generated: {}
    - id: 2
      device_type: "0x1000"
      profile: "0xc05e"
      in_clusters:
        "0x1000":
          cluster_id: "0x1000"
          title: LightLink
          name: lightlink
          attributes: {}
          commands_received: {}
          commands_generated: {}
      out_clusters: {}
success: true

Dann sucht man sich das Richtige Cluster heraus. In dem Bespiel den Energie Report

        "0x0702":
          cluster_id: "0x0702"
          title: MeteringClusterInnr
          name: smartenergy_metering
          attributes: {}
          commands_received: {}
          commands_generated: {}

Als nächstes kann man sich mit der Aktion zha_toolkit.conf_report_read die aktuelle Konfiguration ausgeben lassen. Cluster haben wir ja aus dem scan erhalten 0x0702 beim Attribute war try & error angesagt. Und schließlich habe ich einfach 0x0000 also einen 0 eingegeben. Da im UI-Modus nur dezimal Werte eingegeben werden können, muss man in den YAML-Modus wechseln um die Hexa-dezimal Werte eingeben zu können.

action: zha_toolkit.conf_report_read
data:
  ieee: switch.innr_garage
  endpoint: 1
  cluster: 0x0702
  attribute: 0x0000

Das Ergebnis:

zha_toolkit_version: v1.1.33
zigpy_version: 0.87.0
zigpy_rf_version: 0.48.0
ieee_org: switch.innr_garage
ieee: 00:15:8d:00:03:41:7b:a1
command: conf_report_read
command_data: null
start_time: "2025-12-07T21:14:11.146637+00:00"
errors: []
params:
  endpoint_id: 1
  cluster_id: 1794
  attr_id: 0
  dir: 0
  tries: 1
  expect_reply: true
  args: []
  kwargs: {}
  read_before_write: true
  read_after_write: true
success: true
result_conf:
  - cluster: MeteringClusterInnr
    cluster_id: "0x0702"
    ep: 1
    attr_id: "0x0000"
    direction: 0
    status: 0
    type: "0x25"
    min_interval:
      - 60
    max_interval:
      - 1800
    reportable_change:
      - 255
    attr: current_summ_delivered

Da wir nun wissen wie die aktuelle Konfiguration aussieht, können wir mit der Aktion zha_toolkit.conf_report diese nach unseren Bedürfnissen anpassen.

Als Bsp: Also wir ändern reportable_change auf den Wert 200

action: zha_toolkit.conf_report
data:
  ieee: switch.innr_garage
  endpoint: 1
  cluster: 1794
  attribute: 0
  min_interval: 60
  max_interval: 1800
  reportable_change: 200

Wenn man jetzt erneut die Aktion zha_toolkit.conf_report_read ausführt, sollten nun die neu gesetzten Konfiguration Werte ausgelesen werden.

zha_toolkit_version: v1.1.33
zigpy_version: 0.87.0
zigpy_rf_version: 0.48.0
ieee_org: switch.innr_garage
ieee: 00:15:8d:00:03:41:7b:a1
command: conf_report_read
command_data: null
start_time: "2025-12-07T21:24:08.916076+00:00"
errors: []
params:
  endpoint_id: 1
  cluster_id: 1794
  attr_id: 0
  dir: 0
  tries: 1
  expect_reply: true
  args: []
  kwargs: {}
  read_before_write: true
  read_after_write: true
success: true
result_conf:
  - cluster: MeteringClusterInnr
    cluster_id: "0x0702"
    ep: 1
    attr_id: "0x0000"
    direction: 0
    status: 0
    type: "0x25"
    min_interval:
      - 60
    max_interval:
      - 1800
    reportable_change:
      - 200
    attr: current_summ_delivered

Zugegeben, ein wenig komplizierter als bei ZigBee2MQTT, aber auch kein Ding der Unmöglichkeit.
Somit lässt sich alles was ein Gerät an konfigurierbaren Cluster zur verfügung stellt auch nach belieben konfigurieren. :grinning:

Hier Vollständigkeitshalber die Dokumentation von ZHA Toolkit. Diese Integration bietet weit mehr als nur die Möglichkeit der Geräte Konfiguration.
ZHA Toolkit

Gruß Osorkon

1 „Gefällt mir“