Wetteraufzeichnung mit dem Raspberry Pi

Bei der Vorstellung von PiLight hatte ich ja bereits gezeigt wie man Automatisierungs- und Steuerungsprojekte mit dem Raspberry Pi umsetzen kann. Wer allerdings eine Visualisierung oder dauerhafte Aufzeichnung der Temperatur benötigt kann das RRDTool für die Aufzeichnung und ein paar einfache PHP-Scripte zur Ausgabe auf einer Webseite verwenden.

Update: Die Methode via RRD-Tools ist komplex und unflexibel, bitte schaut euch als Alternative noch die Option via Google Charts an (muss angepasst werden) oder via EmonCMS. Alle Methoden benötigen allerdings etwas Wissen rund um die eingesetzten Technologien.

Inhaltsverzeichnis

Was ist RRDtool?

RRDtool ist ein Opensource Tool zur Hochleistungsdatenerfassung für Zeitreihendaten. RRDtool kann leicht in Shell-Skripten, Perl, Python, Ruby, Lua oder tcl-Anwendungen integriert werden. Ebenfalls können via RRDTool schöne Grafiken aus den Aufzeichnungen erstellt werden.

Wie funktioniert das?

Wir installieren RRDTool und richten eine Datenbank ein, die Aufzeichnung der Temperatur läuft dann dann als Cron-Job ein sodass regelmäßig Daten erfasst werden. Die Ausgabe der Grafiken erledigen wir dann über eine einfachen Webseite mit PHP sodass wir uns nicht immer am RasPi anmelden müssen und eine schöne Ausgabe haben.

Einrichtung des Temperatur-Sensors

In diesem Beispiel wird ein DS18B20 Temperatursensor mit 4,7k Widerstand und 3,3V für kurze Kabellängen zwischen Sensor und RPi verwendet. Alternativ könnt ihr auch einen fertig verkabelten wasserdichten DS18B29 verwenden.

DS1820B-2

Auf eurem Breadboard kann das Setup dann so aussehen:

DS1820B-3

Bei Raspberry Pi spielt besonders das Laden der Kernel-Module für die Sensoren eine wichtige Rolle. Diese müssen, um mit dem Sensor messen zu können, bei jedem Start des RasPi geladen werden.

Fügt am ende der Datei folgende Zeilen hinzu. Wer die Module nur einmalig laden möchte kann das via “sudo modprobe <modul-name>”

Um die Module zu aktivieren muss der RasPi einmal neu gestartet werden. Die Module sind nun geladen und der angeschlossene Sensor (in diesem Fall ein DS18B20) sollte erkannt werden. Um das zu prüfen, führen wir den folgenden Befehl aus und erhalten die Sensor ID.

Hier wurde ein Sensor erkannt (28-00000530ed24). Jeder Sensor hat eine eigene ID, mit der ausgelesen werden kann. Notiert euch diese am Besten. Um zu testen, ob der Sensor auch funktioniert, lesen wir den Messwert aus (ersetzt die ID mit eurer).

In der letzten Zeile steht nun t=19312, das entspricht einer Temperatur von 19,312 Grad. Somit ist die Einrichtung unseres Temperatur Sensors abgeschlossen.

Installation von RRDTool

Dann müssen wir RRDTool installieren. Wie immer empfiehlt es sich vorher ein Update & Upgrade durchzuführen. Das RRDTool hat ca. 8MB

Als erstes müssen wir mit RRDtool eine Datenbank zur Speicherung der Messdaten anlegen. Hierbei müssen wir uns erst überlegen wie das Intervall für die Messpunkte ist und wie lange wir die Daten zur Auswertung aufbewahren möchten.

In diesem Beispiel habe ich eine RRD Datenbank erstellt mit:

  • Aufzeichnung:
    • Alle 300 Sekunden wird ein Wert akzeptiert (step)
    • Wenn 600 Sekunden kein Wert eingetragen wird ist die Temperatur unbekannt, die Akzeptierten Werte müssen zwischen -30 und 100 liegen (DS:temp:GAUGE:600:-30:100)
    • Die eingetragenen Werte werden 100 Stunden gespeichert (1200 * 300 Sekunden: RRA:AVERAGE:0.5:1:1200)
  • Archiv:
    • Die Minimal und Maximal Werte sowie der Durchschnitt werden jede Stunde aufgezeichnet (12 * 300 Sekunden = 1 Stunde) und 100 Tage gespeichert (2400 Stunden). Die letzten drei Zeilen.

