(M)eine kleine Wetterstation mit einem Raspberry Pi (Teil 7)

Theorie zur Langzeitspeicherung von Wetterdaten

Wie im letzten Teil 6 beschrieben, werden die Daten des Chart-Nodes nur zur Laufzeit des Dashboards im Node gespeichert. Nach einem Neustart des Raspberry sind die Daten weg und bauen sich nach den Einstellungen des Nodes erst wieder auf. Nun gibt es einige Überlegungen, die das Speichern dieser Daten auch auf lange Sicht gewährleistet.

  1. Speichern der Chart-Node-Daten in eine oder mehrere Dateien wie z.B. CSV.
  2. Speichern der ankommenden Daten in einer SQL-Datei, wie z.B. MySQL.
  3. Speichern der ankommenden Daten in einer Round-Robin-Datenbank (RRD), wie z.B. RRDtool von Tobias Oetiker.
  4. Speichern der ankommenden Daten in einer weiteren Version einer RRD, wie z.B. InfluxDB.

Alle genannten Methoden haben für sich gesehen einen gewissen Charme, ihre Vorteile und aber auch ihre Nachteile.

Zu 1.

Das Speichern der Daten aus dem Chart-Node macht vielleicht dann Sinn, wenn man es einmal macht und die Daten hinterher für irgendwelche anderen Zwecke weiter verwendet. Die Ausgabe in eine Datei oder in eine Datenbank ist ohne Zweifel möglich, aber für meine weiteren Überlegungen sinnlos.

Zu 2.

Ja, die ankommen Daten können im Nodered in einen Chart-Node geschoben werden und parallel dazu in eine SQL-Datenbank. Bei der SQL-Datenbank hat man sogar die Freiheit sich seine eigene Datenbank aufzubauen, wie auch die Struktur der Tabellen. Beim Wegschreiben der Daten gibt es zunächst keine Probleme. Problematisch wird es allerdings, wenn man eine Abfrage gestaltet.

Dazu ein Beispiel:
Alle zwei Minuten kommen Daten aus meiner Wetterstation. Das bedeutet, Nodered erzeugt alle zwei Minuten einen Datensatz, der zwar im Moment nur aus der Temperatur besteht, aber auch weitere Felder haben könnte. Z.B. Luftfeuchte, Luftdruck, Windgeschwindigkeit, Windrichtung, Lichtdauer und was einem noch so alles einfällt.

So entstehen im Laufe eines Tages 30 x 24 = 720 Datensätze, pro Woche dann schon 5.040 Datensätze. Im Jahr werden somit 262.080 Datensätze erzeugt. Der kleine Raspberry Pi muss dann z.B. in einer Jahresübersicht 262.080 Daten in den Chart-Node schicken. Die Abfrag ginge vielleicht noch recht schnell, aber das Auffüllen des Knoten könnte schon mal 5 Minuten und mehr benötigen. Außerdem ist es noch abhängig vom Speicher des Raspberry, der in älteren Versionen schnell zugestopft wird.

Eine andere Methode wäre die Aufbereitung von z.B einem Stundenmittel. Dabei würden alle 30 Werte einer Stunde zu einem Mittelwert gebildet, was in einer Jahresübersicht durchaus gefällig ist. Dann wären statt der 262.080 Datensätze nur noch 52w x 7d x 24h = 8.736 Datensätze zu berücksichtigen. Man kann sich schnell ausmalen, welchen Vorteil dies mit sich bringt. Besonders beim Vergleich über Monate oder Jahre hinweg, könnte man alle diese Daten mitteln und diese Mittelwerte in weitere Tabellen einer Datenbank speichern.

Da sind dann die SQL-Programmierer, so wie ich, wieder gefragt, die z.B. über Stored Procedures o.ä. diese Berechnungen fortwährend durchführen. Der Aufwand ist mir aber ehrlich gesagt zu hoch.

Und sowas gibt es schon fertig und bringt mich weiter zu 3.

Zu 3.

Die Round Robin Datenbank RRDtool macht genau das, wie zu 2. in den letzten Absätzen geschrieben. Die Datenbank wird im Vorfeld konstruiert. Dabei werden die zyklischen Abstände und die Anzahl der Messpunkte pro Zyklus definiert. Beim Ankommen der Daten, werden nicht nur die aktuellen Werte oder die Durchschnittswerte auf Basis der Konfiguration verarbeitet, sondern auch gleich die korrekte Zeit mitgegeben. Diese Datenbank ist dann in ihrer Eigenschaft fest eingestellt und kann nachträglich nur sehr umständlich verändert werden. Wenn überhaupt, ich hab’s noch nicht gemacht oder versucht.

Die Ausgabe der Daten erfolgt dann als Grafiken, die mit einem Skript erzeugt werden und als Datei im Filesystem des Raspberry abgelegt werden. Sinnvollerweise macht man das z.B. in einem Verzeichnis, das über einen Webservice (z.B. Apache mit PHP-Skripts) im Raspberry in einem Browser beim Client dargestellt wird. Das hat dann mit dem Nodered Dashboard eher weniger zu tun.

Vorteil:
Die Datei, die die Datenbank beinhaltet (z.B. wetter.rrd) hat immer die selbe Größe. Daten, die aus einem Zyklus herausfallen, z.B. nach einer Woche, werden nach draußen geschoben, um den neuen Datensatz zu speichern.

