Verständnisfrage zu MQTT und Things

Allgemeine Fragen rund um die "Smart Home" Hardware/Komponenten

Moderatoren: seppy, udo1toni

Benutzeravatar
CL084
Beiträge: 27
Registriert: 29. Apr 2021 11:57

Verständnisfrage zu MQTT und Things

Beitrag von CL084 »

Liebe Leute,
Ich bräuchte mal etwas "Starthilfe" wie ich hier weiter verfahren muss.
Folgende Ausgangssituation:
OH3 läuft auf meinem Raspi 4, Mosquitto läuft sauber und in OpenHAB sind neben dem Homematic auch das MQTT Binding installiert.
Am Raspi hängt ein TI CC2531 Stick für die Kommunikation mit den Geräten.
Ich habe ein MQTT Broker "Thing" erstellt und dessen Status ist Online.
Auf dem openhabian System ist zigbee2mqtt installiert was als daemon rennt:
openhabian@openhabian:~ $ systemctl status zigbee2mqtt.service
● zigbee2mqtt.service - zigbee2mqtt
Loaded: loaded (/etc/systemd/system/zigbee2mqtt.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2021-05-01 12:35:44 CEST; 1h 54min ago
Main PID: 2338 (node)
Tasks: 23 (limit: 3978)
CGroup: /system.slice/zigbee2mqtt.service
├─2338 npm
├─2349 sh -c node index.js
└─2350 node index.js

Mai 01 12:35:50 openhabian npm[2338]: Zigbee2MQTT:info 2021-05-01 12:35:50: Coordinator firmware version: '{"meta":{"maintrel":3,"majorrel":2,"minorrel":6,"product":0,"revisi
Mai 01 12:35:50 openhabian npm[2338]: Zigbee2MQTT:info 2021-05-01 12:35:50: Currently 0 devices are joined:
Mai 01 12:35:50 openhabian npm[2338]: Zigbee2MQTT:warn 2021-05-01 12:35:50: `permit_join` set to `true` in configuration.yaml.
Mai 01 12:35:50 openhabian npm[2338]: Zigbee2MQTT:warn 2021-05-01 12:35:50: Allowing new devices to join.
Mai 01 12:35:50 openhabian npm[2338]: Zigbee2MQTT:warn 2021-05-01 12:35:50: Set `permit_join` to `false` once you joined all devices.
Mai 01 12:35:50 openhabian npm[2338]: Zigbee2MQTT:info 2021-05-01 12:35:50: Zigbee: allowing new devices to join.
Mai 01 12:35:50 openhabian npm[2338]: Zigbee2MQTT:info 2021-05-01 12:35:50: Connecting to MQTT server at mqtt://localhost:1883
Mai 01 12:35:50 openhabian npm[2338]: Zigbee2MQTT:info 2021-05-01 12:35:50: Connected to MQTT server
Mai 01 12:35:50 openhabian npm[2338]: Zigbee2MQTT:info 2021-05-01 12:35:50: MQTT publish: topic 'zigbee2mqtt/bridge/state', payload 'online'
Mai 01 12:35:51 openhabian npm[2338]: Zigbee2MQTT:info 2021-05-01 12:35:51: MQTT publish: topic 'zigbee2mqtt/bridge/config', payload '{"commit":"abd8a092","coordinator":{"met
Hier meine Frage:
Ich möchte jetzt 4 Ledvance Steckdosen Plugs in Openhab einbinden doch wie und in welcher Reihenfolge gehe ich nun weiter vor?
Muss ich erst noch einen sog Zigbee2MQTT-Coordinator einrichten oder zuerst die Steckdosen über Zigbee2mqtt pairen?
Ich hoffe Ihr könnt meine Konfusion zersteuen und mich erhellen :?

LG
CLE
von sihui » 3. Mai 2021 11:57
CL084 hat geschrieben: 3. Mai 2021 09:53 So wie's aussieht scheint es nun zu funktionieren
Ja, der zigbee2mqtt Teil sieht schon mal gut aus.
CL084 hat geschrieben: 3. Mai 2021 09:53 Also nun sollte ich einen "Befehl" wie

Code: Alles auswählen

zigbee2mqtt/0x7cb03eaa0a0ab915/state=ON
absetzen können und der Plug sollte sich einschalten, richtig?
Nicht ganz. Der Teil

Code: Alles auswählen

zigbee2mqtt/0x7cb03eaa0a0ab915/state
gibt dir den aktuellen Status deines Gerätes und kommt später in openHAB in das Feld "State Topic".
Wie bereits vorher geschrieben musst du einmal die Steckdose manuell am Schalter schalten, danach erscheint das Command Topic. Statt des manuellen Schaltens kannst du auch in die Doku schauen:

https://www.zigbee2mqtt.io/devices/AB3257001NJ.html

Dort findest du das Command Topic:

Code: Alles auswählen

command_topic: "zigbee2mqtt/<FRIENDLY_NAME>/set"
In deinem Falle also:

Code: Alles auswählen

zigbee2mqtt/0x7cb03eaa0a0ab915/set
Daraus ergibt sich:
z2m4.JPG
bzw. OFF als Payload zum Ausschalten.
Gehe zur vollständigen Antwort
Der mit ohne Ahnung :?

Benutzeravatar
sihui
Beiträge: 1827
Registriert: 11. Apr 2018 19:03
Answers: 21

Re: Verständnisfrage zu MQTT und Things

Beitrag von sihui »

CL084 hat geschrieben: 1. Mai 2021 14:38 Muss ich erst noch einen sog Zigbee2MQTT-Coordinator einrichten
Nein, wenn zigbee2mqtt ohne Fehlermeldung läuft ist alles okay, dein Koordinator ist der CC2531.
CL084 hat geschrieben: 1. Mai 2021 14:38 oder zuerst die Steckdosen über Zigbee2mqtt pairen?
Definitiv ja. Welche Besonderheiten es bei einigen Zigbee Geräten unter Umständen gibt findest du jeweils auf der zigbee2mqtt Seite:

https://www.zigbee2mqtt.io/information/ ... vices.html

CL084 hat geschrieben: 1. Mai 2021 14:38 doch wie und in welcher Reihenfolge gehe ich nun weiter vor?
Am Besten installierst du dir einen MQTT Sniffer, mqtt.fx oder MQTT Explorer sind die gängigsten.
Wenn das Gerät korrekt mit Zigbee2mqtt gepaired wurde kannst du dort direkt die Command und State Topics für die Channels ablesen.

Tue dir selbst einen Gefallen und nutze die "output: attribute" Funktion in deiner configuration.yaml, damit musst du dich dann nicht mehr mit Transformationen herumschlagen musst, sondern du kannst direkt den Channel konfigurieren:

https://community.openhab.org/t/zigbee2 ... ions/86362

Allgemein: pro Gerät ein Thing, pro Funktion des Gerätes ein Channel, für jeden Channel ein Item.
openHAB3 mit Zwave, Alexa, ESPEasy, MQTT, Logitech Harmony, Philips HUE und ZigBee Hardware auf Proxmox VE.

Benutzeravatar
CL084
Beiträge: 27
Registriert: 29. Apr 2021 11:57

Re: Verständnisfrage zu MQTT und Things

Beitrag von CL084 »

Hallo sihui :) vielen Dank für die Erklärung und die Tipps!
Ich werde mich mal dran machen all das umzusetzen und werde berichten!
Aah... ich hab eben mal ein wenig zu den MQTT Sniffer hier im Forum recherchiert und herausgefunden wo ich die herbekomme und wie die zu installieren sind - und siehe da... Es klappt schon mal mit der Connection:
mqtt-explorer.png
:D

