MQTT send command

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

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

Re: MQTT send command

Beitrag von udo1toni »

Die Einheit sollte openHAB eigentlich nicht mit senden.
Hast Du den Channel mit einem Number:Temperature Item gekoppelt?
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

mothabrain
Beiträge: 17
Registriert: 19. Dez 2022 17:56
Answers: 0

Re: MQTT send command

Beitrag 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
OPENHAB 4.2 per Docker Container (x64)

mothabrain
Beiträge: 17
Registriert: 19. Dez 2022 17:56
Answers: 0

Re: MQTT send command

Beitrag von mothabrain »

Hat sich erledigt. Hatte das falsche Item angelegt. Dennoch danke für die zahlreichen Tipps.
OPENHAB 4.2 per Docker Container (x64)

renek74
Beiträge: 66
Registriert: 26. Nov 2020 08:00
Answers: 0

Re: MQTT send command

Beitrag 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?

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

Re: MQTT send command

Beitrag 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...
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

renek74
Beiträge: 66
Registriert: 26. Nov 2020 08:00
Answers: 0

Re: MQTT send command

Beitrag 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}}}

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

Re: MQTT send command

Beitrag 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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

renek74
Beiträge: 66
Registriert: 26. Nov 2020 08:00
Answers: 0

Re: MQTT send command

Beitrag 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 :D

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

Re: MQTT send command

Beitrag 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?
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

renek74
Beiträge: 66
Registriert: 26. Nov 2020 08:00
Answers: 0

Re: MQTT send command

Beitrag 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}}}

Antworten