Sonoff trvzb (Heizkörperthermostat) Commandtopic

Geflasht oder ungeflasht ...

Moderatoren: Cyrelian, udo1toni

mcdandrew
Beiträge: 175
Registriert: 13. Dez 2018 17:42
Answers: 0

Sonoff trvzb (Heizkörperthermostat) Commandtopic

Beitrag von mcdandrew »

Ich habe mehrere Heizkörperthermostate von Sonoff an eine Sonoff Zigbee Bridge Pro angebunden.
Die Bridge ist mit Tasmota geflasht.
Das Auslesen der Parameterwerte funktioniert problemlos, allerdings scheitere ich beim setzen der Solltemperatur.

Code: Alles auswählen

Thing mqtt:topic:mqttbroker:zigbee_bridge "MQTT Thing: Sonoff Zigbee Bridge" (mqtt:broker:mqttbroker) @ "Haus" 
{ 
	Channels:
		//############################################### Heizkörper Badezimmer #######################################################################################################
		Type number			: badezimmer_state						[ stateTopic="zigbee_bridge/SENSOR", transformationPattern="JSONPATH:$.ZbReceived.0x0FA5.Endpoint" ] 
		Type number  		: badezimmer_zieltemperatur 			[ stateTopic="zigbee_bridge/SENSOR", transformationPattern="JSONPATH:$.ZbReceived.0x0FA5.OccupiedHeatingSetpoint" ] 
		Type number  		: badezimmer_isttemperatur 				[ stateTopic="zigbee_bridge/SENSOR", transformationPattern="JSONPATH:$.ZbReceived.0x0FA5.LocalTemperature" ]
		Type number  		: badezimmer_linkquality				[ stateTopic="zigbee_bridge/SENSOR", transformationPattern="JSONPATH:$.ZbReceived.0x0FA5.LinkQuality" ]		
}
Hat jemand einen Tipp wie in diesem Fall das CommandTopic aussehen muss?
von udo1toni » 23. Nov 2024 12:19
Gerade habe ich noch mal einen Blick in die Doku von Tasmota geworfen.

Da steht Send, nicht send. Alternativ soll auch Write gehen.
Ich hatte das aus den Augen verloren... im dritten Posting hattest Du ja ein Beispiel eines Receives Events mitgeliefert, da dort OccupiedHeatingSetpoint als Label verwendet wird, wird zigbee2tasmota das auch beim Senden erwarten.
Hattest Du schon

Code: Alles auswählen

 ZbSend {"Device":"0x80ED","Send":{"OccupiedHeatingSetpoint":30}}
und

Code: Alles auswählen

 ZbSend {"Device":"0x80ED","Write":{"OccupiedHeatingSetpoint":30}}
ausprobiert? Stimmt die Device ID? Die hier habe ich nämlich aus der JSON Antwort, aber vermutlich hast Du eh mehrere TRVZB am Start...
Gehe zur vollständigen Antwort

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

Re: Sonoff trvzb (Heizkörperthermostat) Commandtopic

Beitrag von udo1toni »

Schau doch einfach in der Doku von Tasmota nach... https://tasmota.github.io/docs/Zigbee/# ... e-commands ;)
openHAB4.3.0 stable in einem Debian-Container (bookworm) (Proxmox 8.3.1, LXC), mit openHABian eingerichtet

mcdandrew
Beiträge: 175
Registriert: 13. Dez 2018 17:42
Answers: 0

Re: Sonoff trvzb (Heizkörperthermostat) Commandtopic

Beitrag von mcdandrew »

Ich bekomme es einfach nicht hin...im MQQT Explorer sieht es folgendermaßen aus.

Code: Alles auswählen

{
  "ZbReceived": {
    "0x80ED": {
      "Device": "0x80ED",
      "Name": " Heizkörper Schlafzimmer",
      "OccupiedHeatingSetpoint": 20,
      "Endpoint": 1,
      "LinkQuality": 83
    }
  }
}
Ich habe nun folgendes probiert...

Code: Alles auswählen

Type number  		: schlafzimmer_zieltemperatur 			[ stateTopic="zigbee_bridge/SENSOR", transformationPattern="JSONPATH:$.ZbReceived.0x80ED.OccupiedHeatingSetpoint", commandTopic = "cmnd/zigbee_bridge/SENSOR/ZbSend", formatBeforePublish = "{ \"ZbReceived\",\"0x80ED\",\"OccupiedHeatingSetpoint":\"%s\"}" ]