Vielen Dank für deine Hilfe sihui :!:
CLE

UPDATE:

Also ich habe nun eine dieser Osram Steckdosen gepaired und mit dem Sniffer u.a. folgende Info erhalten:
"definition": {
"description": "Smart+ plug",
"exposes": [
{
"features": [
{
"access": 7,
"description": "On/off state of the switch",
"name": "state",
"property": "state",
"type": "binary",
"value_off": "OFF",
"value_on": "ON",
"value_toggle": "TOGGLE"
}
],
"type": "switch"
},
{
"access": 1,
"description": "Link quality (signal strength)",
"name": "linkquality",
"property": "linkquality",
"type": "numeric",
"unit": "lqi",
"value_max": 255,
"value_min": 0
}
],
"model": "AB3257001NJ",
"supports_ota": true,
"vendor": "OSRAM"
},
"friendly_name": "0x7cb03eaa0a0abb59",
"ieee_address": "0x7cb03eaa0a0abb59",
"status": "successful",
"supported": true
"ieee_address": "0x7cb03eaa0a0abb59"
},
"type": "device_interview"
"type": "device_announce"
}
Nur... was mache ich jetzt damit?
Unter OH3 ist nichts von der Steckdose zu sehen.
Wie geht's nun weiter?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Der mit ohne Ahnung :?

