Shelly Generation 2 über Node Red bedienen
Verfasst: Di Dez 13, 2022 5:46 pm
Hallo,
nachdem ich länger gefummelt habe, eine Switch der 2. Generation von Shelly zu schalten, und es mir zu kompliziert war ein verschachteltes JSON Objekt im TWS zusammen zu setzen, bin ich auf Node Red ausgewichen.
Im Geräte Manager des TWS habe ich zu dem Main Level der Switch das App Level "/Schalten" angefügt.
In Node Red empfängt ein MQTT-in Knoten mit dem Topic "shellyplus1pm-id-des Gerätes/Schalten" die Nachrichten des TWS. Der anschließende Funktionsknoten wandelt den Wert "on" oder "off" in das entsprechende Objekt
"topic":"shellyplus1pm-id-des Gerätes/rpc","payload":{"id":1,"src":"user_2","method":"Switch.Set","params":{"id":0,"on":true}}, bzw. "topic":"shellyplus1pm-id-des Gerätes/rpc","payload":{"id":145,"src":"user_2","method":"Switch.Set","params":{"id":0,"on":false}}
Das Objekt wird anschließend über den MQTT-out Knoten gesendet.
Zum Empfang muß leider anscheinend für jedes MQTT Gerät eine MQTT-in Knoten mit dem Topic "shellyplus1pm-id-des Gerätes/Schalten" angelegt und mit dem Funktionsknoten verbunden werden, zum Senden reicht ein MQTT-out Knoten: Das Topic wird in den Objekt zu sehen enthalten.
Hier der Flow:
[{"id":"15ca9fe9.760d5","type":"mqtt in","z":"6af39f69.08883","name":"","topic":"shellyplus1pm-id-des Gerätes/Schalten","qos":"2","datatype":"auto","broker":"d457a115.b395e","x":150,"y":80,"wires":[["acb958b9.b9717","fdf48828.716278"]]},{"id":"fdf48828.716278","type":"function","z":"6af39f69.08883","name":"","func":"let adr = msg.topic.split(/\\//);\nlet wert; \nif (msg.payload===\"on\") {\n wert = true\n } else if (msg.payload===\"off\") {\n wert = false\n } \nnachricht = {\"id\":145, \"src\":\"user_2\", \"method\":\"Switch.Set\", \"params\":{\"id\":0,\"on\":wert}};\nmsg.topic = adr[0]+\"/rpc\";\nmsg.payload = nachricht;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":460,"y":160,"wires":[["acb958b9.b9717","2bf49aca.74f316"]]},{"id":"2bf49aca.74f316","type":"mqtt out","z":"6af39f69.08883","name":"","topic":"","qos":"","retain":"","broker":"d457a115.b395e","x":670,"y":220,"wires":[]},{"id":"d457a115.b395e","type":"mqtt-broker","name":"ZuHause","broker":"192.168.2.62","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]
Einen schönen Gruß
Marcus
nachdem ich länger gefummelt habe, eine Switch der 2. Generation von Shelly zu schalten, und es mir zu kompliziert war ein verschachteltes JSON Objekt im TWS zusammen zu setzen, bin ich auf Node Red ausgewichen.
Im Geräte Manager des TWS habe ich zu dem Main Level der Switch das App Level "/Schalten" angefügt.
In Node Red empfängt ein MQTT-in Knoten mit dem Topic "shellyplus1pm-id-des Gerätes/Schalten" die Nachrichten des TWS. Der anschließende Funktionsknoten wandelt den Wert "on" oder "off" in das entsprechende Objekt
"topic":"shellyplus1pm-id-des Gerätes/rpc","payload":{"id":1,"src":"user_2","method":"Switch.Set","params":{"id":0,"on":true}}, bzw. "topic":"shellyplus1pm-id-des Gerätes/rpc","payload":{"id":145,"src":"user_2","method":"Switch.Set","params":{"id":0,"on":false}}
Das Objekt wird anschließend über den MQTT-out Knoten gesendet.
Zum Empfang muß leider anscheinend für jedes MQTT Gerät eine MQTT-in Knoten mit dem Topic "shellyplus1pm-id-des Gerätes/Schalten" angelegt und mit dem Funktionsknoten verbunden werden, zum Senden reicht ein MQTT-out Knoten: Das Topic wird in den Objekt zu sehen enthalten.
Hier der Flow:
[{"id":"15ca9fe9.760d5","type":"mqtt in","z":"6af39f69.08883","name":"","topic":"shellyplus1pm-id-des Gerätes/Schalten","qos":"2","datatype":"auto","broker":"d457a115.b395e","x":150,"y":80,"wires":[["acb958b9.b9717","fdf48828.716278"]]},{"id":"fdf48828.716278","type":"function","z":"6af39f69.08883","name":"","func":"let adr = msg.topic.split(/\\//);\nlet wert; \nif (msg.payload===\"on\") {\n wert = true\n } else if (msg.payload===\"off\") {\n wert = false\n } \nnachricht = {\"id\":145, \"src\":\"user_2\", \"method\":\"Switch.Set\", \"params\":{\"id\":0,\"on\":wert}};\nmsg.topic = adr[0]+\"/rpc\";\nmsg.payload = nachricht;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":460,"y":160,"wires":[["acb958b9.b9717","2bf49aca.74f316"]]},{"id":"2bf49aca.74f316","type":"mqtt out","z":"6af39f69.08883","name":"","topic":"","qos":"","retain":"","broker":"d457a115.b395e","x":670,"y":220,"wires":[]},{"id":"d457a115.b395e","type":"mqtt-broker","name":"ZuHause","broker":"192.168.2.62","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]
Einen schönen Gruß
Marcus