NEWS
Msg.payload werte extrahieren
-
Hallo,
folgendes Problem:
Ich habe 2 Sensoren DSB1820 am Raspi hängen, ich bekommen über das "DS18B20 Node" folgende Daten übermittelt:
12.3.2018, 20:34:11node: 7d1736a7.4602f8 msg.payload : array[2] array[2] 0: object family: "28" id: "FF58F6011502" dir: "w1_bus_master1" file: "28-021501f658ff" temp: 22.5 1: object family: "28" id: "FF5701031503" dir: "w1_bus_master1" file: "28-0315030157ff" temp: 22.562
Ich möchte die beiden Temperaturwerte extrahieren um diese an einer Anzeige auf der Weboberfläche zu zeigen.
Habe leider keine Ahnung von Javascript denke aber das es nicht schwierig sein kann, das zu bewerkstelligen.
Meine Recherchen zeigten das entweder das Function Node oder das Split Node an mein Ziel führen könnten.
Kann mir hier jemand helfen?
-
Ich möchte die beiden Temperaturwerte extrahieren um diese an einer Anzeige auf der Weboberfläche zu zeigen. `
Ist absolut kein Problem. Die Werte bzw. die Variable läßt sich kopieren und an das gauge-Node übergeben. Du gehst auf >_ und kopierst dir die Variable (Path copied), z.B. payload[0]. Setzt Du noch ein msg. davor, dann kannst Du den Inhalt einer beliebigen Variablen zuordnen und weiterverarbeiten. Das machst Du am besten in einem function-Node.
-
Hey Garf, danke für die rasche Antwort,
leider hab ichs nicht zustande gebracht.
Ich habe im Debug Fenster die 1. und 2. Temp. kopiert:
payload[0].temp
payload[1].temp
waren die Daten,
hab dann das im Function Node eingefügt und 2 Ausgänge gemacht:
hab diese dann jeweils an eine Gauge verbunden jedoch kamen keine Werte an und im Debug Fenster
kam auch wieder nicht das gewünschte an:
Wo ist mein Denkfehler?
-
Wo ist mein Denkfehler? `
Schon nicht schlecht für den Anfang. Ich würde noch zwei Kleinigkeiten ändern. Ob man es noch vereinfachen könnte, dass schauen wir dann später mal.Du brauchst zwei Function-Nodes mit je einem Ausgang und folgendem Inhalt:
msg.payload=msg.payload[0].temp;
global.set("temp1",msg.payload[0]); //schreibt den Wert in eine globale Variable
return msg;
Function-Node 2:
msg.payload=msg.payload[0].temp;
global.set("temp2",msg.payload[1]);
return msg;
Das Setzen der globalen Variablen kannst Du natürlich auch weglassen. Ich möchte damit nur zeigen, dass Du die Messwerte als globale Variable in allen Flows und Nodes von Node-Red zur Verfügung stellen kannst. Den Wert der globalen Variablen kannst Du dir im contextbrowser ansehen.
Die Function-Nodes werden mit dem rpi-ds Node und dem jeweiligen gauge-Node verbunden. Zur Kontrolle schließt Du dann noch ein debug-Node an. Bei Fragen, fragen.
-
ich habe gestern Nacht noch sehr lange rumprobiert und bin dann auf diese Lösung gekommen:
Mittels 2 "Change Nodes" konnte ich die Werte separieren:
Habe nun deine Lösung ausprobiert und sie funktioniert auch prima,
Wie könnte ich die Globale Variable woanders wieder aufrufen?
Ich würde dann quasi keine direkte Verbindung mit den Nodes benötigen sonder nur die Variable einbauen?
-
Mittels 2 "Change Nodes" konnte ich die Werte separieren:
Wie könnte ich die Globale Variable woanders wieder aufrufen?
Ich würde dann quasi keine direkte Verbindung mit den Nodes benötigen sonder nur die Variable einbauen? `
Change Node geht natürlich auch.
Die globale Variable kannst Du im Function Node über global.get("temp") wieder einer beliebigen Variablen zuordnen.
Beispiel: var temp = global.get("temp");
In verschiedenen Nodes (z.B. dem inject-Node) lassen sich die globalen Variablen als Inputwert weiterverarbeiten.
Insgesamt gibt es folgende Variablentypen:
Die einfachste Form
var x = 1;
Diese Variablen behalten ihren Wert nur innerhalb des Function Node und werden bei jedem inject wieder mit ihrem Eingangswert, hier mit dem Wert 1, versehen. Dieser Variablentyp ist als Zähler nicht geeignet.
Die context Variable
context.set("x",1);
Um einen Variablenwert dauerhaft im function-Node festzuschreiben muss dieser Variablentyp gewählt werden. Der Variablenwert kann nur in dem definierten Node verwendet werden. Andere Nodes wie das switch-Node, inject-Node und change-Node können nicht auf die Variable zugreifen.
Die definierten context-Variablen werden im contextbrowser unter Node angezeigt.
Die flow Variable
Die Werte aus diesem Variablentyp können im gesamten Flow (außer in Subflows) und somit in allen auf der Seite befindlichen Nodes ausgelesen werden.
Der Variablenwert kann im gesamten Flow verwendet werden. Andere Nodes wie das switch-Node, inject-Node und change-Node können ebenfalls lesend und schreibend auf die Variable zugreifen.
Die definierten context-Variablen werden im contextbrowser unter Flow angezeigt.
Die globale Variable
Die Werte aus diesem Variablentyp können über alle Flows von Node-Red in den Nodes ausgelesen werden. Andere Nodes wie das switch-Node, inject-Node und change-Node können ebenfalls lesend und schreibend auf die Variable zugreifen.
Die definierten globalen-Variablen werden im contextbrowser unter Global angezeigt.
-
Perfekte Auflistung
` > Die flow VariableDie Werte aus diesem Variablentyp können im gesamten Flow und somit in allen auf der Seite befindlichen Nodes ausgelesen werden. … `
außer in Subflows -
außer in Subflows `
Wie und wo legt man diese an. Ich lerne, was Node-Red betrifft, immer gerne noch dazu. Und deutschsprachige Literatur zu Node-Red habe ich bisher noch keine gefunden. -
außer in Subflows
Wie und wo legt man diese an. Ich lerne, was Node-Red betrifft, immer gerne noch dazu. Und deutschsprachige Literatur zu Node-Red habe ich bisher noch keine gefunden.
-
Cool.
Gesehen habe ich den Menüpunkt schon mal. Da muss ich den Subflow wohl mal austesten.
Danke für die Info