NEWS
Übergabe von Werten auf andere Objekte
-
Hallo zusammen
Dies ist mein erster Post hier, bisher habe ich alles immer durchs lesen lösen können. Ich nutze Node-Red schon ein paar Jahre, aber jetzt weiß ich nicht weiter. Ich möchte gern meine Hue Leuchten per Alexa steuern. Mit den iobroker nodes klappt das auch, zumindest an und aus.
Jetzt möchte ich aber gern die "node-red-contrib-huemagic-fork" nodes verwenden. Die Anbindung an Alexa erfolgt über "node-red-contrib-amazon-echo".
Die Alexa node gibt folgendes raus:
Und die Hue node erwartet sowas wie:
Es ist bestimmt ganz simpel, aber wie bekomme ich die Werte von Alexa z.B. "bri" in die Hue node auf "brightness"? Das müsste doch mit der Change node gehen, oder? In Javascript bin ich nicht so fit, ich nehme an dass es auch mit einer function node geht..?
Ich hoffe ich habe mein Problem verständlich ausgedrückt. Vielleicht kann mir ja hier jemand auf die Sprünge helfen, ich hänge an der Stelle seit 2 Tagen fest
So habe ich mir das z.B. vorgestellt:
Viele Grüße
Raimund -
@kaaennixx na ja Du wirst sicher nicht Zeitstempel oder do was brauchen.
Wenn du nicht für jeden Wert eine eigene Regel schreiben willst, setzt Du einfach die neue Payload auf ein JSONATA Ausdruck. Der JSONATA Ausdruck schaut dann einfach wie das zukünftige Objekt aus und da mapst Du die Eigenschaften des alten Nachrichtenobjekts.
Also:
{ “brightness“ : bri, “on“ : on, …. usw. )
Ansonsten musst halt für jeden Wert eine Regel erstellen.
Zum Beispiel:
verschiebe msg.bri nach msg.payload.brightness usw..
-
Ne, ich brauche die meisten Werte nicht. Ich würde die Leuchte gern per Alexa ein/aus schalten, dimmen und wenn es ohne zu großen Aufwand geht noch die Farbe ändern, also "Alexa, schalt Lampe auf rot". Der Alexa Node kann das, nur heißen die Werte dann nicht so wie der Hue Node das erwartet. Mit JSONATA habe ich mich noch gar nicht beschäftigt, bisher konnte ich alles "auf einfachem Wege" lösen. Aber dieses mal wollte selbst das verschieben eines einzelnen Wertes nicht so richtig funktionieren, mit den Arrays, Objekten usw, irgendwas war da wohl noch verkehrt. Ich versuche es nochmal.
Und sonst werde ich mich mal mit JSONATA beschäftigen, da gibts sicherlich auch was zu lesen
-
@kaaennixx na ich denke, du musst auch brigtnesslevel, aud percentage usw. Mappen.
Ich zeige Dir wie einfach das ist, wenn du mir mal die Werte der debug Ausgabe in code Tags hier in den thread kopierst.
Oder ich versuche es einfach mal an einem kurzen Beispiel
Hier zum Import - da siehst Du die verschiedenen Möglichkeiten - hängt davon ab, ob nicht benötigte Eigenschaften des Nachrichtenobjektes ignoriert werden oder ob sie gelöscht werden müssen. Ich hab sie mal gelöscht, deshalb habe ich auch die Version mit der Function Node mit aufgenommen, um in einem Rutsch das Nachrichtenobjekt neu zu erstellen.
Hier der Flow zum Import:
Mit Einzelregeln und verschieben sieht es also so aus:
mit JSONATA so und ggf. noch das Löschen:
-
Die Ausgabe der Alexa Node bei "Alexa, Lampe Flur an"
ergibt
{"on":true,"bri":254,"percentage":100,"hue":0,"sat":254,"xy":[0.6484272236872118,0.33085610147277794],"ct":199,"rgb":[254,0,0],"colormode":"ct","meta":{"insert":{"by":"alexa","details":{"ip":"::ffff:192.168.13.23","date":"2023-01-27T10:02:21.963Z"}},"input":{"on":true},"changes":{}},"payload":"on","deviceid":"6930198e513a78","topic":"","_msgid":"b842c3b7f970ddbd","_event":"node:e423462.934d0b8"}
Ich weiß nicht wie ich da Zeilenumbrüche rein machen kann, hoffe das ist ok so.
Die Ausgabe der Hue Node, wo ich denke dass das auch am Eingang erwartet wird:
ergibt
{"payload":{"on":false,"brightness":100,"brightnessLevel":254,"reachable":true,"connectionStatus":"connected","updated":"2023-01-27T10:05:38+00:00","rgb":[255,251,226],"hex":"fffbe2","xyColor":{"x":0.3437,"y":0.3551},"color":"beige","colorTemp":false,"colorTempName":"unknown"},"info":{"id":"32ef8695-ce93-4ba1-a4f5-0a4f0aa580b3","idV1":"/lights/8","uniqueId":"7aebcd0c-870b-4c4b-bf03-e7c2bc35e671-32ef8695-ce93-4ba1-a4f5-0a4f0aa580b3","deviceId":"7aebcd0c-870b-4c4b-bf03-e7c2bc35e671","name":"Hue Play Links","type":"light","softwareVersion":"1.101.2","model":{"id":"440400982841","manufacturer":"Signify Netherlands B.V.","name":"Hue Play","type":"hue_play","certified":true,"friendsOfHue":true,"colorGamut":{"red":{"x":0.6915,"y":0.3083},"green":{"x":0.17,"y":0.7},"blue":{"x":0.1532,"y":0.0475}},"colorGamutType":"C"}},"updated":{},"lastState":{"payload":{"on":false,"brightness":100,"brightnessLevel":254,"reachable":true,"connectionStatus":"connected","updated":"2023-01-27T10:05:38+00:00","rgb":[255,251,226],"hex":"fffbe2","xyColor":{"x":0.3437,"y":0.3551},"color":"beige","colorTemp":false,"colorTempName":"unknown"},"info":{"id":"32ef8695-ce93-4ba1-a4f5-0a4f0aa580b3","idV1":"/lights/8","uniqueId":"7aebcd0c-870b-4c4b-bf03-e7c2bc35e671-32ef8695-ce93-4ba1-a4f5-0a4f0aa580b3","deviceId":"7aebcd0c-870b-4c4b-bf03-e7c2bc35e671","name":"Hue Play Links","type":"light","softwareVersion":"1.101.2","model":{"id":"440400982841","manufacturer":"Signify Netherlands B.V.","name":"Hue Play","type":"hue_play","certified":true,"friendsOfHue":true,"colorGamut":{"red":{"x":0.6915,"y":0.3083},"green":{"x":0.17,"y":0.7},"blue":{"x":0.1532,"y":0.0475}},"colorGamutType":"C"}}},"command":{"_msgid":"4face97c259c5090","payload":1674813945377,"topic":""},"_msgid":"539e58a8378a1ffa"}
Da ist natürlich viel drin was ich nicht benötige.
Die Ausgaben meintest du doch, oder?
Vielen Dank für deine Mühen mir zu helfen
-
Oh, grad erst gesehen dass du noch was schrieben hattest, schaue ich mir sofort an!
-
@kaaennixx ich hab dir inzwischen einen Flow zum Import gepostet. Der sollte eigentlich alles beantworten
Ein Trick den Wert der debug Ausgabe hier in code Tags zu stellen, einfach im debug Fenster auf Wert kopieren, dann ist der hier in der Zwischenablage und dann einfach in code Tags hier rein.
-
Schau ich mir gleich an, muss eben zur Kita
Danke für die Hilfe! -
Falls du bei den Eunzelregeln mit dem Verschieben ein Problem hast, weil die Alexanode als payload einen skalieren String „on“ enthält, füge entweder als erste Regel noch ein Löschen der payload ein oder setze die payload auf ein leeres Objekt, also {}.
-
Das mit dem kopieren hatte ich genau so genacht, da kommt dann aber immer nur die eine Zeile raus. Das Problem sitzt bestimmt vor dem Bildschirm. Ich hab das jetzt mal per Hand verschoben, vielleicht hilft das ja. Ein Problem habe ich nämlich noch:
Das mit dem an/aus/dimmen klappt wunderbar mit dem JSONATA. Dafür schonmal danke.
Jetzt versuche ich die RGB Werte noch zu verschieben, und schon bin ich mit meinem Latein mal wieder am Ende. Die Node meldet einen Fehler wenn ich es so versuche:Irgendwo bin ich da noch falsch, weil die RGB Werte ja in einem anderen objekt sind oder so? Ich habe keine Ahnung was ein Objekt überhaupt ist, aber ich vermute es hat irgendwas damit zu tun. Also einfach mit einem Punkt (z.B. msg.payload.rgb.0) eine "Ebene höher" springen geht scheinbar nicht, oder?
Wenn du mir da nochmal helfen könntest, das wär prima.
Ausgabe Alexa: object on: true bri: 254 percentage: 100 hue: 0 sat: 254 xy: array[2] 0: 0.6484272236872118 1: 0.33085610147277794 ct: 199 rgb: array[3] 0: 254 1: 0 2: 0 colormode: "ct" meta: object insert: object by: "alexa" details: object ip: "::ffff:192.168.13.23" user_agent: undefined date: "2023-01-27T11:15:16.064Z" input: object on: true bri: 254 changes: object bri: 128 percentage: 50 payload: "on" deviceid: "6930198e513a78" topic: "" _msgid: "7039f12ad30db06e" _event: "node:e423462.934d0b8" Ausgabe Hue: object payload: object on: false brightness: 100 brightnessLevel: 254 reachable: true connectionStatus: "connected" updated: "2023-01-27T11:20:26+00:00" rgb: array[3] 0: 255 1: 251 2: 226 hex: "fffbe2" xyColor: object x: 0.3437 y: 0.3551 color: "beige" colorTemp: false colorTempName: "unknown" info: object id: "32ef8695-ce93-4ba1-a4f5-0a4f0aa580b3" idV1: "/lights/8" uniqueId: "7aebcd0c-870b-4c4b-bf03-e7c2bc35e671-32ef8695-ce93-4ba1-a4f5-0a4f0aa580b3" deviceId: "7aebcd0c-870b-4c4b-bf03-e7c2bc35e671" name: "Hue Play Links" type: "light" softwareVersion: "1.101.2" model: object id: "440400982841" manufacturer: "Signify Netherlands B.V." name: "Hue Play" type: "hue_play" certified: true friendsOfHue: true colorGamut: object red: object x: 0.6915 y: 0.3083 green: object x: 0.17 y: 0.7 blue: object x: 0.1532 y: 0.0475 colorGamutType: "C" updated: object empty lastState: object payload: object on: false brightness: 100 brightnessLevel: 254 reachable: true connectionStatus: "connected" updated: "2023-01-27T11:20:26+00:00" rgb: array[3] 0: 255 1: 251 2: 226 hex: "fffbe2" xyColor: object x: 0.3437 y: 0.3551 color: "beige" colorTemp: false colorTempName: "unknown" info: object id: "32ef8695-ce93-4ba1-a4f5-0a4f0aa580b3" idV1: "/lights/8" uniqueId: "7aebcd0c-870b-4c4b-bf03-e7c2bc35e671-32ef8695-ce93-4ba1-a4f5-0a4f0aa580b3" deviceId: "7aebcd0c-870b-4c4b-bf03-e7c2bc35e671" name: "Hue Play Links" type: "light" softwareVersion: "1.101.2" model: object id: "440400982841" manufacturer: "Signify Netherlands B.V." name: "Hue Play" type: "hue_play" certified: true friendsOfHue: true colorGamut: object red: object x: 0.6915 y: 0.3083 green: object x: 0.17 y: 0.7 blue: object x: 0.1532 y: 0.0475 colorGamutType: "C" command: object _msgid: "91e8602d8b2607a2" payload: 1674818620786 topic: "" _msgid: "090b9c1bb92d2601" code_text
-
@kaaennixx das ist ein Array und kein Objekt. Ein Objekt wird von eckigen Klammern umschlossen und die Werte einfach durch Komma getrennt.
Wahrscheinlich wäre das nutzen der Einzelregeln für Dich einfacher gewesen.
Also: setze payload.rgb auf
[255,0,0]
Einfacher wäre aber gewesen, wenn du einfacher payload.rgb auf rgb gesetzt hättest, auch in JSONATA
Das Verständnis von Objekten, Arrays und Datentypen ist essentiell.
Hier mal eine kleine Übersicht.
https://forum.iobroker.net/post/852974
Hier die Regeln, wie Arrays und Objekte definiert sind: https://forum.iobroker.net/post/905403
-
Leider bringt mir der von dir eingestellte Flow mit den Einzelregeln einen Fehler, wenn ich ihn durch Alexa getriggert habe, ohne das ich sonst was daran geändert habe.
Nur zum Verständniss:Wenn ich die einzelnen Werten per JSONATA verschiebe, wie kann ich denn dann im Objektbaum (so nenn ich es mal, also die Debug Ausgabe) weiter nach oben springen? Also z.B.
Ausgabe Hue: object payload: object on: false brightness: 100 brightnessLevel: 254 reachable: true connectionStatus: "connected" updated: "2023-01-27T11:20:26+00:00" rgb: array[3] 0: 255 1: 251 2: 226
da auf den RGB Wert? Weil mit payload.rgb gehts ja an der Stelle nicht, oder?
Danke, das lese ich mir gern mal durch.
EDIT:
Hier nochmal der Fehler mit ausgeklappten Feldern
-
@kaaennixx das hatte ich doch geschrieben. Füge als erste Regel eine lösche payload ein und dann probiere das nochmal. Dann klappt das mit den verschieberegeln.
https://forum.iobroker.net/post/936010
Das Verständnis von Objekten und Arrays ist wirklich sehr wichtig, wie du vielleicht an dem verlinkten Thread siehst.
-
Das klappt, sorry für meine Blödheit. Irgendwie habe ich das übersehen. Und jetzt versuche ich noch die RGB Werte mit zu verschieben, wenn das funktioniert hab ich alles was ich brauche
Die anderen Werte sind zunächst nicht von Bedeutung für mein Vorhaben.
Bist du Programmierer, oder hast du dir das alles selbst beigebracht? Ich bin ja Elektriker, aber sowas wie das hier gab es früher in der Schule bei uns noch nicht...
-
@kaaennixx na das meiste hab ich mir selbst beigebracht, obwohl ich 1989 eine Umschulung zum Programmier gemacht hatte. Das war aber COBOL, C und Basic auf Maschinen, die gibts heute nicht mehr. Aber das hier, habe ich mir alles selbst beigebracht. NodeRed gibts erst seit 2016 für die breite Öffentlichkeit:
https://de.wikipedia.org/wiki/Node-REDUnd wie gesagt schau dir mal in Ruhe den anderen thread an, da machen wir das auch alles Schritt für Schritt
-
Das werde ich mir auf jeden Fall anschauen. Ich steuere über Alexa in Node-Red auch meine Homematic Rollladen, da gibts auch noch Dinge die mich stören. Ich wandle da die "percentage" für die Helligkeit in % Behanghöhe, das funktioniert erstmal. Aber das ist ein ganz anderes Thema, darum kümmere ich mich wenn die Lampen laufen.
Das mit den Farben, also RGB verschieben klappt jetzt auch, er macht alle bunten Farben mit, nur wieder weiß wird die Lampe nicht. Mal schauen was im Debug steht wenn ich bei Alexa weiß bestelle.
Erstmal vielen Dank für deine Hilfe, da hast mir sehr geholfen.
EDIT:
Noch der Vollständigkeit halber, weiß scheint Alexa nicht zu verstehen. Wenn man "hell gelb" bestellt, wird es so gut wie weiß.[254,254,223]
-
@kaaennixx nun wie hue die rgb Werte umsetzt oder wie Alexa Farben definiert- das kann ich dir nicht sagen und das hängt wohl von der Programmierung in der Hardware ab
In Color findest ja auch den Farbnamen, sodass du auch selbst RGB Werte definieren könntest. Bei manchen Lampen gabs Aufhebung modus der zwischen Farbe und Weiß umschaltete, aber da bin ich nicht der richtige Ansprechpartner, da ich keine Alexa und auch keine farbigen Lampen habe. Da gibts sicher im Forum Leute mit viel mehr Erfahrung.
-
Ach, fürs erste ist alles in Ordnung so. Bisher konnte ich nur An und Aus, da ist so ein bisschen Farbe schon ganz nett. Mal schauen wie oft man es im Alltag wirklich braucht...