Seite 2 von 3
Re: MQTT send command
Verfasst: 22. Sep 2024 21:19
von udo1toni
Die Einheit sollte openHAB eigentlich nicht mit senden.
Hast Du den Channel mit einem Number:Temperature Item gekoppelt?
Re: MQTT send command
Verfasst: 23. Sep 2024 17:18
von mothabrain
Das Item ist wie folgt angelegt:
Name Schlafzimmer_Heizung_Temperatur_SOLL
Label Temperatur SOLL
Type Number
Unit °C
State Description Pattern %.0f %unit%
Profile Standard
Re: MQTT send command
Verfasst: 24. Sep 2024 13:54
von mothabrain
Hat sich erledigt. Hatte das falsche Item angelegt. Dennoch danke für die zahlreichen Tipps.
Re: MQTT send command
Verfasst: 23. Jan 2025 17:10
von renek74
Hallo,
ich bin am verzweifeln. Status bekomme ich ohne weiteres hin für eine Steckdose
MQTT Command Topic
tele/Tasmota_Zigbee_3_0/POWER
MQTT State Topic
cmnd/Tasmota_Zigbee_3_0/POWER
Incoming Value Transformations
JSONPATH:ZbReceived.0x9C59.Power
Outgoing Value Transformation
JSONPATH:ZbSend.0x9C59.Power
Leider Bekomme ich mit dem Switch im Openhab die Steckdose nicht geschaltet. Den Status zeigt er mir aber richtig an, wenn ich an der Steckdose selbst Schalte.
Wo ist mein Denkfehler?
Re: MQTT send command
Verfasst: 23. Jan 2025 17:39
von udo1toni
Ja, kein Wunder, Du hast die beiden Topics vertauscht. cmnd ist der command-Zweig der Befehle, tele ist der zyklische Status.
Kannst Du bitte mal aus der MainUI heraus auf das Thing wechseln (Administration -> Things -> das Thing), dort auf die Code-Ansicht umschalten und den gesamten Code hier (als Code markiert!) einfügen? Passworte und IDs kannst Du gerne herauslöschen, falls da etwas im Code auftaucht.
Ach so... Die outgoing Value Transformation ist hier verkehrt. JSONPATH ist ein "Oneway" Binding, es kann decodieren, aber nicht encodieren.
Stattdessen musst Du über das outgoing Value Format das gesamte zu sendende JSON Objekt zusammenbauen, so:
Code: Alles auswählen
formatBeforePublish: 'ZbSend { "Device":"0x9C59", "Endpoint":"0x03", "Send":{"Power":"%s"} }'
Wobei der Endpoint noch zu klären wäre...
Re: MQTT send command
Verfasst: 23. Jan 2025 17:50
von renek74
...sorry ich hab es hier im Forum falsch.
Code: Alles auswählen
id: SD_Infrarotbild
channelTypeUID: mqtt:switch
label: Steckdose Infrarotbild
description: ""
configuration:
commandTopic: cmnd/Tasmota_Zigbee_3_0/POWER
transformationPatternOut:
- JSONPATH:ZbSend.0x9C59.Power
stateTopic: tele/Tasmota_Zigbee_3_0/SENSOR
transformationPattern:
- JSONPATH:ZbReceived.0x9C59.Power
off: "0"
on: "1"
auf der Konsole vom Zigbee2MQTT --> 17:50:04.283 MQT: tele/Tasmota_Zigbee_3_0/SENSOR = {"ZbReceived":{"0x9C59":{"Device":"0x9C59","Name":"SD_Infrarotbild","RMSVoltage":233,"Endpoint":1,"LinkQuality":144}}}
Re: MQTT send command
Verfasst: 24. Jan 2025 18:46
von udo1toni
Also, zum einen (wie oben schon erwähnt) musst Du formatBeforeBublish verwenden, um ein gültiges JSON Objekt zu bauen. Und das commandTopic ist ziemlich sicher ebenfalls verkehrt.
Vermutlich eher so:
Code: Alles auswählen
id: SD_Infrarotbild
channelTypeUID: mqtt:switch
label: Steckdose Infrarotbild
description: ""
configuration:
commandTopic: cmnd/Tasmota_Zigbee_3_0/ZbSend
formatBeforePublish: '{ "Device":"0x9C59", "Endpoint":"0x03", "Send":{"Power":"%s"} }'
stateTopic: tele/Tasmota_Zigbee_3_0/SENSOR
transformationPattern:
- JSONPATH:$.ZbReceived.0x9C59.Power
off: "0"
on: "1"
Beachte bitte auch das $ am Anfang des JSONPATH, das muss da stehen.
Re: MQTT send command
Verfasst: 25. Jan 2025 10:04
von renek74
....leider geht das Schreiben immer noch nicht. Lesen funktioniert.
das wir auf der Konsole vom Zigbee2MQQT ausgegeben:
10:03:43.652 MQT: stat/Tasmota_Zigbee_3_0/RESULT = {"ZbSend":"Done"}
10:03:45.894 MQT: tele/Tasmota_Zigbee_3_0/SENSOR = {"ZbReceived":{"0x9C59":{"Device":"0x9C59","Name":"SD_Infrarotbild","Reachable":false}}}
wenn ich den Endpunkt auf "0x01" anpasse, dann funktionert es. Dankeschön

Re: MQTT send command
Verfasst: 25. Jan 2025 12:55
von udo1toni
Immerhin:
Code: Alles auswählen
10:03:43.652 MQT: stat/Tasmota_Zigbee_3_0/RESULT = {"ZbSend":"Done"}
Der Befehl wurde gesendet, ist in Tasmota angekommen und wurde ausgeführt.
Meine Vermutung: Der Endpoint stimmt nicht.
Die Device ID
0x9C59 muss eigentlich die richtige sein.
Du könntest die Angabe des Endpoint versuchsweise einfach weg lassen, also formatBeforePublish so anpassen:
Code: Alles auswählen
formatBeforePublish: '{ "Device":"0x9C59", "Send":{"Power":%s} }'
(Anmerkung: Ich sehe gerade, dass ich Anführungszeichen um %s habe sehen lassen. Da der übergebene Wert eine Zahl ist, sollten sie unnötig sein)
Kannst Du außerdem bitte mal im mqtt Explorer das Topic
cmnd/Tasmota_Zigbee_3_0/ZbSend inspizieren (also die Payload...), ob dort auch "Power":0 bzw. "Power":1 steht?
Re: MQTT send command
Verfasst: 25. Jan 2025 15:21
von renek74
Hallo,
also es geht und in der Console steht folgendes:
Code: Alles auswählen
15:19:39.798 MQT: stat/Tasmota_Zigbee_3_0/RESULT = {"ZbSend":"Done"}
15:19:41.093 MQT: tele/Tasmota_Zigbee_3_0/SENSOR = {"ZbReceived":{"0x9C59":{"Device":"0x9C59","Name":"SD_Infrarotbild","Power":1,"RMSCurrent":2804,"ActivePower":697,"Endpoint":1,"LinkQuality":81}}}
15:19:41.696 MQT: tele/Tasmota_Zigbee_3_0/SENSOR = {"ZbReceived":{"0x9C59":{"Device":"0x9C59","Name":"SD_Infrarotbild","Power":1,"RMSCurrent":2804,"ActivePower":697,"RMSVoltage":222,"Endpoint":1,"LinkQuality":81}}}