Benutzeravatar
sihui
Beiträge: 1827
Registriert: 11. Apr 2018 19:03
Answers: 21

Re: Verständnisfrage zu MQTT und Things

Beitrag von sihui »

CL084 hat geschrieben: 1. Mai 2021 17:55 Wie geht's nun weiter?
Du legst eine MQTT Broker als Bridge an, dann fügst du ein Generic MQTT Thing hinzu, dann fügst du für jede Funktion deines Gerätes einen entsprechenden Channel hinzu, dort fügst du bei Command Topic die aus MQTT Explorer abgelesenen Werte ein, bei State Topic ebenfalls, dann fügst du ein Item für jeden Channel hinzu, bringst diese auf eine Sitemap oder HABPanel und schaltest/dimmst/freust dich.
openHAB3 mit Zwave, Alexa, ESPEasy, MQTT, Logitech Harmony, Philips HUE und ZigBee Hardware auf Proxmox VE.

Benutzeravatar
CL084
Beiträge: 27
Registriert: 29. Apr 2021 11:57

Re: Verständnisfrage zu MQTT und Things

Beitrag von CL084 »

Aahh... ok, das werd ich dann mal tun. Bin schon ganz aufgeregt... :lol:
Der mit ohne Ahnung :?

Benutzeravatar
CL084
Beiträge: 27
Registriert: 29. Apr 2021 11:57

Re: Verständnisfrage zu MQTT und Things

Beitrag von CL084 »

