(Zigbee2MQTT) Stolperfallen
Fehlermeldung
Beim Deaktivieren der legacy_action_sensor option kommt folgende fehlermeldung frontend:api:bridge: Sending {"topic":"bridge/request/options","payload":{"options":{"homeassistant":{"legacy_action_sensor":false}},"transaction":"yaom6-1"}} [4/12/2026, 7:57:04 AM] z2m: Request 'zigbee2mqtt/bridge/request/options' failed with error: 'Extension with name HomeAssistant already present'
Das ist sehr wahrscheinlich ein Bug beim Umschalten der Home-Assistant-Optionen zur Laufzeit im Zigbee2MQTT-Frontend, nicht ein Fehler in deiner Konfiguration. Ein aktueller Issue zeigt denselben Fehler beim Ein-/Ausschalten von HA-Optionen per bridge/request/options:
Extension with name HomeAssistant already present(GitHub)
Außerdem ist legacy_action_sensor in der Zigbee2MQTT-Doku als Home-Assistant-Option beschrieben; wenn aktiviert, sendet Zigbee2MQTT nach jeder Action absichtlich ein leeres action. (Zigbee2MQTT)
Was das für dich bedeutet
Dein eigentliches Problem bleibt:
.../actionTopic ist korrektpayload.actionwird danach leer- das passt exakt zu
legacy_action_sensor: true(Zigbee2MQTT)
Der neue Fehler bedeutet nur:
- das Frontend kann die HomeAssistant-Extension gerade nicht sauber live neu aufbauen
- daher musst du die Option in der Datei ändern und Zigbee2MQTT neu starten, statt sie im Frontend umzuschalten. (GitHub)
So gehst du sauber vor
Öffne deine Zigbee2MQTT-configuration.yaml und setze:
homeassistant:
enabled: true
legacy_action_sensor: false
Optional, wenn du die neuere Richtung nutzen willst:
homeassistant:
enabled: true
legacy_action_sensor: false
experimental_event_entities: true
Danach Zigbee2MQTT komplett neu starten. Die Doku führt beide Optionen im homeassistant-Block. (Zigbee2MQTT)
Wichtig: nicht im Frontend umschalten
Der Fehler kommt genau von diesem Weg:
zigbee2mqtt/bridge/request/options
also vom dynamischen Options-Update aus dem Frontend. Dafür gibt es aktuell einen bekannten Fehler bei HA-bezogenen Optionen. (GitHub)
Wenn du den Code trotzdem patchen willst
Die richtige Stelle ist nicht der TS0044-Converter, sondern die HA-Extension von Zigbee2MQTT:
lib/extension/homeassistant.ts
Dort sitzt die Logik, die bei aktivem legacy_action_sensor direkt nach einer Action noch einmal {action: ""} publiziert. Das ist im aktuellen Quellcode so zu sehen. (GitHub)
Wenn du lokal patchen willst, ist der Minimal-Patch, diese Zeile zu deaktivieren:
await this.publishEntityState(data.entity, {action: ""});
Aber der bessere Weg ist wirklich, legacy_action_sensor: false in der Konfig zu setzen und Zigbee2MQTT neu zu starten. (Zigbee2MQTT)
Erwartetes Verhalten danach
Nach dem Neustart solltest du typischerweise sehen:
- kein absichtliches Leeren von
payload.action - Actions weiter korrekt auf
zigbee2mqtt/DEIN_GERAET/action - in Home Assistant besser mit MQTT Device Triggern oder Event-Entities arbeiten statt mit dem alten Action-Sensor. Das wird in den Zigbee2MQTT-Hinweisen ebenfalls so empfohlen. (GitHub)
Wenn du den Patch direkt suchst
Je nach Installation findest du die laufende JS-Datei oft eher hier als die TS-Datei:
/app/lib/extension/homeassistant.js
Die Quellreferenz bleibt aber:
lib/extension/homeassistant.ts
(GitHub)
TS0044 action = Leerstring im payload
Das liegt sehr wahrscheinlich nicht am TS0044_1-Converter, sondern an der Home-Assistant-Integration von Zigbee2MQTT.
Der entscheidende Hinweis ist dein Symptom:
.../actionTopic enthält den richtigen Tastendruck- Payload-Feld
actionim normalen Geräte-Topic ist danach leer - im Frontend ist
actionebenfalls leer
Genau dieses Verhalten ist dokumentiert, wenn homeassistant.legacy_action_sensor aktiviert ist: Dann wird nach jeder Action absichtlich ein leeres action gesendet. (Zigbee2MQTT)
Außerdem zeigt der Zigbee2MQTT-Quellcode genau diese Logik in der Home-Assistant-Extension: Wenn legacyActionSensor aktiv ist und data.message.action existiert, wird direkt danach publishEntityState(..., {action: ""}) aufgerufen; erst darunter wird der korrekte Wert zusätzlich auf .../action publiziert. (GitHub)
Was bei dir also wahrscheinlich aktiv ist
In deiner configuration.yaml von Zigbee2MQTT vermutlich so etwas:
homeassistant:
enabled: true
legacy_action_sensor: true
Die Doku beschreibt genau dazu:
legacy_action_sensor: aktiviert alte Action-Sensoren- dabei wird nach jeder Action ein leerer
action-Wert gesendet (Zigbee2MQTT)
Warum „Recent activity“ trotzdem richtig ist
Weil Zigbee2MQTT für Actions zusätzlich das separate MQTT-Topic
zigbee2mqtt/DEIN_GERAET/action
publiziert. Das ist genau der Pfad, den Zigbee2MQTT für MQTT Device Triggers verwendet. (GitHub)
Was du tun solltest
Sauberste Lösung
legacy_action_sensor deaktivieren oder entfernen:
homeassistant:
enabled: true
legacy_action_sensor: false
Danach Zigbee2MQTT neu starten.
Dann solltest du für Automationen das separate /action Topic oder die von Zigbee2MQTT empfohlenen MQTT device triggers verwenden. Zigbee2MQTT empfiehlt für Button-Actions in Home Assistant genau diesen Weg. (Zigbee2MQTT)
Falls du in Home Assistant Event-Entities willst
Optional:
homeassistant:
enabled: true
experimental_event_entities: true
Das ist die neuere Richtung für Action-/Event-Geräte. (Zigbee2MQTT)
Wo du patchen müsstest
Nicht im TS0044_1-Geräte-Converter, denn der liefert die Action offenbar korrekt — sonst wäre das Topic .../action nicht richtig.
Die richtige Stelle ist in Zigbee2MQTT selbst:
lib/extension/homeassistant.ts
Dort in der Methode onPublishEntityState(...).
Die relevante Stelle ist sinngemäß:
if (this.legacyActionSensor && data.message.action) {
await this.publishEntityState(data.entity, {action: ""});
}
if (settings.get().advanced.output === "json" && entity.isDevice() && entity.definition && data.message.action) {
const value = data.message.action.toString();
await this.publishDeviceTriggerDiscover(entity, "action", value);
await this.mqtt.publish(`${data.entity.name}/action`, value, {});
}
Genau dieser Code ist im Repository sichtbar. (GitHub)
Wenn du wirklich patchen willst
Dann ist der Minimal-Patch:
if (this.legacyActionSensor && data.message.action) {
// await this.publishEntityState(data.entity, {action: ""});
}
oder härter:
if (false && this.legacyActionSensor && data.message.action) {
await this.publishEntityState(data.entity, {action: ""});
}
Wichtig dabei
Bei einer laufenden Installation patchst du meistens nicht die TypeScript-Quelldatei direkt, sondern die ausgelieferte JS-Datei im Container/Add-on. Je nach Installation liegt sie oft unter etwas wie:
/app/lib/extension/homeassistant.js
Die saubere Lösung ist aber trotzdem: legacy_action_sensor ausschalten, statt den Code zu patchen.
Kurzfazit
Dein Problem ist sehr wahrscheinlich:
- kein TS0044_1-Bug
- kein Converter-Bug
- sondern das absichtliche Verhalten von
legacy_action_sensor: true
Die beste Abhilfe ist daher, diese Option auszuschalten und mit .../action bzw. MQTT Device Triggers weiterzuarbeiten. (Zigbee2MQTT)