Der Raspberry Pi ist ein beliebter Einplatinencomputer. Er zeichnet sich durch einen geringen Preis und sehr niedrigen Stromverbrauch aus. In diesem kleinen Howto möchten wir zeigen, wie man mit wenigen Befehlen auf dem Raspberry Pi eine komplette Langzeitdatenerfassung installieren kann.
Ausgehend von einer frischen Rasbian Installation fügt man zunächst das bayeos repository zu /etc/apt/source.list hinzu:
deb http://www.bayceer.uni-bayreuth.de/repos/apt/debian stretch main
Danach importieren Sie mit
sudo su
wget -O - http://www.bayceer.uni-bayreuth.de/repos/apt/conf/bayceer_repo.gpg.key |apt-key add -
den Schlüssel unseres Repositories und führen die folgenden Befehle aus:
sudo apt-get update
sudo apt-get install bayeos-server bayeos-gateway bayeos-viewer-php
Damit ist die Datenbank, der Server und die Gateway installiert. Was jetzt natürlich noch fehlt sind die Datenproduzenten.
Als Datenproduzent nutzen wir
vcgencmd measure_temp
Das liefert die Prozessortemperatur. Mit sed und einen regulären Ausdruck können wir die Temperatur herausschneiden:
vcgencmd measure_temp | sed -e 's/[^0-9]*\([0-9.]*\).C/\1/'
Eine while Scheife mit sleep liefert kontinuierliche Werte.
while sleep 10; do vcgencmd measure_temp | sed -e 's/[^0-9]*\([0-9.]*\).C/\1/'; done
Diese Werte müssen jetzt in das Datenerfassungssystem eingespeist werden. Dazu installieren wir das Paket bayeos-fifo-php. Dieses Paket kann STOUT-Streams verarbeiten und an die BayEOS-Gateway weiterleiten
sudo apt-get install bayeos-fifo-php
In der Konfigurationsdatei /etc/bayeos-fifo.ini definieren Sie das aufzurufende Skript. Dazu fügen Sie unter special options for bayeos-fifo folgende zwei Zeilen ein
script[] = "/bin/bash -c \"while sleep 10; do vcgencmd measure_temp | sed -e 's/[^0-9]*\([0-9.]*\).C/\1/'; done\""
names[] = "Pi-Temp" ;
Ein
sudo /etc/init.d/bayeos-fifo-php start
startet das Skript. Wenn alles richtig ist, sollten Sie jetzt folgendes in /var/log/bayeos-fifo.run.log finden
pi@raspberrypi ~ $ sudo tail -f /var/log/bayeos-fifo/run.log
Option 'tz' not set using default: UTC
2015-06-16 10:34:22 Started writer for Pi-Temp with pid 15878
2015-06-16 10:34:22 Started sender for Pi-Temp with pid 15879
2015-06-16 10:34:22 Started script /bin/bash -c "while sleep 10; do vcgencmd measure_temp | sed -e 's/[^0-9]*\([0-9.]*\).C/\1/'; done" for Pi-Temp with pid 15880
2015-06-16 10:35:46 Pi-Temp: Successfully sent 7 frames
2015-06-16 10:36:46 Pi-Temp: Successfully sent 7 frames
...
Gratulation! Die Daten sind jetzt schon im BayEOS Gateway!
Rufen Sie jetzt mit einem Browser das Webfrontend der Gateway auf (http://[IP-Adresse]/gateway/). Default Login ist root + bayeos.
Die einzelnen Datenproduzenten werden im Gateway als "Boards" bezeichnet. Über Edit, können Sie das "Board" konfigurieren. Das kann beim ersten Aufruf z.T. etwas dauern. Ist eben nur ein Raspberry Pi.
Setzen Sie Name, Sampling Intervall. Konfigurieren Sie den Channel. Für den Export und Langzeitspeicherung empfehlen wir ein Aggrationsintervall von 10 Minuten und die Aggragationsfunktion "avg". Als letztes setzen Sie unter Settings "check delay" auf 60 und haken "Auto Export" an.
Fertig! Ihre Daten werden jetzt automatisch auf den BayEOS-Server weitergereicht.
Das BayEOS-Viewer-Frontend erlaubt Ihnen einen konfortablen Zugriff auf die exportierten Daten. Die default URL ist http://[IP-Adresse]/bayeosViewer/. Login ist wie bei der Gateway root+bayeos
Falls Sie nicht zu schnell waren (der Exporter läuft alle 10 Minuten), sollten Sie jetzt bereits exportierte Daten ihrer CPU-Temperatur im Server finden:
Der Flashspeicher der SD-Karte kann nicht beliebig oft beschrieben werden. Natürlich führt ein kontinuierliche Datenerfassung zu vielen Schreiboperationen. Am besten wäre es, das komplette /var -Verzeichis auf eine kleine USB-Festplatte zu verschieben. Falls Sie das nicht möchten, können Sie die Schreiboperationen dadurch reduzieren, dass die Verzeichnisse
/tmp
/var/tmp
/var/log
/var/lib/php
/var/lib/postgresql/9.6/main/pg_stat_tmp/
in ein temp-FS verschieben. Mehr Informationen dazu unter http://www.zdnet.com/article/raspberry-pi-extending-the-life-of-the-sd-card/ sowie unter http://www.forum-raspberrypi.de/Thread-tutorial-var-log-in-eine-art-ramdisk-auslagern-weitere-optimierungen-bezgl-logs
Unsere /etc/fstab auf unserem raspberry pi sieht wie folgt aus:
proc /proc proc defaults 0 0
/dev/mmcblk0p1 /boot vfat defaults 0 2
/dev/mmcblk0p2 / ext4 defaults,noatime 0 1
tmpfs /tmp tmpfs defaults,noatime,nosuid,size=50m 0 0
tmpfs /var/tmp tmpfs defaults,noatime,nosuid,size=30m 0 0
tmpfs /var/log tmpfs defaults,noatime,nosuid,mode=0755,size=50m 0 0
tmpfs /var/lib/postgresql/9.6/main/pg_stat_tmp/ tmpfs defaults,noatime,nosuid,mode=0700,uid=postgres,gid=postgres,size=50m 0 0
tmpfs /var/lib/php tmpfs defaults,noatime,nosuid,mode=0700,uid=www-data,gid=www-data,size=20m 0 0
# a swapfile is not a swap partition, so no using swapon|off from here on, use dphys-swapfile swap[on|off] for that
Um die Erstellung dieser Konfiguration zu vereinfachen, stellen wir ein entsprechendes Debian-Paket zur Verfügung. Führen Sie dazu die folgenden Befehle aus:
sudo su
apt-get install raspi-tmpfs-varlog
set_fstab_for_bayeos.sh
reboot
Außerdem können Sie den Parameter "max_time" in bayeos-fifo.ini erhöhen (z.B. auf 300). Dadurch werden die Daten nicht seltener an die Gateway geschickt. Entsprechend kommt es zu weniger Schreiboperationen. Gut ist es auch, die SD-Karte nicht zu klein zu wählen.
Ohne diese Maßnahmen hatte eine 4GB SD-Karte bereits nach zwei Wochen Schreibfehler geliefert. Aktuell läuft ein Test mit einer 16GB SD-Karte sowie den gerade beschriebenen Maßnahmen. Ergebnisse werden wir hier ergänzen.
Interessant ist natürlich das Einrichten weiterer Datenproduzenten. Dazu bietet ja die GPIO-Schnittstelle des Raspberry Pis beliebige Möglichkeiten. Aktuell wird auch eine Python Bibliothek für das BayEOS Gateway entwickelt. Dadurch lassen sich die Daten direkt aus einen Python Skript an die Gateway schicken. Auch die Arudino-Bibliotheken bieten vielfältige Möglichkeiten Sensordaten zu erfassen. Weitere Howtos sollen folgen.
Falls Sie gerne mit R arbeiten, können Sie die Zeitreihen mit den BayEOS-R-Paket analysieren.