oh73
Beiträge: 298
Registriert: 7. Mär 2021 14:49
Answers: 1

Re: Sonoff trvzb (Heizkörperthermostat) Commandtopic

Beitrag von oh73 »

Hallo,

hatte mal ein ähnliches Heizkörperventil welches ich mit tuya-mqtt angesteuert habe.

bei mir ging das so,

Code: Alles auswählen

Type number : Beok_soll_senden	"H Beok soll senden"	[ commandTopic="tuya/zx-5028/ZigBeeSmartTRV/dps/2/command"]
deshalb denke ich manchmal ist weniger besser, einfach mal so versuchen.

Code: Alles auswählen

Type number  		: schlafzimmer_zieltemperatur 	 	[ commandTopic = "zigbee_bridge/SENSOR/command"	]
ich hate auch für empfangen und senden getrennte Channels.
OH 4.0.3 auf HP 26o G1 Dm Mini Pc mit MX_Linux

Harka
Beiträge: 423
Registriert: 30. Apr 2021 13:13
Answers: 15

Re: Sonoff trvzb (Heizkörperthermostat) Commandtopic

Beitrag von Harka »

Moin,
eventuell hilft Dir ja dies weiter -> https://community.openhab.org/t/how-to- ... e/110544/4

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

Re: Sonoff trvzb (Heizkörperthermostat) Commandtopic

Beitrag von udo1toni »

Das commandTopic lautet in Deinem Fall laut Doku cmnd/zigbee_bridge/ZbSend, Das Subtopic SENSOR ist exklusiv für Sensorwerte da. Dass die ZigBee Bridge ankommende Daten ebenfalls unter dem Subtopic SENSOR veröffentlicht, ist mutmaßlich der internen Struktur der Tasmota Firmware geschuldet.
Das commandTopic erwartet die Payload als gültiges JSON, aber natürlich nicht mit ZbReceived, schließlich willst Du ja etwas versenden. Deshalb der Hinweis auf die offizielle Doku... Da das Forum den Link leider umschreibt, hier als Code:

Code: Alles auswählen

https://tasmota.github.io/docs/Zigbee/#sending-device-commands
openHAB4.3.0 stable in einem Debian-Container (bookworm) (Proxmox 8.3.1, LXC), mit openHABian eingerichtet

mcdandrew
Beiträge: 175
Registriert: 13. Dez 2018 17:42
Answers: 0

Re: Sonoff trvzb (Heizkörperthermostat) Commandtopic

Beitrag von mcdandrew »

Hallo Udo,

ich habe nun die Doku mehrmals gelesen und mir auch einige Beispiele angeschaut...ich bekomme es einfach nicht hin.

Code: Alles auswählen

commandTopic="cmnd/zigbee_bridge/ZbSend:*:JS(Device: "0x0FA5", "send": \"OccupiedHeatingSetpoint\":%s)] 
Das Commandtopic habe ich nun wie folgt umgeschrieben....doch es klappt nicht.
Könntest du nochmal drüberschauen? :roll:

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

Re: Sonoff trvzb (Heizkörperthermostat) Commandtopic

Beitrag von udo1toni »

Was machst Du denn da?
Das commandTopic heißt

Code: Alles auswählen

cmnd/zigbee_bridge/ZbSend
und zwar exakt so. Daran ändert sich auch nichts.
Zusätzlich musst Du ein gültiges JSON über formatBeforePublish erstellen.
Am einfachsten dürfte es sein, wenn Du zunächst mittels MQTT Explorer herausfindest, wie das JSON korrekt angelegt sein muss. Anschließend baust Du es in openHAB ein. Das Problem hat in diesem Fall ja nichts mit openHAB zu tun, sondern nur mit dem falschen JSON und dem falschen Topic.
Nehmen wir an, Dein gültiges JSON sieht so aus:

Code: Alles auswählen

{"Device": "0x0FA5", "send": "OccupiedHeatingSetpoint": 21} 
Dann sieht dein formatBeforePublish Eintrag so aus:

Code: Alles auswählen