Nachteil
Eine dynamische Bedienung ist nicht möglich. Ausgabe nur auf Grafikdateien möglich (.PNG, .JPG).

Zu 4.

Aus all den vorangegangenen Überlegungen, komme ich somit nun zu einer ganz anderen Lösung, nämlich eine Kombination aus allen Vorteilen. In aller Munde ist momentan (2019) der Einsatz eines kostenlosen Trios, erhältlich im Internet:

  • NodeRed
  • InfluxDB
  • Grafana

Hier wird Nodered lediglich als Plattform zur Übermittlung der Daten an die InfluxDB Datenbank genutzt. Das Dashboard mit seinen Nodes von NodeRed wird hier nicht mehr benutzt, sondern Grafana.

  1. ist Nodered dafür wie geschaffen mit Hilfe seine Knoten Daten zu empfangen, zu verarbeiten und weiter zu geben.
  2. bietet InfluxDB als weiter entwickelte sog. Timeline Datenbank wie die Round Robin Datenbank alle erforderlichen Mechanismen wie bei den RRDtools an und
  3. liefert Grafana ein Dashboard mit allen Möglichkeiten zur Darstellung von Werten in bestimmten Zeitfenstern, Perioden oder sonstigen Formen an, die um einiges flexibler sind in ihrer Gestaltung, Darstellung und Bedienung als das Nodered Dashboard.

 

Die Praxis zur Langzeitspeicherung von Wetterdaten

Ich entscheide mich somit für meine weitere Entwicklung meiner kleinen Wetterstation für genau diese Konstellation von Werkzeugen.

Vorbereitung

Es kann nicht schaden das Betriebssystem des Raspberry auf den neuesten Stand zu bringen:

$ sudo apt update
$ sudo apt upgrade
$ sudo reboot

Installation NodeRed

Diese Installation wurde schon beschrieben. Hier ist nichts weiter mehr erforderlich.

 

Installation InfluxDB

Download vom Internet und Installation

Die nachfolgenden Aktivitäten beschreiben die Erweiterung des Repos im Raspberry, die Installation und die Konfiguration zum automatischen Start beim Booten des Raspberry.

$ curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -

$ echo "deb https://repos.influxdata.com/debian stretch stable" | sudo tee /etc/apt/sources.list.d/influxdb.list

$ sudo apt update

$ sudo apt install influxdb

$ sudo systemctl enable influxdb

$ sudo systemctl start influxdb

Einrichten InfluxDB

Nun richte ich mir erstmal einen Benutzer dafür ein.

$ influx
> CREATE USER "pi" WITH PASSWORD 'raspberry' WITH ALL PRIVILEGES
> show users
user admin
---- -----
pi   true
> quit
$

Anpassen der Umgebung

Die Datei /etc/influxdb.conf muss nun noch angepasst werden, In der Sektion [http] sind die Zeilen zu finden, bei denen im Grunde nur die Raute # entfernt werden muss. Ich benutze dafür meinen Midnight Commander und rufe ihn mit sudo mc auf, navigiere auf die Datei und prüfe die folgenden Einträge:

[http]
enabled = true
bind-address = ":8086"
auth-enabled = true

Wenn man nun in einem Browser die Adresse des Raspberry mit der Portadresse der Datenbank http://raspberry-pi:8086 eingibt, sollte eine Meldung 404 page not found erscheinen. Das ist richtig so, weil noch kein Seite angelegt ist. Alles andere deutet auf eine falsche Installation hin.

 

Installation Grafana

Am besten schaut man direkt bei Grafana vorbei und holt sich die aktuelle Installation für seine Rechner-Plattform. Zu diesem Zeitpunkt hat Grafana speziell für den Raspberry eine Installation der Version 6.4.3 veröffentlicht, die ich von dieser Webseite aufrufe: https://grafana.com/grafana/download?platform=arm

Dort steht unter Ubuntu & Debian (ARMv6) die Vorgehensweise zur Installation

$ wget https://dl.grafana.com/oss/release/grafana-rpi_6.4.3_armhf.deb
$ sudo dpkg -i grafana-rpi_6.4.3_armhf.deb

Bei dieser Installation gibt es eine Meldung, dass eine Abhängigkeit nicht vorhanden ist und deswegen die Installation abgebrochen ist. Diese Abhängigkeit installiere ich nach:

$ sudo apt install libfontconfig

und beende die unfertige Installation mit

$ sudo apt --fix-broken install

Nun wird der Dienst in das System eingebunden

$ sudo systemctl daemon-reload
$ sudo systemctl enable grafana-server
$ sudo systemctl start grafana-server

Wenn alles korrekt durchgelaufen ist, sollte nun in einem Browser Grafana aufrufbar sein, Grafana benutzt den Port 3000 zur Kommunikation. Also: http://raspberry-pi:3000. In der nachfolgenden Anmeldung wird der Standardbenutzer admin mit Kennwort admin eingetragen.

In den weiteren Schritten werde ich nun meine Datenquellen, also die Sensoren einrichten und die gelieferten Daten abholen, speichern und zur Anzeige bringen.

Im Übrigen benutze ich immer noch den Raspberry Pi 2 mit Raspbian 9 (Stretch)!

Kommentar verfassen

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