Wir legen also mit RRDTool eine Datenbank mit folgenden Parametern an (unter /home/pi/Temperatur)

Wir legen mit dem Befehl also erstmal das Intervall mit „step 300“ auf 5 Minuten fest, definieren dann unseren Sensoren mit DS und einem Temperaturbereich von -30 bis +100 Grad. Am Ende sehen wir die Parameter für die eigentliche langfristige Datenspeicherung. Bedenkt bei der Anlage der Datenbank das RRDTool den SPeicher für die Daten bank gleich komplett auf eurer SD-Karte belegt.

Damit haben wir unsere Datenbank unter „/home/pi/Temperatur/TemperaturAufzeichnung.rrd“ für die Speicherung angelegt.

Temperaturaufzeichnung einrichten

Ich habe mich dafür entschieden die Temperatur mit einen PHP Skript, welches via Cron Job aufgerufen wird, regelmäßig auszulesen und an das rrdtool zu übergeben.

Wir erstellen uns ein PHP Skript unter /home/pi/Temperatur/

Das Skript hat folgenden Inhalt, entscheidend ist hierbei das ihr die ID des Sensors an eure ID anpasst. Ihr könnt innerhalb dieses Skripts natürlich auch mehrere Sensoren auslesen und an eigene RRD Datenbanken übergeben.

Speichern wie immer bei Nano mit STRG+X dann Y eingeben und Enter. Das Skript muss natürlich noch ausführbar sein und wir benötigen PHP welches den enthaltenen Code interpretiert und ausführt.

Um die Temperaturaufzeichnung nun alle 10 Minuten zu starten erstellen wir noch einen crontab Eintrag (crontab -e).

Jetzt wird unser Script alle 10 Minuten ausgeführt und zeichnet automatisch die Temperatur für uns auf.

Temperatur Grafik erstellen

Hat der Sensor einige Zeit lang Messwerte gesammelt können wir mit RRDtool schöne Grafiken erzeugen, zum Beispiel den Temperaturverlauf als Liniendiagramm visualisieren. Die Erstellung der Grafik erledigt ein Shell Script für uns.

Wir fügen folgenden Inhalt ein:

Die Parameter -s und -e geben den Zeitraum an, mit DEF werden die auszugebenden Informationen durch die Datenbank Datei, Data Source und Konsolidierungsfunktion angegeben. LINE2 zeichnet eine Linie für jede Variable unter Angabe der Farbe und des Namens.

Die Parameter für das Erstellen von Grafiken sind recht kompliziert, ich empfehle daher einen Blick ins WiKi zu werfen, wem das zu technisch ist verwendet am Besten das englische Beispiel-Tutorial auf der Entwicklerseite. In diesem Beispiel erstellen wir eine einfache Grafik mit Ausgabe nach „/home/pi/Temperatur/TemperaturTag.png“.

Das Script muss natürlich noch ausführbar gemacht werden

Temperaturdaten auf Webseite ausgeben

Optional können wir nun noch die vom Raspberry Pi erzeugten Grafiken auf einer Webseite ausgeben. Auch hier verwende ich wieder PHP mit meinem für den RasPi bevorzugten Webserver Lighttpd. Ich habe eine einfache PHP-Anwendung erstellt welche die aktuelle Temperatur des Sensors anzeigt und die Grafiken einbindet. Um die Webseite auf eurem RasPi zum laufen zu bekommen benötigt ihr den Webserver lighttpd und PHP, eine Anleitung zur Installation des Webservers habe ich in diesem Artikel für euch.

Um die Grafiken automatisch zu generieren benötigen wir wieder einen Cronjob und müssen in den Scripten von oben (TemperaturGrafikErstellen.sh) noch den Ausgabepfad auf unser Document Root „/var/www“ legen.

Um die Erstellung der Grafiken nun alle 30 Minuten zu starten erstellen wir noch einen weiteren crontab Eintrag (crontab -e).

Jetzt müssen wir nur noch die Dateien der Webseite im Document Root anlegen.

Webseite

PHP-Code (index.php)

Erstellt mit nano die Datei index.php in eurem Document Root /var/www/ und kopiert folgenden Inhalt hinein

Style Sheet (style.css)

Erstellt mit nano die Datei style.css in eurem Document Root /var/www/ und kopiert folgenden Inhalt hinein