Langzeitdatenerfassung BayEOS auf dem Raspberry Pi 2 B (4-Kern, 1GB RAM)

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.

1. Installation der Komponenten:

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.

2. Einrichtung eines ersten 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!

3. Konfiguration der Gateway

Rufen Sie jetzt mit einem Browser das Webfrontend der Gateway auf (http://[IP-Adresse]/gateway/). Default Login ist root + bayeos.

BayEOS Gateway - Boards

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.

4. Daten auf dem BayEOS-Server

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:

BayEOS Viewer

5. Lebensdauer der SD-Karte

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.

6. Nächste Schritte

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.

This site makes use of cookies More information