Seite 1 von 3

Sonoff trvzb (Heizkörperthermostat) Commandtopic

Verfasst: 14. Nov 2024 22:01
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?

Re: Sonoff trvzb (Heizkörperthermostat) Commandtopic

Verfasst: 15. Nov 2024 01:40
von udo1toni
Schau doch einfach in der Doku von Tasmota nach... https://tasmota.github.io/docs/Zigbee/# ... e-commands ;)

Re: Sonoff trvzb (Heizkörperthermostat) Commandtopic

Verfasst: 16. Nov 2024 07:38
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\"}" ]

Re: Sonoff trvzb (Heizkörperthermostat) Commandtopic

Verfasst: 16. Nov 2024 13:38
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.

Re: Sonoff trvzb (Heizkörperthermostat) Commandtopic

Verfasst: 16. Nov 2024 15:26
von Harka
Moin,
eventuell hilft Dir ja dies weiter -> https://community.openhab.org/t/how-to- ... e/110544/4

Re: Sonoff trvzb (Heizkörperthermostat) Commandtopic

Verfasst: 17. Nov 2024 00:04
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

Re: Sonoff trvzb (Heizkörperthermostat) Commandtopic

Verfasst: 17. Nov 2024 08:51
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:

Re: Sonoff trvzb (Heizkörperthermostat) Commandtopic

Verfasst: 17. Nov 2024 12:37
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.

Re: Sonoff trvzb (Heizkörperthermostat) Commandtopic

Verfasst: 17. Nov 2024 14:08
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

Re: Sonoff trvzb (Heizkörperthermostat) Commandtopic

Verfasst: 17. Nov 2024 15:15
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