Zurück zur Übersicht ...
Zurück zu 'Node-RED - Sensor-Feinstaub' ...
Übernahme, Aufbereitung, Deployment und Visualisierung der per WiFi versandten Sensordaten der Sensordaten der Feinstaub Messstation (https://luftdaten.info/) durch Node-RED
Das Node-RED Modul ist so ausgelegt worden, dass es universell konfiguriert und eingesetzt werden kann. Dies gilt sowohl für die technischen Voraussetzungen, als auch für die Modul interne Konfiguration. Im Folgenden wird das Aufsetzen einer Minimal-Version, einer (sinnvollen) Standard-Version und der maximalen (Debug) Version gezeigt. Besonderer Wert wurde bei der Entwicklung darauf gelegt, dass das Deployment der Sensordaten individuell konfigurierbar ist. So werden z.B. in der Standardeinstellung nur die Sensordaten weiterverarbeitet, die sich geändert haben - dies sorgt besonders bei der MQTT Weitergabe oder dem Abspeichern in einer Datenbank für eine starke Reduzierung des Datenverkehrs bzw. für deutlich weniger Speicherplatzbedarf!
Als Hardware Grundlage wird ein Raspberry Pi mit einer aktuellen Debian Version benötigt. Folgende Software Module werden für die einzelnen Ausbaustufen benötigt:
-
Minimal-Version
- Funktion: Übernahme, Aufbereitung und Visualisierung der Weatherman Sensordaten
- Software Module:
- Node-RED Installation (z.Z.: latest version ... v0.20.5 (npm))
-
Standard-Version
- Funktion: Übernahme, Aufbereitung, Deployment und Visualisierung der Weatherman Sensordaten
- Software Module:
- Node-RED Installation (z.Z.: latest version ... v0.20.5 (npm))
- MQTT Broker - Mosquitto
- optional: MariaDB SQL-Datenbank
-
Maximal-Version
- Funktion: wie Standard-Version - nur mit allen Optionen und (Debug) Möglichkeiten zur eigenen Anpassung
- Software Module:
- Node-RED Installation (z.Z.: latest version ... v0.20.5 (npm))
- MQTT Broker - Mosquitto
- MariaDB SQL-Datenbank
Die Installation von Node-RED, Mosquitto und MariaDB wird hier nicht im Einzelnen dargestellt. Es macht jedoch Sinn, alle Module so aufzusetzen, dass sie über sichere Verbindungen miteinander kommunizieren. In der eigenen myHOME-Umgebung laufen so z.B. Node-RED, FHEM und Grafanna über einem Nginx Proxy Server.
- die Sensordaten des Feinstaub Moduls werden über den Port 8182 in Node-RED abgegriffen
- dazu muss beim im Feinstaub Modul unter 'Konfiguration' eingestellt werden:
- 'An eigene API senden' - angehakt
- Server: <IP-NodeRED-Server>
- Pfad: /feinstaub
- Port: 8182
- 'An eigene API senden' - angehakt
Überprüfen, ob Node-RED in der aktuellen Version installiert ist. Weiter muss das Modul 'node-red-dashboard' installiert sein - siehe im Node-RED Fenster Einstellungen oben rechts und dann unter dem Menü-Eintrag 'Manage palette'. Unter dem Reiter 'Install' kann das Modul gesucht und installiert werden - falls es schon installiert ist, kann unter 'Nodes' die Version geprüft und evtl. aktualisiert werden.
Für eigene Node-RED Erweiterungen sollte man einen 'public' Ordner anlegen (TTY-Konsole - als pi user):
mkdir /home/pi/.node-red/public
Node-RED stoppen:
node-red-stop
Die Node-RED 'settings.js'-Datei öffnen:
sudo nano /home/pi/.node-red/settings.js
Folgenden Eintrag vornehmen und Datei mit 'CTRL-X' - 'Ja' abspeichern:
httpStatic: '/home/pi/.node-red/public',
Node-RED starten:
node-red-start
Hier finden sich die Device CSV-Konfigurationsdateien für das Feinstaub Modul:
myHOME_Devices_FS_all.csv
myHOME_Devices_FS_std.csv
Die CSV-Dateien sind vorkonfiguriert und können sofort benutzt werden. Bitte die CSV-Dateien bei einer Anpassung NICHT mit MS Excel editieren - besser: Notepad++ benutzen (UTF-8 Zeichensatz)!!
Erläuterungen zu den CSV-Spalten finden sich in der Beschreibung:
Datenbank-Tabelle - SENSOR_DEVICES
Anpassung der barometrischen Ortshöhen-Beschreibung "hPa (190 m ü. N.N.)" in der Zeile 23 der Datei 'myHOME_Devices_xxx.csv' von '190' auf den N.N. Höhenwert, auf den der gemessene barometrische Wert reduziert werden soll.
Für das Feinstaub Modul werden die im JSON-String übergebenen 'value_type'-Bezeichnungen neu 'normiert' - damit braucht keine Code-Anpassung der Folge-Prozesse mehr erfolgen, wenn bei einer Firmware-Änderung Namenseinträge geändert werden - bei den Folgeprozessen bleiben die festgelegten Device Bezeichner und Zuordnungen erhalten:
- DEV_TYP
'normierte' Bezeichnung - z.B.: 'fs_sds011_pm2_5' - DEV_OLD_NAME
JSON-Name alt - 'value_type' oder '' - DEV_OLD_TYP
JSON-Typ alt - z.B.: 'SDS_P1' oder ''
Eine Gegenüberstellung der 'normierte' Bezeichnung zu den 'value_type' Bezeichnungen findet sich hier:
myHOME_Datenbank_SQL_Names_FS.txt
Optional können Anpassungen für jeden DEVICE-Eintrag in den folgenden Spalten vorgenommen werden:
- ID_DEV
lfd. Device-ID Nummer - Aufbau 'xxxyyy' mit- xxx = der IP-Adresse 192.168.010.xxx
'1' ... '254' - yyy = 3stelliger Index
'000' ... '999'
- xxx = der IP-Adresse 192.168.010.xxx
- DEV_DESC
Device-Bezeichnung - z.B.: 'Feinstaub-Sensor' - DEV_LOC
Device-Standort - z.B.: 'Garten' oder '' - DEV_VAL_DESC
Wert-Bezeichnung - z.B.: 'PM2.5' oder '' - DEV_VAL_UNIT
Wert-Einheit - z.B.: 'µg/m³' oder '' - DEV_MQTT
MQTT-Ausgabepfad - z.B.: '/myHOME/sensor/devices/<DEV_NAME>' oder '' (für das DEVICE keine MQTT-Ausgabe) - DEV_FL_ACT
Flag-DEV Aktiv - '0 ... 255' (0 = DEVICE-Eintrag ist nicht aktiv) - DEV_FL_STO
Flag-DEV Speichern - '0 ... 255' (0 = DEVICE-Daten nicht in DB speichern) - DEV_FL_MQTT
Flag-DEV MQTT-Ausgabe - '0 ... 255' (0 = DEVICE-MQTT nicht ausgeben)
Kopieren der angepaßten 'myHOME_Devices_xxx.csv' Dateien nach '/home/pi/.node-red/public'
- für die Minimal- und Standard-Version
- 'myHOME_Devices_WM_std.csv' nach 'myHOME_Devices_WM.csv' kopieren
- für die Maximal-Version
- 'myHOME_Devices_WM_max.csv' nach 'myHOME_Devices_WM.csv'
Für die Standard-Version mit Datenbank Option und für die Maximal-Version muss die 'MariaDB SQL-Datenbank' installiert und konfiguriert werden:
WW-mySHT - Sensor-Datenbank - Setup.md
Kopieren des Feinstaub Node-RED Moduls, indem die Datei 'myHOME_FLOW_Feinstaub_xxx.md' auf die Flow Ebene von Node-RED im Explorer gezogen wird.
Mit einem Doppelklick auf den Node 'Init-Flow' die Anpassungen für das Feinstaub Modul vornehmen.
-
var myBaro_NN = 190;
Altitude [m] - eigene Ortshöhe über N.N. zur Berechnung des barometrischen Luftdrucks in Bezug zu N.N.. Von dem Wert '190' auf den N.N. Höhenwert, auf den der gemessene barometrische Wert umgerechnet werden soll, ändern- Definitionen:
- absoluter Luftdruck = Luftdruckmessung am Standort des WM (ohne Korrekturwert)
- relativer Luftdruck - auf Meereshöhe reduzierter Luftdruckmesswert NN des WM (mit Korrekturwert)
- Im FS kann keine Ortshöhe zur Korrektur eingegeben werden - es wird immer der absolute Luftdruck bereitgestellt => es muss hier 'var myBaro_NN = ;' gesetzt werden, um auch den relativen Luftdruckwert ermitteln zu können.
- Wird hier 'var myBaro_NN = 0;' eingegeben, dann wird der Luftdruckwert des FS ohne Korrektur ausgegeben.
- Mit der Ortshöhe werden automatisch die richtigen Werte für 'wm_baro' (absoluter Luftdruck) und 'wm_baro_nn' (relativer Luftdruck) gesetzt - das gilt auch für die Werteanzeigen 'Luftdruck' und 'Luftdruck NN' im Dashboard.
- Definitionen:
-
var myTmpNewOnly_Default = 1;
Flow-Vorgabe, ob nur neue Readings (Werte) oder alle Readings eines Devices berücksichtigt werden sollen
= 0 - alle Readings
> 0 - nur neue Readings -
var myDbData_Flag = 1;
Flow-Vorgabe, ob die Werte eines Devices in eine myHOME Datenbank abgespeichert werden
= 0 - keine DB Data Ausgabe
> 0 - DB Data Ausgabe- für die Minimal-Version
var myDbData_Flag = 0; - für die Standard-Version nur, wenn optional eine mariaDB SQL Datenbank installiert ist kann das Abspeichern gewählt werden, sonst
var myDbData_Flag = 0;
- für die Minimal-Version
-
var myMqttData_Flag = 1;
Flow-Vorgabe, ob eine MQTT Ausgabe für die Devices erfolgen soll
= 0 - keine MQTT Data Ausgabe
> 0 - MQTT Data Ausgabe- für die Minimal-Version
var myMqttData_Flag = 0;
- für die Minimal-Version
-
var myMqttState_Flag = 1;
var myMqttState_DevName = "Feinstaub";
var myMqttState_DevMqtt = "/myHOME/sensor/devices/Feinstaub/state";
Flow-Vorgabe, ob eine MQTT Status Ausgabe für die Devices erfolgen soll
= 0 - keine MQTT Status Ausgabe
> 0 - MQTT Status Ausgabe- für die Minimal-Version
var myMqttState_Flag = 0;
- für die Minimal-Version
-
var myMqttAvg_Flag = 1;
var myMqttAvg_DevMqtt = "/myHOME/sensor/devices/Feinstaub/avg";
Flow-Vorgabe, ob eine MQTT Ausgabe für den gleitenden Mittelwert (AVG) aller numerischen Felder der Devices erfolgen soll
= 0 - keine MQTT AVG Ausgabe
> 0 - MQTT AVG Ausgabe- für die Minimal-Version
var myMqttAvg_Flag = 0;
- für die Minimal-Version
Den 'Init-Flow' Node mit dem 'Done' Knopf schließen.
Dann müssen noch in den MQTT-Ausgabe Nodes die MQTT-Broker Adressen eingetragen werden (gilt nicht für Minimal-Version).
Ebenfalls müssen die myHOME Datenbank Nodes verbunden werden (gilt nicht für Minimal-Version).
Abschließend wird der Weatherman Flow mit dem 'Deploy' Knopf veröffentlicht.
Über '<node-RED URL>/ui' im Browser sollte nun der Feinstaub Bereich mit den Anzeigen erscheinen.
Wenn alles wie vorgesehen funktioniert, können aus dem Feinstaub-Flow die nicht benötigten Nodes (z.B.: alle Debug-Nodes, der Node Switch SYS und evtl. auch die DB-OUT Database bzw. DB-OUT MQTT Bereiche) gelöscht werden. Ebenfalls können in den Nodes Switch VAR und Switch AVG die nicht benötigten Abfragen entfernt werden.
Man kann das Modul auch als reines 'Feinstaub to MQTT' Modul ohne jegliche Anzeige einsetzen - dann können alle Switch xxx Nodes und alle Anzeigen gelöscht werden. Die Feinstaub Ausgaben erfolgen dann an einen MQTT-Broker, der wiederum dafür sorgt, dass z.B. ein Node-RED MQTT Feinstaub Client (myHOME_FLOW_Feinstaub_MQTT_xxx.md) die Daten anzeigt oder dass FHEM die MQTT-Daten entgegen nimmt (fhem_cfg_WM.txt - siehe bin-Ordner).
Nach der Bereinigung wird mit dem 'Deploy' Knopf die Änderung veröffentlicht.
- 1.1.0.0 - 2019-05-10
- Anpassung für barometrische Höhenkorrektur 'myBaro_NN'
- 1.0.0.0 - 2018-12-26
- Erstausgabe