Hi liebe Leute ... ich steh' auf'm Schlauch! :?
Ich habe ja diese Angaben vom MQTT Sniffer erhalten:
"friendly_name": "0x7cb03eaa0a0abb59",
"ieee_address": "0x7cb03eaa0a0abb59",
"interview_completed": true,
"interviewing": false,
"model_id": "Plug 01",
"network_address": 30369,
"power_source": "Mains (single phase)",
"software_build_id": "V1.05.09",
"supported": true,
"type": "Router"
},
{
"date_code": "20140331DEOS****",
"definition": {
"description": "Smart+ plug",
"exposes": [
{
"features": [
{
"access": 7,
"description": "On/off state of the switch",
"name": "state",
"property": "state",
"type": "binary",
"value_off": "OFF",
"value_on": "ON",
"value_toggle": "TOGGLE"
}
],
"type": "switch"
Also habe ich einen MQTT Broker eingerichtet - der ist online und habe danach nun ein Generic MQTT Thing erstellt, ebenfalls online.

Nun bin ich dabei einen Channel anzulegen vom Typ On/Off Switch, aber wo trage ich nun welche Werte ein?? Ich blick's einfach nicht! :(

Was kommt z.B. ganz oben als erstes bei "Channel Identifier" rein?
Irgendwie muss OH doch wissen welche der insgesamt vier Steckdosen gemeint ist, oder?

Oder was trage ich bei "MQTT Command Topic" ein? Einfach nur "command/on" oder wie ist da die Syntax. ????
Und was muss bei "MQTT State Topic" rein, damit der Staus ausgelesen wird.
Und wie ist das mit dem "Is Command" Schalter unter "Show advanced" muss der aktiv sein?
Ich hab immer noch mehr Fragen! :?: :?: :?:
BITTE HILFE!! :(
LG
CLE
Der mit ohne Ahnung :?

Benutzeravatar
udo1toni
Beiträge: 13864
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Verständnisfrage zu MQTT und Things

Beitrag von udo1toni »

Es wäre sinnvoll, pro Gerät ein Thing anzulegen. Auch wenn das bei mqtt nicht zwingend ist, erleichtert es die Übersicht.

Deine Osram Steckdose ist also ein komplettes Thing.
Die Steckdose bietet verschiedene Informationen an, welche in unterschiedliche Channel abgebildet werden, z.B. den Schaltzustand oder die Signalqualität.
Jeder Channel Identifier muss innerhalb des Thing eindeutig sein, nicht aber über das ganze System. Wenn Du mehrere gleichartige Devices hast, konfigurierst Du für jedes Device ein Thing, welches dann innerhalb des Things identisch zu anderen Things sein kann (also z.B. jeweils ein switch Channel power für den Zustand on/off, ein number Channel watts für die gemessene Leistung, ein number Channel link für die Signalqualität usw.)
Die Channel Identifier müssen zwingend mit einem Buchstaben beginnen und dürfen Buchstaben und Zahlen beinhalten, Groß/Kleinschreibung ist zu beachten.
Das Label der Channel kann frei vergeben werden und darf zusätzlich Leerzeichen und bestimmte Sonderzeichen beinhalten.

Um herauszufinden, welches die stateTopics und commandTopics sind, abonnierst Du im Sniffer das Topic #, damit bekommst Du die komplette Kommunikation mit. Nun schaltest Du sie Steckdose manuell ein und aus und siehst im Sniffer sofort, wie das konkrete stateTopic lautet.
Das passende commandTopic lässt sich dann vom stateTopic ableiten.

Laut zigbee2mqtt Doku sollte das für Deine Steckdose so aussehen:

Code: Alles auswählen

UID: mqtt:topic:broker:osram1
label: Osram Steckdose 1
thingTypeUID: mqtt:topic
configuration: {}
channels:
  - id: ch1
    channelTypeUID: mqtt:switch
    label: Kanal 1
    description: ""
    configuration:
      commandTopic: zigbee2mqtt/0x7cb03eaa0a0abb59/set
      formatBeforePublish: '{"state": "%s"}'
      stateTopic: zigbee2mqtt/0x7cb03eaa0a0abb59
      transformationPattern: JSONPATH:$.state
Dies ist die Codeansicht des Things in openHAB3. Der thing Identifier ist also osram1, der Channel Identifier ist ch1 und das Topic ist für diese Steckdose zigbee2mqtt/0x7cb03eaa0a0abb59 (das ist der friendlyName) Der Befehl muss als JSON abgesetzt werden und der Status kommt ebenfalls als JSON rein. Wenn ich die Doku richtig gelesen habe...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Benutzeravatar
sihui
Beiträge: 1827
Registriert: 11. Apr 2018 19:03
Answers: 21

Re: Verständnisfrage zu MQTT und Things

Beitrag von sihui »

CL084 hat geschrieben: 2. Mai 2021 11:41 Ich habe ja diese Angaben vom MQTT Sniffer erhalten:
Keine Ahnung wie man an diese Daten kommt, die sind auch erst einmal uninteressant. Du brauchst nur das State und Command Topic abzulesen:
Der Status wird automatisch gepostet (sofern das Gerät korrekt gepaired wurde), das Command bekommst du wenn du die Steckdose einmal per Schalter am Gerät ein- oder ausgeschaltet hast (oder von der zigbee2mqtt Webseite, dort sind auch alle Parameter aufgelistet).
z2m1.JPG
z2m2.JPG
CL084 hat geschrieben: 2. Mai 2021 11:41 Nun bin ich dabei einen Channel anzulegen vom Typ On/Off Switch
...
Was kommt z.B. ganz oben als erstes bei "Channel Identifier" rein?
Du trägst einen Namen ein den du leicht identifizieren kannst. "Steckdose1" oder "Pimpelmuser" oder was auch immer. Du kannst auch den Wert stehen lassen der vorgegeben ist.

CL084 hat geschrieben: 2. Mai 2021 11:41 Oder was trage ich bei "MQTT Command Topic" ein? Einfach nur "command/on" oder wie ist da die Syntax. ????
...
Und was muss bei "MQTT State Topic" rein, damit der Staus ausgelesen wird.
Siehe Screenshot oben. "state" hat etwas mit "State Topic" zu tun und "Set" mit "Command Topic".
CL084 hat geschrieben: 2. Mai 2021 11:41 Und wie ist das mit dem "Is Command" Schalter unter "Show advanced" muss der aktiv sein?
Mehr als die drei Einträge "Identifier", "State Topic" und "Command Topic" ist nicht notwendig.

Um gleich der nächsten Frage vorzubeugen: wie verlinkt man den Channel mit einem Switch Item?

Code: Alles auswählen

Switch DeinSwitchName "Dein Steckdosen Label" { channel="mqtt:topic:Name-Deines-Brokers:Identifier-Des-Thing:Identifier-Des-Channel" }
Solltest du meinen Tipp mit der Zigbee2Mqtt Konfiguration "ohne Transformation" nicht gefolgt sein wird die Sache jetzt aber noch deutlich komplizierter, da du mit Transformationen arbeiten musst. Dazu kann ich aber keine Hilfestellung geben da ich keine Transformationen nutze.

Edit: Ahh, das hat Udo gepostet während ich geschrieben habe. Jetzt solltest du genug Futter für ein erfolgreiches Schalten haben :)
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openHAB3 mit Zwave, Alexa, ESPEasy, MQTT, Logitech Harmony, Philips HUE und ZigBee Hardware auf Proxmox VE.

Benutzeravatar
CL084
Beiträge: 27
Registriert: 29. Apr 2021 11:57

Re: Verständnisfrage zu MQTT und Things

Beitrag von CL084 »

Hallo Udo1Toni :)
Danke Mann, du bist meine Rettung!
Also ich habe den Code soweit es OH zugelassen hat in der Codeansicht entsprechend angepasst:
UID: mqtt:topic:Steckdose_1
label: "Steckdose #1"
thingTypeUID: mqtt:topic
configuration:
payloadNotAvailable: OFF
payloadAvailable: ON
bridgeUID: mqtt:broker:MQTT_Broker
channels:
- id: ch1
channelTypeUID: mqtt:switch
label: Kanal 1
description: null
configuration:
commandTopic: zigbee2mqtt/0x7cb03eaa0a0abb59/set
formatBeforePublish: '{"state": "%s"}'
stateTopic: zigbee2mqtt/0x7cb03eaa0a0abb59
transformationPattern: JSONPATH:$.state
Die Zeile
UID: mqtt:topic:Steckdose_1
konnte ich aber nicht nach
UID: mqtt:topic:broker:Steckdose_1
abändern, da kam die Meldung, dass sei nicht erlaubt. :(

Zum testen habe ich MQTT Explorer mit MQTT verbunden und den Befehl

Code: Alles auswählen

zigbee2mqtt/0x7cb03eaa0a0abb59/set "state": "ON"
sowie alternativ

Code: Alles auswählen

zigbee2mqtt/0x7cb03eaa0a0abb59/set {"state": "ON"}

ausgeführt (published) aber es ist nichts passiert - die Steckdose rührt sich nicht. :(

Seufz... Wieso gibbed nicht einfach ein Plug-n-Play; die Homematic Geräte haben sich doch auch alle vollautomatisch installiert?
Ich will aber nicht auch noch die Beleuchtung in HM machen, das wird viel zu teuer - die Dinger kosten verdammt viel Geld!
Bin so langsam echt am verzweifeln... :(
Der mit ohne Ahnung :?

Benutzeravatar
udo1toni
Beiträge: 13864
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Verständnisfrage zu MQTT und Things

Beitrag von udo1toni »

Wie sihui geschrieben hat, könntest Du zigbee2mqtt so konfigurieren, dass Du direkt mit den Status arbeiten kannst, ohne Umweg über JSON.

mqtt ist eigentlich total simpel, wenn man es mal verstanden hat. ;)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten