Vorbereitung für die Ausgabe der Daten

Node-Red Sicherheit

Sobald die Wetterstation aus dem lokalen Netzwerk auch im Internet erreichbar ist, kann jeder, der die IP-Adresse kennt und Zugriff auf den Port hat, die Bedienoberfläche erreichen und alle Veränderungen in meinen Programmierungen vornehmen, die er möchte. Damit das nicht passiert, sichere ich den Zugang mit einem Benutzernamen und Kennwort ab. Beschrieben wird der Vorgang auf der Seite Node-RED : Security unter diesem Link: https://nodered.org/docs/security Die erforderliche Einstellung dazu wird in der Datei ~/.node-red/settings.js vorgenommen. Zusätzlich habe ich dazu Tool node-red-admin installiert. Das ist übrigens auf der Seite Node-Red : Command-line Administration unter diesem Link beschrieben: https://nodered.org/docs/node-red-admin.

Raspberry Pi aus dem Internet erreichbar

In meinem Router gebe ich für den Raspberry Pi den (Standard-) Port 1880 frei. Nach einem Neustart von Node-Red mit

node-red-stop
node-red-start

oder Neustart des Raspberry Pi ist der Zugang zur Entwicklungsoberfläche aus dem Internet nun über diesen Link erreichbar: dl8aap.ddns.net:1880. Wie man eine solche DynDNS-Adresse einrichtet. steht in vielen Beiträgen im Internet und soll nicht Bestandteil meiner Aufbaubeschreibung sein.

Installation Node-Red-Dashboard

Damit Daten auf einer Webseite im Internet dargestellt werden können, muss das Node-Red-Dashboard nachinstalliert werden.

Ich melde mich mit meinen Zugangsdaten an der Entwicklungsoberfläche an und installiere das Dashboard über den Paletten-Manager:

Über die Seite Palette wähle ich den Tab Install (1) und suche nach dashboard (2). Ich wähle den Eintrag node-red-dashboard und klicke auf den kleinen Button install (3). Das dauert nun eine Weile, bis der Button Close erscheint. 

Mit Close (4) schließe ich den Palettenmanager, und es stehen jetzt die Dashboard-Elemente zur weiteren Verwendung zur Verfügung. Im Grunde sind dies alles Elemente, die zur Darstellung auf (m)einer Internetseite benutzt werden können. Es stehen einige Tausend Nodes zum Download bereit. Es dürfen auch eigene Nodes erstellt werden.

Bei jeder Änderung wechselt der Button Deploy auf rot.

Mit einem Klick auf Deploy (1) werden dann die Änderungen gespeichert und übernommen und die neue Ausgabe erzeugt. Diese Ausgabe kann ich mir anschauen mit Klicken auf das Grafik-Symbol (2) und auf das Link-Symbol (3).

Da ich noch keine Elemente (UI nodes) hinterlegt bzw. programmiert habe, begrüßt mich Node-Red entsprechend und weist mich freundlich darauf hin noch einige Elemente in einen Flow hinzuzufügen und auszuliefern.

Der erste Flow

Ein erster Test könnte so aussehen:

Aufgabe: Gib mir jede Sekunde die aktuelle Rechnerzeit aus.

Lösung: Dazu platziere ich einen inject-node und einen debug-node auf die Arbeitsoberfläche und verbinde die beiden Nodes.

Ich öffne mit einem Doppelklick den inject-node. Im Edit-Fenster ändere ich den Repeat-Modus auf interval und stelle auf every 1 seconds. Die blauen Punkte zeigen an, dass eine Veränderung an diesem Knoten vorgenommen, aber noch nicht gespeichert wurde. Ein Klick auf Done, und der Node ist programmiert. 

Der debug-node ist schon passend vorbereitet, um eine Nachrichtenladung msg.payload vom inject-node im Debugfenster darzustellen.

Mit einem Klick auf Deploy wird dieser kleine Flow 1 gespeichert und ausgeliefert.

Jetzt erscheint im Debug-Fenster jede Sekunde die Ausgabe der aktuellen Rechnerzeit. Aber 1536668952289? Das ist die Unix-Zeit in Tausendstel Sekunden beginnend mit 1.1.1970 00:00 Uhr, die im Raspberry Pi läuft. Umgerechnet ist das 11.09.2018 14:32:03.289 Uhr.

 

Test des Internet-Dashboard

Aufgabe: Gib mir alle 7 Sekunden den Rückgabewert eines Internet-Ping von www.google.de und zeige den aktuellen Wert in einem Gauge-Knoten, sowie die Werte der letzten 12 Stunden in einer Liniengrafik auf dem Dashboard (für das Internet).

Lösung: Zunächst muss eine Oberfläche für das Dashboard vorbereitet werden. Node-Red weiß sonst nicht, wohin es die Elemente platzieren soll.

