Home Assistant Fehler: Deine manuell konfigurierte(n) MQTT-sensor(en) erfordert Aufmerksamkeit

Echo Show 5 (1. Gen, 2019) – Smart Display mit Alexa – Durch Alexa in Verbindung bleiben – Anthrazit
Echo Show 5 (1. Gen, 2019) – Smart Display mit Alexa – Durch Alexa in Verbindung bleiben – Anthrazit
--

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.

Beispiel für eine Warnung über eine veraltete manuelle MQTT-Sensor Konfiguration

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