NEWS
[gelöst]Shelly RGBW Steuern
-
Hallo zusammen,
bin auch ein Neuling das das Node-Red angeht. Es ist schon einfach gemacht, wie wenn man alles Programmieren und einstellen muss.
Mit Sonoff und Shelly bin ich jetzt auch etwas vertraut. Die Produkte sind für mich zum ein und ausschalten, das kleinste Problem.
Mein Vorhaben ist, das ich den RGB über das Dashboard Steuern kann.
Bevor ich soweit bin, erst mal zum ersten Problem. Das ich mit den Daten an die jeweiligen Regler (slider) was anfangen kann, müssen die aufgeteilt werden, der switch wäre hier passend. Nur sieht mein Payload in erster Linie so aus: payload: ```
"{"ison":true,"mode":"color","red":254,"green":158,"blue":91,"white":0,"gain":4,"effect":0,"power":0.46,"overpower":false}"
Wie splitte ich das ganze am besten, und lass es ggf über den Switch laufen, das ich an den jeweiligen Ausgängen red:"Wert" erhalten. Habe ich den Wert, kann dies dann zum Regler(slider)der MQTT sieht wie folgt so aus:
Topic: shellies/shellyrgbw2/color/#Ich hoffe das das ganze ohne funktion funktioniert!
-
Das geht mit dem split-node ganz einfach
[ { "id": "d150e349.655888", "type": "tab", "label": "Flow 2", "disabled": false, "info": "" }, { "id": "42661984.c38e", "type": "inject", "z": "d150e349.655888", "name": "", "topic": "Test", "payload": "{\"ison\":true,\"mode\":\"color\",\"red\":254,\"green\":158,\"blue\":91,\"white\":0,\"gain\":4,\"effect\":0,\"power\":0.46,\"overpower\":false}", "payloadType": "json", "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "x": 140, "y": 290, "wires": [ [ "cdd4ea6b.baf28" ] ] }, { "id": "cdd4ea6b.baf28", "type": "split", "z": "d150e349.655888", "name": "split", "splt": ",", "spltType": "str", "arraySplt": 1, "arraySpltType": "len", "stream": false, "addname": "", "x": 290, "y": 290, "wires": [ [ "c52cc5d2.daa888" ] ] }, { "id": "cc60b5a2.c03e18", "type": "debug", "z": "d150e349.655888", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": true, "complete": "payload", "targetType": "msg", "x": 810, "y": 210, "wires": [] }, { "id": "c52cc5d2.daa888", "type": "switch", "z": "d150e349.655888", "name": "", "property": "parts.key", "propertyType": "msg", "rules": [ { "t": "eq", "v": "ison", "vt": "str" }, { "t": "eq", "v": "mode", "vt": "str" }, { "t": "eq", "v": "red", "vt": "str" }, { "t": "eq", "v": "green", "vt": "str" }, { "t": "eq", "v": "blue", "vt": "str" }, { "t": "eq", "v": "white", "vt": "str" }, { "t": "eq", "v": "gain", "vt": "str" }, { "t": "eq", "v": "effect", "vt": "str" }, { "t": "eq", "v": "power", "vt": "str" }, { "t": "eq", "v": "overpower", "vt": "str" } ], "checkall": "true", "repair": false, "outputs": 10, "x": 440, "y": 290, "wires": [ [ "cc60b5a2.c03e18" ], [], [ "568e8e7b.5ff5f" ], [ "b5cd3fc1.b799d8" ], [ "1a93cdef.863c62" ], [], [], [], [ "c4ee3d96.69264" ], [] ] }, { "id": "568e8e7b.5ff5f", "type": "debug", "z": "d150e349.655888", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": true, "complete": "payload", "targetType": "msg", "x": 630, "y": 250, "wires": [] }, { "id": "b5cd3fc1.b799d8", "type": "debug", "z": "d150e349.655888", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": true, "complete": "payload", "targetType": "msg", "x": 690, "y": 290, "wires": [] }, { "id": "1a93cdef.863c62", "type": "debug", "z": "d150e349.655888", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": true, "complete": "payload", "targetType": "msg", "x": 740, "y": 330, "wires": [] }, { "id": "c4ee3d96.69264", "type": "debug", "z": "d150e349.655888", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": true, "complete": "payload", "targetType": "msg", "x": 780, "y": 370, "wires": [] } ]
-
der Split ist durch das Bild mit der Trennung "," verständlich, wo trage ich den code ein? muss ich den code eintragen oder kann ich das einfach im switch definieren? und wie?
-
Wenn Du einfach den JSON Node nimmst wird das direkt in Java Objekte konvertiert und Du kannst direkt darauf zugreifen.
Dieses Objekt schickst Du komplett an jeden Regler und modifizierst dann nur den Wert, den Du möchtest - also msg.payload.red - anschliessend nimmst wieder den JSON Node - der konvertiert Dir das wieder in den String und schreibst ihn direkt wieder zurück. -
Wenn ich jetzt her gehe, wie von t-master beschrieben, bekomme ich nach dem Split das Angezeigt: ```
24.3.2020, 19:14:30node: 6ac80576.7ef93cshellies/shellyrgbw2-6EAF7E/color/0/status : msg : Object object topic: "shellies/shellyrgbw2/color/0/status" payload: ""gain":17" qos: 1 retain: false _topic: "shellies/shellyrgbw2/color/0/status" parts: object _msgid: "b2b14ee3.3250d"
Dann ist die Frage wie ich den Switch Einstellung vornehme?
Ich bekomme nur mit != die ganze Anfrage hier raus.
Wenn ich das von mickym mache, bekomme ich die Antwort nach den json:
Object
object topic: "shellies/shellyrgbw2/color/0/status" payload: object ison: true mode: "color" red: 255 green: 107 blue: 74 white: 0 gain: 17 effect: 0 power: 3.42 overpower: false
`
Dann ist die Frage wie ich das im switch Eintrage, auch wie Beschrieben, bekomme ich mehrere oder keine Werte nach dem Switch
-
@Croix-aigle Du brauchst die Nachricht nicht aufteilen und switchen - sondern hängst vor jeden Regel einen Change Node, indem Du den Wert selektierst den Du brauchst.
Ist zwar jetzt bei mir ein anderer Flow - aber Du siehst wie es geht.
Nach dem Json Node - einen Change Node, wo Du einfach msg.payload nach msg.payload.red festlegst und diesen Wert kannst direkt zu Deinem Regler schicken.
Für Deinen grünen Regler - klemmst Du nach dem Json Node - einen Change-Node mit msg.payload nach msg.payload.green an usw. -
@Croix-aigle said in Shelly RGBW Steuern:
"{"ison":true,"mode":"color","red":254,"green":158,"blue":91,"white":0,"gain":4,"effect":0,"power":0.46,"overpower":false}"
Ich habe mal den ganzen Flow für Dich implementiert - musst nur noch verfeinern und bei Dir importieren - also in Zwischenablage und Flow importieren. Statt der Inject-Node - nimmst natürlich Deinen mqtt-in Node und den ersten Json Node um es in eine Java-Objekt zu wandeln, wie ich Dir eben vorgeschlagen habe.
und wie versprochen ohne Funktion - braucht man wirklich nicht oft - auch wenn manche das Gegenteil behaupten
[ { "id": "3830bf94.4817e", "type": "inject", "z": "6e170384.60c96c", "name": "Objekt", "topic": "", "payload": "{\"ison\":true,\"mode\":\"color\",\"red\":254,\"green\":158,\"blue\":91,\"white\":0,\"gain\":4,\"effect\":0,\"power\":0.46,\"overpower\":false}", "payloadType": "json", "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "x": 190, "y": 3420, "wires": [ [ "8b0a970c.1b38d8", "e02931c5.85468", "6a06c3af.5aa0fc" ] ] }, { "id": "8b0a970c.1b38d8", "type": "change", "z": "6e170384.60c96c", "name": "rot", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "payload.red", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 410, "y": 3340, "wires": [ [ "f0321cab.0adaa" ] ] }, { "id": "e02931c5.85468", "type": "change", "z": "6e170384.60c96c", "name": "grün", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "payload.green", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 410, "y": 3480, "wires": [ [ "17d1ea55.024256" ] ] }, { "id": "f0321cab.0adaa", "type": "ui_slider", "z": "6e170384.60c96c", "name": "Roter Regler", "label": "Rot", "tooltip": "", "group": "b38597db.715cf8", "order": 0, "width": 0, "height": 0, "passthru": true, "outs": "all", "topic": "", "min": 0, "max": "255", "step": 1, "x": 610, "y": 3340, "wires": [ [ "c9c8c934.43d1c8" ] ] }, { "id": "17d1ea55.024256", "type": "ui_slider", "z": "6e170384.60c96c", "name": "Grüner Regler", "label": "Grün", "tooltip": "", "group": "b38597db.715cf8", "order": 0, "width": 0, "height": 0, "passthru": true, "outs": "all", "topic": "", "min": 0, "max": "255", "step": 1, "x": 620, "y": 3480, "wires": [ [ "785a8552.a5585c" ] ] }, { "id": "6a06c3af.5aa0fc", "type": "change", "z": "6e170384.60c96c", "name": "", "rules": [ { "t": "set", "p": "fobject", "pt": "flow", "to": "payload", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 430, "y": 3620, "wires": [ [] ] }, { "id": "c9c8c934.43d1c8", "type": "change", "z": "6e170384.60c96c", "name": "", "rules": [ { "t": "set", "p": "fobject.red", "pt": "flow", "to": "payload", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 840, "y": 3340, "wires": [ [ "aa46c4cf.934fa8" ] ] }, { "id": "785a8552.a5585c", "type": "change", "z": "6e170384.60c96c", "name": "", "rules": [ { "t": "set", "p": "fobject.green", "pt": "flow", "to": "payload", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 850, "y": 3480, "wires": [ [ "aa46c4cf.934fa8" ] ] }, { "id": "aa46c4cf.934fa8", "type": "change", "z": "6e170384.60c96c", "name": "", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "fobject", "tot": "flow" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 1100, "y": 3400, "wires": [ [ "3cd610b9.19a05" ] ] }, { "id": "24c16160.799c8e", "type": "debug", "z": "6e170384.60c96c", "name": "Json String", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "x": 1250, "y": 3540, "wires": [] }, { "id": "51f0fe94.f0705", "type": "json", "z": "6e170384.60c96c", "name": "", "property": "payload", "action": "", "pretty": false, "x": 1390, "y": 3460, "wires": [ [ "24c16160.799c8e" ] ] }, { "id": "3cd610b9.19a05", "type": "trigger", "z": "6e170384.60c96c", "op1": "", "op2": "", "op1type": "nul", "op2type": "payl", "duration": "1", "extend": true, "units": "s", "reset": "", "bytopic": "all", "name": "", "x": 1290, "y": 3400, "wires": [ [ "51f0fe94.f0705", "f3af5049.4cc4b" ] ] }, { "id": "f3af5049.4cc4b", "type": "debug", "z": "6e170384.60c96c", "name": "Objekt", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "x": 1520, "y": 3380, "wires": [] }, { "id": "b38597db.715cf8", "type": "ui_group", "z": "", "name": "Default", "tab": "dc25fe35.866f", "disp": true, "width": "6", "collapse": false }, { "id": "dc25fe35.866f", "type": "ui_tab", "z": "", "name": "Test", "icon": "dashboard", "disabled": false, "hidden": false } ]
Das ganze sieht dann so aus:
Ganz easy.
-
Gelöscht.
-
Vielen Dank für die Hilfe, jetzt hab ich es sogar komplett Fertig, wie man auf dem Bild sieht.
!
Das ich den code über Import (Zwischenablage) eintragen muss und dann einfügen, war mir bis hier noch nicht klar.
Hatte dann noch ein kleines Problem mit dem MQTT nach dem json. Nach dem ich dann den passenden Topic "shellies/shellyrgbw2/color/0/set" eingegeben habe, Funktioniert jetzt alles wie es soll.
ich habe jetzt noch mal von @t-master sein code eingefügt, das mit dem switch will nicht so funktionieren.
Was mir noch einfällt:
Was brauche ich für eine Node, das ich im Dashboard das sehe:
0 = off
1 = Meteor Shower red
2 = Gradual Change
3 = Flash -
@Croix-aigle Freut mich - Ja über die Zwischenablage Flows zu importieren ist echt genial - dieses Node-Red.
Ich liebe es - da man viel leichter sieht was passiert und in der Regel auch ohne Programmierung ausgeht.Das mit dem Dashboard - da darfst Du nicht zu viele Ansprüche stellen, aber ich kann Dir ein paar Tipps geben, wie ich das gemacht habe. Für mich war erst mal die Funktionalität wichtig und das ich schalten kann, was ich will - jetzt beschäftige ich mich mit vis - benutzte aber Node-Red weiterhin als meine Logikmaschine.
Dann noch etwas grundsätzliches - was ich gestern wieder gelöscht habe. Aber ein Switch nimmst Du nur wenn Du bei einem Wert unterschiedlich behandeln möchtest. Mit einem Split Objekte auseinanderzureißen ist schade und bringt in meiner Augen nur Nachteile.
Deine letzte Frage habe ich aber nicht verstanden -
Was brauche ich für eine Node, das ich im Dashboard das sehe:
0 = off
1 = Meteor Shower red
2 = Gradual Change
3 = Flashsind das Zustände, Icons oder wie soll was aussehen?
-
@Croix-aigle Falls das eine Werteliste für Deinen Effekt ist, die Du im Dashboard als Auswahl haben möchtest, dann nimmst Du einen "dropdown" node - anstelle Deines sliders. Als Input zeigt er Dir dann auch immer die aktuelle Einstellung an. Value ist dann 0,1,2,3 und label ist dann der zugehörige Text
-
ja, genau. Der dropdown ist der passende, jetzt bin ich mit dem RGB zufrieden. Hab das was ich machen wollte. Jetzt kann ich weiter basteln und erweitern. Meine nächste Frage mache ich in einen neuen Beitrag auf.
-
@Croix-aigle
Schön das es jetzt so geht wie du möchtest. Man lernt auch immer dazu wenn man sich damit beschäftigt. Die Vorgehensweise von @mickym kannte ich so auch noch nicht.Setze die Frage doch bitte als gelöst (im ersten Post rechts auf die 3 Punkte klicken und dann Edit)