Zum Inhalt

Node-Red

Die Installation ist beschrieben. Nachdem Node-Red gestartet wurde, steht ein Webserver zur Verfügung, der auf dem Port 1880 läuft.

Mit dem Aufruf der Url 127.0.0.1:1880 kann man die Workbench starten.

Das Grundprinzip eines Flow ist das Verbinden von Nodes. Ein Node ist eine Komponente, die einen bestimmten Auftrag erfüllt. Die Nodes können in einem Flow zusammengefasst werden und umgekehrt auch in mehreren Flows.

Flows müssen das Prinzip:

Quelle - Funktion - Senke

aufweisen:

Quelle Verarbeitung Senke
Inject-Node Function-Node Debug-Node
HTTP-Node Function-Node UI-Widget: Chart

Zwischen den Nodes werden über die gerichteten Verbindungen Messages ausgetauscht. Messages beinhalten strukturierte Daten, die in einem Flow verarbeitet werden. Sie werden als json-Objekte dargestellt:

Message-Objekt-Beispiel
{
    "msg
    {
    "topic": "test",
    "payload": "Hello World"
} 
Start von Node-Red mit spezifischen Flow

Node-Red kann auch mit einem spezischen Flow gestartet werden.

>_
node-red -s z:/settings_jb.js

So lassen sich auch die Beispiel-Flows direkt nutzen.

Minimal-Flow

flow_1

Mit einem Doppel-Klick öffnet sich rechts der Paramerter-Dialog des Node. Mit dem *Function-Node * lässt sich Javascript-Code einfügen. Das Beispiel zeigt, wie die Funktion eine Message (msg.payload=123;in, msg.topic="test";an den Debug-Node sendet.

Debug-Nodes haben rechts eine Fahne, mit der die Ausgabe in der rechten Spalte gesteuert werden kann.

Ist der Flow Übernahme (deploy) (nach jeder Änderung) aktiviert worden , dann wird er zyklisch oder ereignisgesteuert abgearbeitet.

Download: flows_1.json

Erweiterung: ui-Element (Dashboard-Version 2, NEU)

Eine sehr gute Anleitung zur Nutzung des Nodes Dashboard2 findet sich hier

Nun soll der Flow um ein Visualisierungselement erweitert werden. Dies geschieht in zwei Schritten:

  1. Nodes aus Dashboard-Paket hinzufügen
  2. Dashboard konfigurieren (Seite anlegen, Group anlegen)

Diese Schritte sind im nachfolgend Bild dargestellt:

flow_ui2_1

Erweiterung des Flows: ui-Element (Text, Gauge)

flow_ui2_2

Dashboard-Seite - Konfiguration

flow_ui2_3

Dashboard: Gruppe anlegen

flow_ui2_4

Dashboard: Gruppe konfigurieren

Nun können die einzelnen ui-Nodes den Anzeigeelementen Seite/Gruppe zugeordnet werden:

flow_ui2_4a

Dashboard: Gruppe konfigurieren

flow_ui2_4a

Dashboard: Gruppe konfigurieren

Ergebniss:

flow_ui2_5

Dashboard: Gruppe konfigurieren

Layout

Das Layout der einzelnen Dashboardseiten kann z.B. auch grafisch-interaktiv eingestellt werden. Dies wird durch den Dashboard-Seiten-Konfigurationsdialog erreicht:

flow_ui2_6_1

Dashboard: Layout ändern

flow_ui2_6_Bsp

Dashboard: Layout Editor

Line-Chart mit mehreren Series aus MongoDB

Der MongoDB-Node liefert ein msg-Objekt, das mehrere Datenpunkte {key:value} liefert.

msgObj

msg-Objekt

In einem ui-Node müssen die einzelnen Datenpunkte mit ihrem keyadressiert werden. In einem Gauge-Node:

gauge2

msg-Objekt

Für ein Line-Chart muss ein Parser-Node das msg-Objekt am MongoDB-Node-Ausgang mit dem Node "json-Parser" umgewandelt werden:

json-Parser

json-Parser

Im Chart-Node könen dann sehr einfach mehrere Zeitreihen ausgewählt werden:

jchart2_jsonAddr

json-Adressierung im Chart-Node

Erweiterung: ui-Element (Dashboard-Version 1 (abgekündigt))

Nun soll der Flow um ein Visualisierungselement erweitert werden. Dies geschieht in zwei Schritten:

  1. Nodes aus Dashboard-Paket hinzufügen
  2. Dashboard konfigurieren (Tab anlegen, Group anlegen)

Diese Schritte sind im nachfolgend Bild dargestellt: flow_ui

Erweiterung des Flows: ui-Element (Gauge)

Das Dashboard ist im Browser unter http://localhost:1880/ui erreicbar, da Node-Red einen Webserver auf dem Port 1880mit dem Endpoint ui bereitstellt.

ui1

Dashboard

Download: flows_ui.json

Dynamisierung des Flows

Mit dem Inject-Node steht das Element zur Verfügung, das eine zyklische Abarbeitung des Flows ermöglicht. Damit lässt sich z.B. steuern, in welchen zeitlichen Abständen ein Signal generiert / gelesen (über eine Kommunikationsstrecke, aus einer Datenbank, …) wird und durch die nachfolgenden Nodes weiterverarbeitet werden soll:

flow_intervall

Parametrierung des Inject-Node

Download: flows_intervall.json

Function-Node

Individuellen Code kann man in den Function-Node implementieren. In dem Editor-Feld lässt sich per JavaScript auf das Message-Objekt zugreifen, manipulieren und auf den Ausgang (== return) legen.

function_node

Function-Node (msg.payload & msg.topic)

Download: functionGen_flow.json

Debugging wird allerdings durch einen Function-Node NICHT unterstützt !!

Debugging

Tip

Wenn komplexere Berechnungen in einem Function-Node * durchgeführt werden sollen, dann sollte der Algorithmus z.B. in VS Code und node.js programmiert und getestet werden. Anschließend kann der JS-Code in den Function-Node* kopiert werden.