NEWS
Node Red Werte aus Objekten
-
Hallo zusammen,
ich spiele gerade mit Node Red etwas rum und komme an einem Punkt nicht weiter:
Und zwar möchte ich, wenn über Alexa der Schalter "Speicher" aktiviert wird, dass der Wert von SoC PV Anlage über "Routine Speak" ausgegeben wird. Dazu wollte ich den Wert in die Variable flow.speicher_soc schreiben.
Wenn ich das ganze mit INJECT und Zahlenwerten probiere und manuell anstoße, funktioniert es. Wenn ich das an "SOC PV Anlage" hänge, geht nicht.
Nun meine Frage(n):
1.) Wie triggere ich das CHANGE an, wenn über "SoC PV Anlage" nur der Wert geliefert wird? Vermutlich liegt es daran?!Alternative Idee:
2.) Was muss ich eingeben, um direkt auf den Wert von dem Baustein "SoC PV Anlage" zugreifen zu können? Dann könnte ich das ja eventuell in dem CHANGE Node direkt auf die FLOW Variable schreiben und triggern tu ich das ganze dann über Alexa und den "Schalter".Ich hoffe man versteht, was mein Problem ist.
Bin für jeden Hinweis dankbar!
VG
Sascha -
@sascha-holzer Na ich versteh es nur halb. Warum kannst Du den Wert nicht in einer Flow variable speichern. Wenn da halt auch andere Werte rauskommen, dann filtere halt mit einer switch Node die Nachrichten aus, die den korrekten Wert enthalten.
Die Flow-variable über ein Change Node wieder zu holen, sollte ja kein Problem sein.
Wenn das oben Dein korrektes payload Objekt ist, dann filtere halt die Nachrichten aus, deren state korrekt ist und speichere dann die payload.
-
@mickym Ok du hast recht, das Problem lag wohl nicht an dieser change node sondern beim Routine Speak von Alexa.
Der Wert kam dort an (68), aber irgendwie scheint es ein Problem mit dem Datentyp zu geben?!Wenn ich das vorher nochmal in einen String umwandle, dann hat es funktioniert.
var SoC = String(msg.payload)
msg.payload = "Der Speicher hat " +SoC+ " Prozent"
return msg;Mein Verständnis-Problem lag daran, dass ich dachte, man muss die Change Node nochmal antriggern, damit der Befehl ausgeführt wird. Bin noch sehr am Anfang mit Node Red
Aber für die Zukunft, nochmal zu Frage 2): Wie kann ich in zB einer Function direkt auf diese 5 aus dem Objekt zugreifen? Oder geht das gar nicht?
VG
Sascha -
@sascha-holzer Ich würde Dir generell raten nicht soviel mit function Nodes zu machen. Solche Dinge kann man alle mit Change Node machen. Mit function Nodes programmierst Du wieder auf herkömmliche Weise und das muss man nur, für wirklich komplexe Anforderungen - für die es keine eigene Node gibt.
Auf die Eigenschaften von Objekten greifst Du wie in Javascript auch über die Punkt oder über die Klammernotation zu.
aus https://www.w3schools.com/js/js_objects.asp
Am Besten ist einfach - du lässt Dir das Objekt in einer Debug Node ausgeben und dann kopierst Du Dir den Pfad zu einer Objekteigenschaft direkt aus dem Debugfenster:
-
@sascha-holzer sagte in Node Red Werte aus Objekten:
Aber für die Zukunft, nochmal zu Frage 2): Wie kann ich in zB einer Function direkt auf diese 5 aus dem Objekt zugreifen? Oder geht das gar nicht?
einfach per "msg.payload"
hier ein kurzer Ausschnitt als Beispiel:
if (msg.payload==msg.actuator){ //downlink queue löschen mit leerem Array msg.payload={}; }
-
@marc-berg Nur eine kleine Anmerkung zu Deinem Code- Schnipsel - ist ein leeres Objekt und kein leeres Array auf das Du die payload setzt.
-
@mickym sagte in Node Red Werte aus Objekten:
@marc-berg Nur eine kleine Anmerkung zu Deinem Code- Schnipsel - ist ein leeres Objekt und kein leeres Array auf das Du die payload setzt.
Da hast Du natürlich recht, wobei in meinem Code sonst in diesem Object noch ein Array drin steckt, deshalb der Kommentar.
-
@mickym
Danke für die Tipps, ich werde mich durchwuseln.
Habe es jetzt geschafft, die Function zu ersetzen und gleich mit den anderen Werten weiter gemachtBesten Dank!
-
@sascha-holzer Gerne Du - kannst im Übrigen auch mehrere Regel in einer Change Node zusammenfassen.
Nur mal so allgemein gesprochen.
Also so was:
kann man wahrscheinlich auch in eine Change NOde packen.
-
@mickym Da hab ich mir schon gedacht, aber ich finde es als Anfänger so tatsächlich übersichtlicher und man kann sich schnell was neues zusammenkopieren.