In der Sektion dashboard den Tab Layout wählen. Nun den Button +tab klicken. Damit wird quasi eine neue Seite erzeugt. Hinter diesem neuen Tab 1 kann man mit edit die Eigenschaften dieses Tabs anpassen. Ich wähle den Namen Home und bestätige dies mit Klick auf Update. Hinter dem neuen Home-Tab klicke ich auf +group. Es wird eine quasi eine Matrix für die neue Seite angelegt. Hierauf können die Ausgabe-Knoten ausgerichtet werden.

Jetzt platziere ich die notwendigen Nodes. Ein Ping-Node, ein Gauge-Node und ein Chart-Node und verbinde sie untereinander.

Doppelklick auf den Ping-Node öffnet den Edit-Modus. Hinter Target gebe ich ein: www.google.de. Hinter Ping (S) gebe ich ein: 7 und bestätige mit Done. Dieser Knoten sendet einen Internet-Ping alle 7 Sekunden an Google.de

Doppelklick auf den Gauge-Node öffnet den Edit-Modus. Hinter Group wähle ich aus der Auswahlbox den Eintrag Group 1 [Home]. Damit wird dieses Element auf die zuvor erzeugte Matrix gesetzt. Hinter Units gebe ich ein: ms, weil der Ping seine Nachrichtenladung in Millisekunden übergibt. Die Range bestimme ich mit min=0 und max=300. Bestätigung mit Done.

Doppelklick auf den Chart-Node öffnet den Edit-Modus. Hinter Group wähle ich aus der Auswahlbox den Eintrag Group 1 [Home]. Damit wird dieses Element ebenfalls auf die zuvor erzeugte Matrix gesetzt. Hinter x-axis gebe ich ein: last 12 hours. Hinter Y-axis gebe ich für min=0 und max=300 ein. Bestätigung mit Done.

Nun den Flow mit Deploy ausliefern und das fertige Ergebnis über das Link-Symbol anschauen.

Die Aufgabe ist somit erfüllt, das Dashboard funktioniert zur vollen Zufriedenheit.

Node-Red bietet die Möglichkeit den entwickelten Flow zu Speichern bzw. als Backup auszugeben. Das geht über den Menü-Button, Export und Clipboard. Der Flow wird damit in die Zwischenablage exportiert.

Über die Funktion Import kann so ein vollständiger Flow z.B. von Dritten oder aus einem Backup importiert werden.

In der folgenden Box ist das “Skript” für den obigen Flow enthalten. Per Copy & Paste kann der Flow importiert werden.

[{"id":"7f2aead6.b4c26c","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"2886ee67.f5ad1a","type":"ping","z":"7f2aead6.b4c26c","name":"","host":"www.google.de","timer":"7","x":170,"y":120,"wires":[["6b9edf2f.a2da28","65f085df.5a9574"]]},{"id":"6b9edf2f.a2da28","type":"ui_gauge","z":"7f2aead6.b4c26c","name":"","group":"80e206a9.0b295","order":0,"width":0,"height":0,"gtype":"gage","title":"gauge","label":"ms","format":"{{value}}","min":0,"max":"300","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":350,"y":100,"wires":[]},{"id":"65f085df.5a9574","type":"ui_chart","z":"7f2aead6.b4c26c","name":"","group":"80e206a9.0b295","order":0,"width":0,"height":0,"label":"chart","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"0","ymax":"300","removeOlder":"12","removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"useOldStyle":false,"x":350,"y":140,"wires":[[],[]]},{"id":"80e206a9.0b295","type":"ui_group","z":"","name":"Group 1","tab":"898387fe.649cd8","order":1,"disp":true,"width":"6","collapse":false},{"id":"898387fe.649cd8","type":"ui_tab","z":"","name":"Home","icon":"dashboard","order":1}]

Für alle weiteren Aktivitäten mit Node-Red empfehle ich das Studium des Node-Red Kochbuchs hinter diesem Link: https://cookbook.nodered.org/

Im Internet finden sich auch eine Menge Beiträge, die die unterschiedlichsten Themen zum Node-Red behandeln. Auch ich bin hier für ein paar spezielle Dinge schnell fündig geworden, die ich im weiteren Verlauf meines Installationsberichtes gerne weitergebe.

Ich denke es ist nun an der Zeit mit meiner Beschreibung im Teil 6 mit der Auswahl der passenden Sensoren am Raspberry Pi und die Verbindung mit dem Node-Red fortzufahren.

 

 

(M)eine kleine Wetterstation mit einem Raspberry Pi (Teil 4)
(M)eine kleine Wetterstation mit einem Raspberry Pi (Teil 6)

Diskussion

Kommentar hinterlassen

Your email address will not be published. Required fields are marked *

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.