Mit dem Update 2022.8 wurde das „Reparieren“ Feature in Home Assistant eingeführt. Seit dem prüft Home Assistant auf bekannte Probleme und weist einen in den Einstellungen direkt mit sprechenden Meldungen auf erkannte Fehler hin. In der Regel beinhaltet die Fehlermeldung auch direkt einen Link zur entsprechenden Dokumentation.
Seit dem September Update 2022.9 werden viele wohl die folgende Warnung bzgl. manuell konfigurierter Entitäten vom Platform-Typ MQTT erhalten haben. Dabei kann es sich um Sensoren, Binary-Sensoren, Schalter, Buttons oder andere Integrationstypen handeln. Somit kann es auch durchaus vorkommen, dass Ihr die Meldung mehrfach erhaltet, nur eben für unterschiedliche Integrationstypen.
Was genau bedeutet diese Meldung?
Bisher war es so, dass MQTT-Sensoren unter der Integration „sensor“ mit dem Platformtyp „mqtt“ eingetragen wurden. Binär-Sensoren wurden ebenfalls mit dem Platformtyp „mqtt“ angegeben, jedoch unter der Integration „binary_sensor“. Kurz gesagt, alle MQTT-Entitäten waren über sämtliche Integrationen in der Konfiguration verstreut.
Genau das soll sich nun ändern. Und zwar wurde nun für MQTT eine eigene Integration eingeführt unter der nun alle MQTT-Entitäten zusammengefasst werden.
Aber keine Sorge. Wie in dem „Repair-Hinweis“ zu lesen ist, funktioniert die alte Definitionsart auch weiterhin. Zumindest bis zum Dezember Update. Das heißt man hat noch drei Monate Zeit seine Konfiguration entsprechend zu überarbeiten.
Eigentlich muss man das ganze aber auch gar nicht auf die lange Bank schieben, denn so eine große Änderung ist für die Anpassung gar nicht notwendig.
Schauen wir uns einmal an, was zu tun ist, um den „Fehler“ wieder los zu werden, bzw. richtiger wäre, wie wir die Konfiguration auf die neue Definitionsart der MQTT-Entitäten anpassen müssen.
Alte Konfiguration
Bisher sah die Konfiguration für MQTT-Entitäten in etwa so aus:
binary_sensor:
- platform: mqtt
device_class: window
unique_id: bad_schlafzimmer_2
name: Schlafzimmer Fenstersensor 2
state_topic: tele/sonoff_gateway/RESULT
value_template: "{{ value_json.RfReceived.Data }}"
payload_on: 'E6240A'
payload_off: 'E6240E'
- platform: mqtt
device_class: window
unique_id: bad_schlafzimmer_1
name: Schlafzimmer Fenstersensor 1
state_topic: tele/sonoff_gateway/RESULT
value_template: "{{ value_json.RfReceived.Data }}"
payload_on: 'E6240B'
payload_off: 'E6240C'
button:
- platform: mqtt
name: "Roborock Start"
icon: mdi:gate
command_topic: "valetudo/rockrobo/command"
payload_press: 'start'
qos: 1
retain: false
unique_id: "roborock_start"
climate:
- platform: mqtt
name: "Buero Thermostat"
min_temp: 4
max_temp: 30
temp_step: 1
modes:
current_temperature_topic: shellies/shellytrv-8CF68108C443/info
current_temperature_template: "{{ value_json.thermostats[0].tmp.value }}"
temperature_command_topic: shellies/shellytrv-1/thermostat/0/command/target_t
unique_id: 2af60efd-e04f-44cb-8d93-f7cf8283a7c5
light:
- platform: mqtt
name: Flurlicht Unten
icon: mdi:lightbulb
state_topic: tele/sonoff_gateway/RESULT
command_topic: cmnd/sonoff_gateway/RfCode
payload_on: '#500115'
payload_off: '#500114'
optimistic: "true"
qos: 1
retain: false
state_value_template: "{{ value_json.RfReceived.Data }}"
unique_id: flurlicht_eg
sensor:
- platform: mqtt
name: Kuechenjalousie-Taster Action
state_topic: "zigbee2mqtt/Taster Küchenjalousie/action"
expire_after: 1
payload_not_available: 'off'
switch:
- platform: mqtt
name: Leinwand
icon: mdi:projector-screen
state_topic: tele/sonoff_gateway/RESULT
command_topic: cmnd/sonoff_gateway/RfCode
payload_on: '#913BF4'
payload_off: '#913BF1'
optimistic: "true"
qos: 1
retain: false
value_template: "{{ value_json.RfReceived.Data }}"
unique_id: beamer_leinwand
Anpassen der Konfiguration an die neue MQTT Integration
Wie eben schon erwähnt sind in der ursprünglichen Konfiguration die Definitionen der MQTT-Entitäten über die einzelnen Integrationen verteilt. Um die anzupassenden Einträge zu finden müsst Ihr einfach eure gesamte Konfiguration nach dem Eintrag „platform: mqtt“ durchsuchen. Alle Einträge mit dieser Angabe müssen angepasst werden und in Zukunft unter der MQTT-Integration eingetragen werden.
Das heißt man erzeugt eine neue Integration „mqtt“ (Also eine neue Zeile mit dem Eintrag „mqtt:“ ohne Einrückung) und innerhalb der MQTT-Integration für jede Integration die in die neue MQTT-Integration umgezogen werden soll einen Untergeordneten Eintrag mit dem jeweiligen Namen.
Für beispielsweise die „binary_sensor“ Integration wird also unterhalb von der neuen Zeile „mqtt:“ eine weitere Zeile mit „binary_sensor:“ angelegt. Dieser Eintrag wird um 2 Leertasten eingerückt.
Abschließend verschiebt man noch die Definitionen der entsprechenden Integration unter den entsprechenden Eintrag.
Da es sich bei diesen „Unterkategorien“ um Listen handelt wird jede neue Entity-Definition mit einem Minus eingeleitet welches um 4 Leertasten eingerückt ist.
Das einzige was Ihr nach dem Verschieben an den Einträgen ändern müsst ist das entfernen der Angabe „platform: mqtt“.
Das Konfigurationsbeispiel von oben würde nach der Anpassung an die neue Schreibweise wie folgt aussehen:
mqtt:
binary_sensor:
- device_class: window
unique_id: bad_schlafzimmer_2
name: Schlafzimmer Fenstersensor 2
state_topic: tele/sonoff_gateway/RESULT
value_template: "{{ value_json.RfReceived.Data }}"
payload_on: 'E6240A'
payload_off: 'E6240E'
- device_class: window
unique_id: bad_schlafzimmer_1
name: Schlafzimmer Fenstersensor 1
state_topic: tele/sonoff_gateway/RESULT
value_template: "{{ value_json.RfReceived.Data }}"
payload_on: 'E6240B'
payload_off: 'E6240C'
button:
- name: "Roborock Start"
icon: mdi:gate
command_topic: "valetudo/rockrobo/command"
payload_press: 'start'
qos: 1
retain: false
unique_id: "roborock_start"
climate:
- name: "Buero Thermostat"
min_temp: 4
max_temp: 30
temp_step: 1
modes:
current_temperature_topic: shellies/shellytrv-8CF68108C443/info
current_temperature_template: "{{ value_json.thermostats[0].tmp.value }}"
temperature_command_topic: shellies/shellytrv-1/thermostat/0/command/target_t
unique_id: 2af60efd-e04f-44cb-8d93-f7cf8283a7c5
light:
- name: Flurlicht Unten
icon: mdi:lightbulb
state_topic: tele/sonoff_gateway/RESULT
command_topic: cmnd/sonoff_gateway/RfCode
payload_on: '#500115'
payload_off: '#500114'
optimistic: "true"
qos: 1
retain: false
state_value_template: "{{ value_json.RfReceived.Data }}"
unique_id: flurlicht_eg
sensor:
- name: Kuechenjalousie-Taster Action
state_topic: "zigbee2mqtt/Taster Küchenjalousie/action"
expire_after: 1
payload_not_available: 'off'
switch:
- name: Leinwand
icon: mdi:projector-screen
state_topic: tele/sonoff_gateway/RESULT
command_topic: cmnd/sonoff_gateway/RfCode
payload_on: '#913BF4'
payload_off: '#913BF1'
optimistic: "true"
qos: 1
retain: false
value_template: "{{ value_json.RfReceived.Data }}"
unique_id: beamer_leinwand
Änderungen bei aufgeteilter Konfiguration
Wenn es sich um eine aufgeteilte Konfiguration handelt und beispielsweise die Sensoren mit Include eingebunden wurden, muss für die neue MQTT-Integration eine neue Datei bzw. bei include_dir_named oder include_dir_merge_named ein neues Verzeichnis angelegt und eingebunden werden.
Das heist in der configuration.yaml ergänzt Ihr z.B. die folgende Zeile und legt die Datei mqtt.yaml an:
mqtt: !include mqtt.yaml
Anschließend muss die neue Datei mqtt.yaml angelegt und alle Einträge der Platform MQTT in diese Datei verschoben werden. Auch hier muss der Eintrag „platform: mqtt“ aus jedem Eintrag entfernt werden.
Der einzige Unterschied ist, dass man hier die erste Zeile „mqtt:“ nicht mehr benötigt, da die Integration bereits in der Include-Zeile in der configuration.yaml angegeben wurde.
Die Binärsensoren in der mqtt.yaml sähen demnach wie folgt aus:
binary_sensor:
- device_class: window
unique_id: bad_schlafzimmer_2
name: Schlafzimmer Fenstersensor 2
state_topic: tele/sonoff_gateway/RESULT
value_template: "{{ value_json.RfReceived.Data }}"
payload_on: 'E6240A'
payload_off: 'E6240E'
- device_class: window
unique_id: bad_schlafzimmer_1
name: Schlafzimmer Fenstersensor 1
state_topic: tele/sonoff_gateway/RESULT
value_template: "{{ value_json.RfReceived.Data }}"
payload_on: 'E6240B'
payload_off: 'E6240C'
Ich hoffe, ich konnte euch mit dieser Erklärung ein wenig weiter helfen.
Wenn Ihr noch Fragen haben solltet, schaut gerne einfach auf unserem Discord vorbei. Dort kann euch sicher bei eurem Problem geholfen werden!
https://smarthomeyourself.de/discord