NEWS
Function node erstellen
-
Ich hätte da mal ein Anliegen:
da ich mich mit Java-Befehlen nicht so auskenne bzw. gar nicht, würde ich gerne ein payload aus dreien erstellen. Wert aus den drei Iobroker-Werten soll am ende dieses Format habe:{ "payload":{ "hsv": { "hue": 358, "staturation": 96, "brightness": 100 } } }
kann mir jemand dazu die drei function-nodes erstellen?
-
Ich fürchte ich verstehe Deine Frage nicht.
- Java nutzt der ioBroker nativ nicht
- Welche 3 ioBroker Werte sollen denn zu diesem JSON zusammen gebaut werden ?
- in welchem Zusammenhang soll das passieren ?
A.
-
Du musst halt anstelle der Inject-Nodes die entsprechenden iobroker in Nodes verkabeln. Ich habe es jetzt mit einer flow Variablen, anstelle einer function Node gemacht - da das dann ohne Programmcode geht. Diese Lösung hat dann den Vorteil, dass sich wenn alle Parameter voll sind - sich nur noch 1 Parameter ändern braucht und Du bekommst dann jeweils das ganze Objekt geliefert.
hier zum Importieren:
Wenn Dein Node Red Adapter nur Strings liefert, dann musst halt vorher noch in Zahlenwerte konvertieren. Ich empfehle das eh umzustellen - aber das bedeutet je nachdem was Du schon implementiert hast gehörigen Umstellungsaufwand.
Hier noch eine elegantere Möglichkeit - ohne Flow Variable - dafür bekommst Du nur vollständige Objekte zurück - erst wenn alle 3 Nodes Werte geliefert haben:
Im topic steht dann der letzte Wert, der geliefert hat. Falls Du das nicht willst - kannst natürlich in der letzten Change Node auch noch die msg.topic löschen.
-
also das Ergebnis war das richtige hat aber leider nicht funktioniert.
{"hue":230,"saturation":190,"brightness":70}
den wert bekomme ich aus einem Alexa-flow und gebe ihn weiter an den Color-converter HSV->CSS das funktioniert super. Die Lampe spuckt aber über den iobroker die werte getrennt aus und deswegen möchte ich sie zusammenführen.
-
@matthias1234 Na dann musst Du sagen warum? Vielleicht brauchst ein anderes Format? Hast Du ggf. in Zahlen konvertiert - kommt bei Dir auch das gleiche raus, wie in meinem Screenshot oder sind Deine Zahlen in Anführungszeichen? Beschreib doch mal die Quelle in der steht, was als Input erwartet wird ... usw.
Sonst kann man Dir kaum helfen, wenn das Ergebnis das ist, was Du wolltest, aber das was Du wolltest nicht funktioniert.
-
@mickym und ja meine zahlen stehen in Anführungszeichen.
-
@matthias1234 Das ist wenn man diese unselige Option in dem Node Red Adapter angehakt hat - dann bekommst Du alles als Strings raus. Wie gesagt, wenn DU den Haken rausnimmst hast Du ggf. einen ziemlichen Umstellungsaufwand in Deinen Flows.
Also einfach die Werte in Zahlen wandeln. Ich verstehe das aber schon richtig - dass Du die Werte aus den iobroker Datenpunkten wieder zusammenführen willst. Deine Alexa spukt ja ansonsten den JSON schon aus.
Um den Input aus den iobroker in Nodes in Zahlen zu konvertieren hängst Du noch folgende Change Node dazwischen:
Ausserdem wolltest Du ja die Werte als Eigenschaft des Objektes hsv. Vielleicht brauchst Du das ja nicht. Aus der Alexa-Node kommt kein Objekt hsv raus - sondern scheint einfacher JSON String zu sein (als payload). In dem Fall halt einfach in den letzten Change Nodes die Zuordnung zum hsv Objekt rausbehmen.
Ausserdem, wenn das so aus einer Alexa Node rauskommt und Du es konvertierst - warum speicherst Du das Orginal aus der Alexa Nodes nicht einfach in einer Variablen und verwendest es erst später wieder.
Oft bekommt man halt die Informationen immer noch bruchstückhaft. -
@mickym hab es heute morgen versucht und klappt jetzt genau richtig. Danke!!!