Einleitung
In diesem Beitrag möchte ich euch zeigen wie ich die Daten meines Smart Meters in eine InfluxDB mittels Node Red speichere.
Import
Ich habe meinen Flow für euch Exportiert da muss man nur die MQTT und Datenbank Serverdaten ändern dann müsste das alles Funktionieren.
Vorraussetzung
Meine verwendete Version ist immer in den Klammern zu finden.
- Node Red (v2.2.0)
- InfluxDB (v1.8.10)
- Mosquito MQTT Broker (v1.5.7)
Datenbank installieren und erstellen
Für die Installation gibt es schon einige Anleitungen daher nur der Verweis auf die Offizielle Dokumentation. (daruf ach)
Um Daten in die Datenbank zu schreiben muss eine Datenbank erstellt werden. Das funktioniert am besten über die Kommandozeile. Einfach den Befehl eingeben dann gelangt man in das Interface von InfluxDB.
influx #öffnet das Interface
CREATE DATABASE SmartMeter # erstellt eine Datenbank mit dem Namen SmartMeter
Mit dem nächsten Befehl kann man sich alle Datenbanken ansehen und überprüfen ob die neu “SmartMeter” Datenbank erstellt wurde.
show Databases # zeigt alle Datenbanken an.
Wenn die Datenbank hier erscheint gibt es keinen Fehler und die Datenbank ist erfolgreich erstellt worden.
Node Red installieren und Einrichten
Auch für die Installation und ersten Schritte gibt es schon genügend Anleitungen daher gehe ich da nicht mehr genauer drauf ein. Wenn vermehrt Fragen zur Installation kommen werde ich mich darum kümmern.
Es wird ein Erweiterung benötigt um von Node Red direkt in eine InfluxDB zu schreiben. Um diese zu Installieren muss man rechts Oben auf das Burgermenu –> Palette verwalten –> Installation. Im Video ist das auch alles ersichtlich.
node-red-contrib-influxdb #Name der Node für die Installation
MQTT Nachrichten empfangen
In Node Red Befindet sich auf der Linken Seite die Verfügbaren Nodes. Unter dem Reiter Netzwerk gibt es zwei MQTT Nodes. Wir benötigen die “mqtt in” – Node. Weiters müssen wird noch mittteilen auf welchen MQTT Broker gehört werden soll. Dafür muss die “mqtt in” – Node in den Arbeitsbereich gezogen werden. Als nächstes einen Doppelklick auf die Node. Dann öffnet sich ein Fenster um Einstellungen vorzunehmen. Beim Server muss die eigene Server Adresse angegeben werden. Mein Raspberry Pi hat eine Fixe IP Adresse darum verwende ich diese aber es kann auch “localhost” angegeben werden. Um nun die Ersten Werte zu erhalten gebe ich das erste Topic an. Mit einer Debug Node gebe ich mir die Werte in der Konsole aus. Rechts Oben unterhalb des Hamburger-Menü-Icon befindet sich ein kleines Käfer-Icon dort werden die Werte der Debug Node ausgegeben.
Die “function” – Node ermöglicht einem alle Funktionen die man in JavaScript programmieren kann. Als Beispiel die Berechnung von mehreren Werten oder eine Einheiten Umrechnung. Es werden Wattstunden ausgegeben aber die übliche Einheit ist kWh daher möchte ich den Wert in kWh in die Datenbank ablegen. Das mache ich mir der “function” – Node.
var Wert = msg.payload;// Wert des Payload einlesen und der Variable Wert zuweisen
msg.payload = Wert/1000; // Den Berechnetet Wert dem Objekt msg zuweisen.
return msg;
Nun hab ich alle MQTT-Topics eingelesen und in die gewünschte Einheit umgewandelt. Bei den Spannungen und Strömen L1 – L3 habe ich noch eine “function” – Node eingebaut um auf 2 Nachkommerstellen zu runden.
var Wert = msg.payload; // Wert einlesen aus dem Payload
msg.payload = parseFloat(Wert).toFixed(2) //Wert auf 2 Nachkommerstellen runden
return msg;
Um alle Daten gemeinsam in die Datenbank schreiben zu können müssen alle Nachrichten gebündelt auf eine werden. Das mache ich mit einem Objekt. Dafür muss ich jeder Nachricht eine “Überschrift” zuweisen. Das wird mir der “Change” – Node gemacht.
Wenn alle Nachrichten eine Vernünftige Überschrift haben. Wandel ich alle Werte noch in eine Zahl um das ich in der Datenbank später rechnen kann. Nicht das irgendein Wert noch ein String ist.
msg.payload = Number(msg.payload)
return msg;
Dann kann man mit einer “join” – Node alle Werte zu einem Objekt zusammenfügen. Um selber zu entscheiden wie das Objekt aussehen soll muss der Modus von Automatisch auf Manuell umgestellt werden. Weiters muss noch die Anzahl der eingehenden Nachrichten eingestellt werden wann ein Objekt erzeugt wird in diesem Fall sind es 12 Nachrichten. Wichtig ist noch den Hacken bei “und bei jeder nachfolgenden Nachricht” zu entfernen.
Als letztes fehlt nur noch die Daten in die InfluxDB zu schreiben. Dafür die “influxdb out” – Node verwenden. Es muss ein Server angelegt werden mit denn den Daten wie im Video. Die IP Adresse 127.0.0.1 ist die Lokale auf den Raspberry PI, wenn die Datenbank auf einen anderem Gerät läuft dann muss die geändert werden. Es muss noch ein Measurement angegeben werden das kann man sich vorstellen wie die Tabelle in der es abgelegt wird bei mir heißt die Leistungsdaten.
Wenn das alles geklappt hat werden die Daten automatisch in der InfluxDB abgelegt und gespeichert. Im nächsten Blogbeitrag schreibe ich über die Auswertung mit Grafana.
Hallo Mike,
kurze Frage, warum befällst Du die InfluxDB nicht mittels Telegraf? Wäre doch native, oder?
danke
ciao
Andiy
Hallo,
ich bin selber neu in dem Thema und das war die einfachste mir bekannte Lösung.
Mittlerweile schreibe ich die Daten direkt vom Python Skript in die Datenbank
LG Michael
Hallo Michael,
wäre es möglich mir das Skript welches die Daten direkt vom Skript in die Datenbank schreibt zukommen lässt?
LG Niklas
Hallo,
für welchen Netzanbieter ?
LG Michael
Guten Tag,
da ich wirklich komplett verzweifle an der InfluxDB frage ich Sie um Rat.
Ich komme dazu, dass Grafana und die DB sich verbinden. Allerdings wird die DB nie beschrieben. Auch .csv Nodes werden quasi ignoriert.
Beim Debug Node im Node Red bekomme ich die Messages meines MQTT Brokers alle angezeigt. Bei Show Databases bekomme ich auch meine DB angezeigt.
Leider finde ich keine Möglichkeit die DB initital zu beschreiben. Die Tutorials und die Shell Oberfläche sind ja schon fast nutzerfeindlich.. Ich möchte doch einfach nur meine Field Tags einfügen, um diese dann in Grafana zu selektieren (mir wird nichts angezeigt) und meine Werte graphisch darstellen….
Hallo,
am besten Sie schreiben mir eine Mail und wir machen uns einen Termin aus. Dann kann ich mit TeamViewer oder AnyDesk einmal drüberschauen.
support@michaelretibauer.at
LG Michael
wenn du alles wie greenMike gepostet hat umgesetzt hast liegt der Fehler in der Datenbank. greenMike hat die Datenbank nicht SmartMeter in NodeRed genannt sondern Hauptstromzähler
” “id”: “9d9ad3f4.49ce7”,
“type”: “influxdb”,
“hostname”: “192.168.1.99”,
“port”: “8086”,
“protocol”: “http”,
“database”: “Hauptstromzaehler”,
“name”: “”,
“usetls”: false,
“tls”: “”,
“influxdbVersion”: “1.x”,
“url”: “”,
“rejectUnauthorized”: false”
das könnte bei dir der Fehler sein.
Das Node-Red Programm läuft das im Webbrowser und muss es dafür geöffnet sein? Wie macht man das, dass das NodeJS Programm dauerhaft läuft, ohne dass man ein Programm geöffnet haben muss?
Hallo,
Node Red ist auf dem Raspberry Pi installiert und der läuft bei mir immer, wie ein Homeserver. Die Weboberfläche dient rein zum Programmieren von einem anderen PC.
Die Flows oder auch (Programmteile) laufen immer.
LG Michael
Node RED als Service aktivieren, ich glaube das ist im how to set up Node RED on PI Manual drin.
Startet sich danach automatisch sobald der Raspberry bestromt wird.
Ja das ist in der Installationsanleitung dabei.
Das ist der Befehl für Autostart
sudo systemctl enable nodered.service
[…] meinem Smart Meter zeigen. Ich speichere alle Daten in eine InfluxDB. Wie ich das mache habe ich in diesem Beitrag erklärt. Zum Visualisieren verwende ich Grafana. Das ist eine Open Source Anwendung die auch auf […]
Toller informativer Beitrag, danke! Kanns kaum erwarten den Grafana Eintrag zu lesen. Dann kann ich mir auch endlich eine funktionierende Ausgabe basteln (oder zur Not abschreiben).