Seite 1 von 1

Shelly Generation 2 über Node Red bedienen

Verfasst: Di Dez 13, 2022 5:46 pm
von MarcusC
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

Re: Shelly Generation 2 über Node Red bedienen

Verfasst: Di Dez 13, 2022 9:26 pm
von gbglace
Hi Marcus

Ich kann dem irgendwie nicht wirklich folgen, wieso da noch Nodered im Spiel ist wenn das eh schon per MQTT an den Shelly gehen kann. Also warum nicht alles im TWS fertig bauen und an den Shelly-senden und dessen Status direkt in den TWS bringen?

diese vielen ID's xxxxxxxxx.xxxxx haben welche Bedeutung?

Also wenn das ein echter Tipp werden soll, dann bitte mal genauer beschreiben was da wo passiert und wofür da was in dem Code-Schnipsel gut ist.

Re: Shelly Generation 2 über Node Red bedienen

Verfasst: Di Dez 13, 2022 11:28 pm
von MarcusC
Hallo Göran,

die vielen IDs sind Bestandteil des Node Red Flows. Die erschließen sich, wenn man den Text kopiert und nach Node Red importiert

VG Marcus

Re: Shelly Generation 2 über Node Red bedienen

Verfasst: Mi Dez 14, 2022 11:58 am
von maggyver
Hallo Markus,

nun es ist sicherlich nicht der einzigste Weg in Node Red um mit den Geräten von Shelly zu kommunizieren.

Warum nicht eine fertige Node dafür benützen? Wie zum Beispiel "node-red-contrib-shelly" ...

Bild

Re: Shelly Generation 2 über Node Red bedienen

Verfasst: Mi Dez 14, 2022 9:13 pm
von MarcusC
Hallo Rene,

danke für den Hinweis. Hier mit dem Shelly Knoten:

Bild

Der Flow:

[{"id":"7a728150.0412b8","type":"mqtt in","z":"d9aafb38.150928","name":"","topic":"shellyplus1pm-xxx/Schalten","qos":"2","datatype":"auto","broker":"d457a115.b395e","x":270,"y":160,"wires":[["f3b14277.a6727"]]},{"id":"f3b14277.a6727","type":"function","z":"d9aafb38.150928","name":"","func":"let adr = msg.topic.split(/\\//);\nlet wert; \nswitch (msg.payload) {\n case true:\n case 1:\n case \"on\":\n case \"true\":\n wert = true\n break;\n case false:\n case 0:\n case \"off\":\n case \"false\":\n wert = false\n}\nnachricht = {\n hostname: adr[0],\n method: \"Switch.Set\",\n parameters : {\n id : 0,\n on : wert,\n }\n};\n\nmsg.payload = nachricht;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":600,"y":160,"wires":[["e21bda9d.279af"]]},{"id":"e21bda9d.279af","type":"shelly-gen2","z":"d9aafb38.150928","hostname":"","description":"","mode":"polling","server":"04263f2d054cc2a1","uploadretryinterval":"5000","pollinginterval":5000,"pollstatus":false,"getstatusoncommand":false,"devicetype":"Relay","outputs":1,"x":810,"y":160,"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":""},{"id":"04263f2d054cc2a1","type":"shelly-gen2-server","port":"10001","hostname":"unimatrix"}]