MQTT Discovery für 4 Kanal Relais funktioniert nicht

KreidlerMichel

New member
Guten Tag,

ich bin neu hier in diesem Forum und auch noch Anfänger in Sachen Home Assistent. :)

Seit einiger Zeit versuche ich, ein 4 Kanal Relais Modul auf Arduino Mini Basis in HA zum Laufen zu bringen.
Über eine konventionelle Einbindung über die configuration.yaml funktioniert das Ganze auch, aber mit Hilfe der MQTT Discovery Funktionalität bekomme ich das nicht hin.
Leider helfen mir die diversen Anleitungen im Netz nicht wirklich weiter, da sie sich immer nur auf einen Sensor pro Gerät beziehen.

Folgendes Problem:
Ich sende nach einschalten des 4-Kanal Relais folgende MQTT Payload an das Topic 'homeassistant/switch/UNO-01_CHX/config' :
Code:
{
  "name" : null,
  "uniq_id" : "UNO-01_X",
  "cmd_t" : "UNO/1/cmnd/PWRX",
  "stat_t" : "UNO/1/stat/PWRX",
  "dev" : {
    "name" : "UNO-01",
    "mf" : "Me"
  }
}

Wobei das Ganze 4 mal gesendet wird und jeweils das X durch die Zahlen 1-4 ersetzt werden. So wie ich die Anleitung unter MQTT Discovery verstehe, muss für jeden Switch ( 4 Stück) je eine eigene MQTT Message an den Broker gesendet werden. Die uniq_id (und das homeassistent/.../config topic ??) müssen sich dabei unterscheiden.
Leider erkennt HA aber immer nur den letzten Switch als neue Entität. Funktionieren tut dieser dann auch einwandfrei.
Wie aber bekomme ich es hin, dass alle 4 Switches (Relais) erkannt werden und einem Gerät (Device ?) mit dem Namen UNO-01 zugeordnet werden ?

Vielen Dank für die Hilfe
 
Hier mal ein Beispiel meiner Heizung:

YAML:
{
  "unique_id": "Heizung Boost",
  "object_id": "Heizung Boost",
  "command_topic": "Buderus/thermostat/hc1/boost",
  "state_topic": "Buderus/thermostat_data",
  "name": "Heizung Boost",
  "payload_on": "an",
  "payload_off": "aus",
  "value_template": "{{value_json.hc1.boost if value_json.hc1 is defined and value_json.hc1.boost is defined else 'aus'}}",
  "device": {
    "identifiers": [
      "Buderus Heizung"
    ],
    "manufacturer": "Buderus",
    "model": "GB172i",
    "name": "Buderus Heizung"
  },
  "availability": [
    {
      "topic": "Buderus/status",
      "value_template": "{{'online' if value == 'online' else 'offline'}}"
    },
    {
      "topic": "Buderus/thermostat_data",
      "value_template": "{{'online' if value_json.hc1 is defined and value_json.hc1.boost is defined else 'offline'}}"
    }
  ],
  "availability_mode": "all",
  "platform": "mqtt"
}

Den Code kannst du dir jetzt anpassen und für jedes deiner Switches mit eigenem Discovery-Topic anlegen.

Also anhand meines Beispiels wäre das in etwa so:

homeassistant/switch/Buderus_Heizung/Heizung_Boost/config

homeassistant/switch/Buderus_Heizung/Heizung_Boost2/config

homeassistant/switch/Buderus_Heizung/Heizung_Boost3/config
 
Hallo IvoryBalboa90,
Danke für Deine Antwort. Leider funktioniert das bei mir nicht. Ich habe folgende Payload
Code:
{
  "unique_id": "Uno01_1",
  "object_id": "Uno01_1",
  "command_topic": "UNO/1/cmnd",
  "state_topic": "UNO/1/stat",
  "name": "UNO01CH1",
  "payload_on": "ON",
  "payload_off": "OFF",
  "value_template": "{{value_json.PWR1}}",
  "device": {
    "identifiers": [
      "UNO01"
    ],
    "manufacturer": "ARDUINO",
    "model": "Mini Pro",
    "name": "UNO01"
  },
  "availability": [
    {
      "topic": "UNO/1/status",
      "value_template": "{{'online' if value == 'online' else 'offline'}}"
    },
  ],
  "availability_mode": "all",
  "platform": "mqtt"
}

Jeweils an folgende Topics geschickt:
homeassistant/switch/UNO/UNO01/config
homeassistant/switch/UNO/UNO02/config
homeassistant/switch/UNO/UNO03/config
homeassistant/switch/UNO/UNO04/config

Wobei ich die uniq_id, object_id, name und value_template jeweils angepasst habe. (Uno01_1, ... Uno01_4 / value_json.PWR1 .. PWR4)

in der log Datei von HA steht dann:
2023-12-20 15:12:44.936 WARNING (MainThread) [homeassistant.components.mqtt.discovery] Unable to parse JSON UNO01:
für alle vier Topics.

Irgendwo muss da noch ein Fehler drin sein !?
 
Nein. Bei jedem Versuchen wurde ein Fehler im Log protokolliert.
Code:
2023-12-20 16:01:51.914 ERROR (MainThread) [homeassistant.helpers.template] Template variable error: 'value_json' is undefined when rendering '{{value_json.PWR2}}'
2023-12-20 16:01:51.916 ERROR (MainThread) [homeassistant.helpers.template] Error parsing value: 'value_json' is undefined (value: Offline, template: {{value_json.PWR2}})

Ich habe das jetzt mal weggelassen und folgende Payload gesendet:
Code:
{
  "unique_id": "UNO_01_4",
  "object_id": "UNO_01_4",
  "command_topic": "UNO/1/cmnd/PWR4",
  "state_topic": "UNO/1/stat",
  "name": "UNO.01.CH4",
  "payload_on": "ON",
  "payload_off": "OFF",
  "device": {
    "identifiers": [
      "UNO01"
    ],
    "manufacturer": "ARDUINO",
    "model": "Mini Pro",
    "name": "UNO01"
  },
  "platform": "mqtt"
}

So funktioniert es, dass ich alle vier Switches bei Entitäten angezeigt bekomme.

Danke.
 

Anhänge

  • 1703164394940.png
    1703164394940.png
    10,2 KB · Aufrufe: 1

Zurzeit aktive Besucher

Keine Mitglieder online.

Letzte Anleitungen

Statistik des Forums

Themen
7.003
Beiträge
68.087
Mitglieder
7.381
Neuestes Mitglied
n0b0dy
Zurück
Oben