Skip to content

Latest commit

 

History

History
198 lines (121 loc) · 9.46 KB

README_DE.md

File metadata and controls

198 lines (121 loc) · 9.46 KB

node-red-contrib-weatherman

Dieser Flow erlaubt es die JSON Daten des Weatherman's zu verarbeiten und in einem Dashboard zu visualisieren. Dieser Flow geht von der Verwendung auf einer CCU3 / RaspberryMatic und RedMatic aus. Beispielhaft wird dargestellt:

Die hier dargestellte Visualisierung soll nur als Anregung dienen und die obigen Beispiele zeigen, welche Möglichkeiten die Steelseries Gauges noch bieten.

Sollte hier jemand schicke Ergänzungen vornehmen, würde ich mich über ein Pull-Request oder ein Teilen des Flows freuen.

Flow

Import Flow

Den Inhalt von raw flow.md kopieren und in Node-Red importieren.

Dashboard

Vorbereitungen

Weatherman

Der Weatherman sendet seine Daten standardmäßig zum lighthttp proxy der CCU auf Port 8181. Da hier die Integration über RedMatic erfolgen soll, muss der Port in Weatherman geändert werden, da der Port nicht doppelt von der CCU und RedMatic verwendet werden kann.

Die Änderung des Ports erfolgt über: http://<ip weatherman>/param:12:<port>

Der Flow hier verwendet z.B. den Port 8186

Für diese Anwendung ist eine minimale Firmware-Version v65 Voraussetzung

RedMatic

In RedMatic bzw. Node Red muss ein httpStatic Verzeichnis eingerichtet werden, um die zusätzlichen Skript-Bibliotheken von RGraph und SteelSeries verwenden zu können.

SSH Zugang aktivieren

Um die entsprechenden Einstellungen vornehmen zu können muss der SSH Zugang aktiviert werden. Eine kurze Anleitung findet sich z.B. hier.

httpStatic Verzeichnis und Skript Dateien

Mit dem SSH Zugang wird ein neues Verzeichnis für die entsprechenden Skripte angelegt. Der Flow hier verwendet:

/usr/local/sdcard/www/addons/red/static/scripts

Dieses Verzeichnis muss angelegt werden und folgende Dateien müssen hochgeladen werden:

httpStatic aktivieren

Um das, im vorherigen Schritt angelegte, Verzeichnis in Node-Red bekannt zu machen, muss die Datei settings.json editiert werden. In RedMatic liegt diese unter:

/usr/local/addons/redmatic/etc/settings.json

Diese Datei muss um den Eintrag "httpStatic": "/usr/local/sdcard/www" ergänzt werden und sieht dann beispielhaft so aus:

{
	"uiPort": 1880,
	"uiHost": "127.0.0.1",
	"flowFile": "flows.json",
	"userDir": "/usr/local/addons/redmatic/var",
	"httpRoot": "/addons/red",
	"httpStatic": "/usr/local/sdcard/www",
	"logging": {
		"ain": {
			"level": "info",
			"metrics": false,
			"audit": false
		}
	}
} 

Im Anschluss zu diesen Einstellungen muss RedMatic neu gestartet werden.

Konfiguration der einzelnen Nodes

In der weiteren Erklärung wird auf einzelne Nodes näher eingegangen.

TCP in Node: Listen Weatherman

Beschreibung

Verbindungspunkt zum Weatherman.

Funktion

  • Öffnet einen Server Port (hier 8186) zu dem sich der Weatherman periodisch verbindet
  • Das eingehende JSON Paket wird erstmal als einfache Zeichenkette weitergegeben

Function Node: Parse JSON

Beschreibung

Das JSON hat hier eine Besonderheit, da es mit einem End Of Transmission (EOT) Zeichen endet, welches nicht zu den Daten gehört, aber praktisch ist, da man einen kompletten Empfang damit validieren kann.

Funktion

  • Mit der Variable BasePath wird der erste Teil der späteren msg.topic gesetzt.
  • Der BasePath wird vom dem Skript automatisch mit dem Modultyp (z.B. weatherman, pulsecounter etc.) ergänzt. Damit lassen sich dann verschiedene Wiffi's unterscheiden
  • Weiterhin wird der BasePath dann noch mit dem Namen des jeweiligen Datenpunktes ergänzt. Damit ergibt sich dann ein msg.topic der Form: weatherman/status/w_temperatur
  • Über msg.timestamp wird den Daten jeweils noch die aktuelle Zeit mitgegeben
  • Mit node.error wird ein Fehler-Event erzeugt, falls es beim Parsen der Daten Probleme gibt, z.B. kein EOT gefunden oder bei einem fehlerhaften JSON Datensatz
  • Als letztes wird der Nachricht noch über msg.unit die entsprechende Messgröße mitgegeben

Switch Node: w_xxx

Beschreibung

Die gesamte Reihe an Switch Nodes zerlegt das geparste JSON Paket in seine Bestandteile und stellt damit die gemessenen Werte einzeln zur Verfügung.

Funktion

  • Jede einzelne Node lässt nur das eindeutige msg.topic eines bestimmten Modultyps und Messwerts durch

Template Node: Load required scripts

Beschreibung

Stellt die, zur Visualisierung benötigten, Skript Bibliotheken global zur Verfügung.

Funktion

Template Node: Windrichtung

Beschreibung

An Hand dieses Beispiels wird kurz auf die Visualisierung eingegangen.

Funktion

(function(scope){ 
  scope.$watch('msg', function(msg) {
    if (msg.payload !== undefined && msg.topic === '/weatherman/status/w_wind_dir') {
      radialWind.setValueAnimated(msg.payload);
    }
  });
})(scope);
  • Kern der Visualisierung ist jeweils diese function(scope): Diese wird benötigt um Nachrichten innerhalb eines Templates auch in einem Skript nutzen zu können, denn ansonsten stehen diese Informationen nur den (Angular) html Elementen zur Verfügung
  • Im Rest der Visualisierungs-Templates wird dann jeweils über die SteelSeries Funktionalitäten eine Anzeige generiert und diese dann mit den entsprechenden Daten gefüttert

Function Node: WindData

Beschreibung

Diese Funktion summiert, über angegebene Zeitintervalle, die aufgetretenen Windgeschwindigkeiten in den jeweiligen Windrichtungen, um damit im Folgenden ein Diagramm zu erzeugen aus dem sich die hauptsächliche Windrichtung(en) in diesem Intervall ablesen lassen.

Funktion

  • Mit den Konstanten limitLongTerm, limitMediumTerm und limitShortTerm können die Zeitintervalle (in Stunden) bestimmt werden in der der Wind beobachtet werden soll
  • Für diese Zeitintervalle sammelt das Skript die aufgetretenen Windgeschwindigkeiten in den 8 Himmelsrichtungen (N, NE, E, SE, S, SW, W, NW) und summiert diese
  • Die Ergebnisse werden in einem Array als msg.payload zur Verfügung gestellt, wobei die Node für jedes Zeitintervall einen eigenen Output nutzt

Nodes: Einfaches Monitoring und Fehlerbehandlung

Beschreibung

Dieser Block von Nodes überwacht den Weatherman und stellt im den Fehlerfall über eine Ampelvisualisierung dar.

Funktion

  • Die RBE Node hängt an dem sec_seit_reset Wert des Weatherman und lässt nur Werte durch, welche sich im Vergleich zum letzten gändert hat
  • Der Trigger TimeOut wird mit jedem Wert zurückgesetzt. Sollte für länger als 2 Minuten kein Wert ankommen läuft der Timer ab und der Trigger sendet ein false. Dieses wird dann als Verbindungsabbruch gewertet und schaltet die Ampel auf rot
  • Der Trigger Heart Beat lässt mit jeder Aktualisierung der Daten die grüne Ampel kurz blinken
  • Parse JSON Error reagiert auf node.error, welcher ggf. von den JSON Parse Funktionen erzeugt wird und schaltet in diesem Fall die Ampel auf gelb