formatBeforePublish : '{"Device": "0x0FA5", "send": "OccupiedHeatingSetpoint": %s}'
wobei %s dynamisch durch den gewählten Wert ersetzt wird. Im yaml darf man die einfachen Anführungszeichen verwenden, um Zeichenketten zu erstellen, welche doppelte Anführungszeichen enthalten. Alternativ kannst Du diese aber auch escapen:

Code: Alles auswählen

formatBeforePublish : "{\"Device\": \"0x0FA5\", \"send\": \"OccupiedHeatingSetpoint\": %s}"
Wichtig ist aber, dass jedes Anführungszeichen escaped wird. Alle Strings innerhalb des JSON müssen in Anführungszeichen stehen (auch die Feldnamen). reine Zahlen dürfen nicht in Anführungszeichen stehen, Boolean Werte (true/false) dürfen ebenfalls nicht in Anführungszeichen stehen.
Soll ein Wert als String übergeben werden, so muss auch der Platzhalter in Anführungszeichen stehen:

Code: Alles auswählen

formatBeforePublish : "{\"Device\": \"0x0FA5\", \"send\": \"OccupiedHeatingSetpoint\": \"%s\"}"
Das dürfte hier aber nicht notwendig sein.

Aber stelle zunächst über MQTT Explorer sicher, dass das JSON Objekt korrekt ist. der MQTT Explorer hat eine eingebaute Validierung für JSON, so dass Du von vornherein gezwungen wirst, ein gültiges JSON einzugeben.
openHAB4.3.0 stable in einem Debian-Container (bookworm) (Proxmox 8.3.1, LXC), mit openHABian eingerichtet

mcdandrew
Beiträge: 175
Registriert: 13. Dez 2018 17:42
Answers: 0

Re: Sonoff trvzb (Heizkörperthermostat) Commandtopic

Beitrag von mcdandrew »

Ich glaube jetzt habe ich es teilweise verstanden....trotzdem will es nicht gelingen.
Ich habe nun folgendes Topic

Code: Alles auswählen

commandTopic = "cmnd/zigbee_bridge/ZbSend",  formatBeforePublish = "{\"device\":\"0x0FA5\", \"send\": \"OccupiedHeatingSetpoint\": %s}"
Wenn ich in der Console der Bridge den folgenden Befehl eingebe sollte ja auch was passieren bzw. der Wert auf 30 Grad geändert werden.

Code: Alles auswählen

ZbSend {"Device":"0x0FA5","send":{"OccupiedHeatingSetpoint":30}}
funktioniert aber auch nicht. Es erscheint die Meldung
zigbee_bridge/RESULT = Unrecognized zigbee command: OccupiedHeatingSetpoint

oh73
Beiträge: 298
Registriert: 7. Mär 2021 14:49
Answers: 1

Re: Sonoff trvzb (Heizkörperthermostat) Commandtopic

Beitrag von oh73 »

interessiert mich,

hab mal die Anleitungen gelesen,

dein Befehl sieht so aus,

Code: Alles auswählen

formatBeforePublish = "{\"device\":\"0x0FA5\", \"send\": \"OccupiedHeatingSetpoint\": %s}"
müsste das nicht "Write" heißen? und bei den Beispielen war Device immer groß geschrieben! spielt das eine Rolle?

Code: Alles auswählen

formatBeforePublish = "{\"Device\":\"0x0FA5\", \"Write": \"OccupiedHeatingSetpoint\": %s}"
Edit:
hab noch bisschen weiter gelesen, das Problem scheint der " OccupiedHeatingSetpoint " zu sein.
in einem anderen Forum hab ich zB. gefunden,

Ich kann die Einstellung mit ZbSend {"Device": "0x002d", "Write": {"EF00/0267": "190"}} festlegen.
Es akzeptiert weder OccupiedHeatingSetpoint noch den Gerätenamen (set bu Zbname) und die Temperatur muss *10 eingestellt werden.

oder
:TS0601,_TZE200_b6wax7g0
EF00/0202=0201/0012,mul:100 # OccupiedHeatingSetpoint
EF00/0203=0201/0000,mul:10 # Local Temperature
gefunden hier: https://github.com/arendst/Tasmota/discussions/11106
OH 4.0.3 auf HP 26o G1 Dm Mini Pc mit MX_Linux

Antworten