Eigene Raspberry Pi Wetterstation mit OpenHAB 2 bauen

Eines der beliebtesten Projekten neben der Hausautomatisierung und Robotern ist die eigene Raspberry Pi Wetterstation. Diese kann sowohl für den Innen- als auch Außenbereich verwendet werden und ist dazu beliebig erweiterbar. Die Daten lassen wir entweder über eine Weboberfläche von anderen Geräten aus anzeigen, oder nutzen den Raspberry Pi Touchscreen.

In diesem Tutorial erstellen wir eine funktionsfähige und erweiterbare Wetterstation, die über einen Touchscreen abgerufen und gesteuert werden kann.

 

Zubehör für die Raspberry Pi Wetterstation

Für die Wetterstation wirst du folgendes Zubehör benötigen. Dabei können natürlich auch einzelne Komponenten weg gelassen oder hinzugefügt werden. Der Code muss dann allerdings auch entsprechend angepasst werden.

Darüber hinaus sind weitere Sensoren wie bspw. Gas Sensoren, Helligkeitssensoren oder aber Windstärke Sensoren auch eine Möglichkeit, welche eingebunden werden können.

Eine weitere Möglichkeit ist es einen ESP8266 NodeMCU oder Raspberry Pi Zero W als Außenposten für die Wetterstation zu nutzen. Auf die Anzeige auf einem LCD Display wird in diesem Tutorial nicht explizit eingegangen. Wie man darauf Daten anzeigen lässt ist in einem vorherigen Tutorial genauer erklärt und kann ggf. angepasst werden.

 

 

Aufbau & Verkabelung

Beginnen wir mit der Verkabelung aller Module. Am einfachsten ist dies beim offiziellen Raspberry Pi Touchscreen. Dieser kann über das Ribbon Kabel an den DSI Port des Raspberry Pi’s angeschlossen werden. Strom bekommt es entweder über den 5V Pin oder per USB Anschluss. Eine genaue Beschreibung gibt es hier.

Anschließend sind die Sensoren dran. Auch diese wurden in vorherigen Tutorials genauer besprochen, aber an dieser Stelle gibt es erneut den Aufbau:

Der DHT11 Sensor wird wie in der Abbildung zu sehen mit 3.3V und GND verbunden. Der Datenpin geht an GPIO23 und gleichzeitig über einen 10kΩ Widerstand an 3.3V.

Der BMP180 wird lediglich an den I2C Bus angeschlossen und bekommt ebenfalls eine Verbindung zu 3.3V und GND.

Raspberry Pi Wetterstation OpenHAB Steckplatine

Raspberry Pi Wetterstation Steckplatine der Sensoren

 

Vorbereitung: OpenHAB & Pakete installieren

Als Oberfläche nutzen wir OpenHAB, welches generell ein sehr guter Einstieg in die Hausautomatisierung ist. Da es verschiedene grafische Oberflächen bietet, ist es nicht notwendig, dass wir unsere eigene GUI erstellen. Diese können wir später noch individualisieren.

Daher beginnen wir damit OpenHAB 2 auf dem Raspberry Pi zu installieren. Ist dies vollendet öffnen wir http://openhabianpi:8080/paperui/index.html#/extensions und suchen unter „Binding“ das Paket „Exec Binding“ sowie unter den Tabs „Persistence“ das Paket „RRD4j Persistence“ und unter „Transformations“ das Paket „RegEx Transformation“. Alle werden installiert.

Nun loggen wir uns per SSH ein und installieren die benötigten Pakete für den DHT und BMP180 Sensor:

sudo apt-get update
sudo apt-get install build-essential python-dev python3-dev python3-openssl python3-smbus python3-pip i2c-tools git
git clone https://github.com/adafruit/Adafruit_Python_DHT.git && cd Adafruit_Python_DHT
sudo python3 setup.py install
cd ..
git clone https://github.com/adafruit/Adafruit_Python_BMP && cd Adafruit_Python_BMP
sudo python3 setup.py install

Falls du Python2 statt Python3 nutzen willst, musst du die Pakete und Installationsaufrufe entsprechend anpassen.

Anschließend müssen wir noch I2C aktivieren:

sudo raspi-config

Unter „Interfacing Options“ -> „I2C“ aktivieren wir es (dies kann von Raspbian Version variieren, aber ist immer in der raspi-config enthalten).

Sofern der BMP Sensor bereits angeschlossen ist, können wir testen, ob er bereits erkannt wurde:

i2cdetect -y 1

Das Ergebnis sollte so aussehen:

 0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- 77

 

 

Raspberry Pi Wetterstation einrichten

Die Funktionen, die wir nutzen werden, brauchen Tools, die uns die Daten ausliefern. Am einfachsten geht dies mit Python, wofür es viele Bibliotheken gibt (u.a. die wir bereits genutzt und installiert haben). Wir starten also mit dem Hauptskript:

sudo nano /etc/openhab2/scripts/weatherstation.py

Es bekommt folgenden Inhalt:

Speichere mit STRG+O und kehre mit STRG+X zur Shell zurück (in den nächsten Schritten ebenso).

Außerdem müssen wir diesem Skript und dem I2C Modul noch Admin Berechtigungen geben, die wir für die GPIO Aufrufe benötigen:

sudo chmod +x /etc/openhab2/scripts/weatherstation.py
sudo chmod a+rw /dev/i2c-*

Damit die Rechte für I2C auch dauerhaft gesetzt werden, lassen wir es bei jedem Reboot ausführen. Dies geht per Crontab:

sudo crontab -e

Sofern du noch keinen Editor eingestellt hast, wähle 2. nano aus. Füge nun am Ende folgende Zeile hinzu und speichere die Datei:

@reboot sudo chmod a+rw /dev/i2c-*

 

Nun geht es weiter mit den Things: Pro Wert (Temperatur, Luftfeuchtigkeit, Luftdruck, etc.) müssen wir ein Thing anlegen. Dazu nutzen wir das vorher installierte Exec Add-On, womit wir Shell Aufrufe starten können. Für die Speicherung brauchen wir ebenso „RRD4j Persistence“ (unter Add-ons -> Persistence). Unser Python Skript nimmt verschiedene Parameter an und gibt entsprechende Werte zurück. Dies nutzen wir:

sudo nano /etc/openhab2/things/weatherstation.things

Als nächstes kommen unsere Items ins Spiel:

sudo nano /etc/openhab2/items/weatherstation.items

Damit die Daten dauerhaft (jede Minute) in der Datenbank gespeichert werden, müssen wir dies angeben, indem wir es in eine .persist Datei schreiben:

sudo nano /etc/openhab2/persistence/rrd4j.persist

Bisher haben wir jeweils zwei Items erzeugt. Das eine als Textwert aus dem Skript und das andere als Zahlwert, den wir ggf. noch verändern können. Dies geht mit Rules:

sudo nano /etc/openhab2/rules/weatherstation.rules

Hier ist auch eine Veränderung über Regex Werte und ein Debug-Logging möglich. Generell können hier andere Ereignisse getriggert werden – bspw. dass wenn die Temperatur über 30 Grad wird, dass der Ventilator (sofern verbunden) angeht. Bei Interesse können wir solche Szenarien in zukünftigen Tutorials durchgehen und erklären.

Nun erstellen wir noch eine schönere Ansicht. Diese ist allerdings nicht mit der PaperUI sichtbar, daher müssen wir in die BasicUI verwenden: http://openhabianpi:8080/basicui/app
Dafür erstellen wir eine Sitemap, in der die bisherigen Items eingefügt werden können:

sudo nano /etc/openhab2/sitemaps/weatherstation.sitemap

Aktualisiere danach die BasicUI Seite und wähle die Sitemap „Weahterstation“. Hier werden nun alle Werte und die vorherigen Werte in einer Tabelle angezeigt. Da die Werte doch recht unterschiedlich sind (Luftdruck ~1000 [hPa], Temperatur 0-30 [°C], Luftfeuchtigkeit ~ 20-70 [%]) können wir ggf. auch verschiedene Graphen/Charts anlegen oder bspw. statt hPa die Einheit Bar verwenden.

Raspberry Pi Weatherstation OpenHAB Panel

 

Darüber hinaus könnten wir die Temperatur natürlich auch mit dem BMP180 messen. Ebenso kann er die Höhe (in Metern) und den Meereslevel-Druck („Sealevel Pressure“) messen. Mit den angegeben Beispielen sollte es ein Kinderspiel sein die Dateien ggf. zu erweitern.

Sollte wider Erwarten etwas nicht so funktionieren, wie es sollte, so hilft oft ein Blick in die Logs. Wie du darauf zugreifen kannst ist in diesem Artikel erklärt (bspw. per Karaf Konsole).

 

Zusatz: Wettervorhersage über Yahoo! einrichten

Unsere Raspberry Pi Wetterstation soll noch ein Zusatzfeature bekommen: Neben den aktuell gemessenen Daten, wollen wir auch Vorhersagen für den nächsten Tag treffen. Dieses Feature ist optimal, aber macht einiges aus. Wir können zwischen verschiedenen Anbietern wir Forecast.io, OpenWeatherMap, Yahoo! uvm. wählen. Je nach Ort sind manche genauer oder besser geeignet. Da man außer für die Vorhersagen von Yahoo überall einen API Key braucht, nutzen wir der einfachheit halber diesen Service. Natürlich kann er aber auch durch einen anderen ersetzt werden.

Dazu nutzen wir das OpenHAB Wetter Binding. Gehe in der PaperUI wieder auf „Add-Ons“ -> „Bindings“ und installiere das „Weather Binding“.

Außerdem brauchen wir eine sog. WOEID. Diese benötigte WOEID Nummer für deine Stadt bekommst du auf dieser Website. Suche deinen Ort und kopiere die Nummer.

Nun erstellen wir eine Konfigurationsdatei:

sudo nano /etc/openhab2/services/weather.cfg

Folgender Inhalt kommt hinein:

Nun müssen wir noch entsprechende Items erstellen. Dazu bearbeiten wir die vorher angelegte Things-Datei und fügen folgende Zeilen hinzu (forecast=1 gibt an, dass die Werte für den nächsten Tag abgerufen werden, 2 für den übernächsten Tag, usw.). Wir können auch verschiedene Orte in der Konfigurationsdatei erstellen (bei uns ist nur „home“ definiert) und danach Items für verschiedene Orte anlegen:

Außerdem muss die Sitemap noch angepasst werden:

Weitere Dateien müssen nicht angepasst werden, da wir keine Speicherung von Vorhersagen möchten. Möchtest du andere Icons in der Sitemap nutzen, kannst du entweder eigene hochladen oder auf die Standardicons zurückgreifen.

Um die gesamte Bandbreite der Werte (Wind, Wolken, Niederschlag, Schnee, gefühlte Außentemperatur, Nebel/Sichtweite etc.) nutzen zu können, kannst du dir die weiteren Beispiele ansehen.

 

Raspberry Pi Wetterstation Daten auf Touchscreen anzeigen

Bevor wir mit der Installation starten, muss das Display angeschlossen und mit Strom versorgt sein.

Da openHAB auf Raspbian Lite basiert, hat es dementsprechend keine grafische Oberfläche. Um das Webpanel auf dem Touchscreen automatisch anzeigen zu lassen, müssen wir diese also erst nachinstallieren. Wir wählen die PIXEL Oberfläche und den Chromium Browser. Die Installation läuft über SSH.

sudo apt-get install --no-install-recommends xserver-xorg --yes
sudo apt-get install --no-install-recommends xinit --yes
sudo apt-get install raspberrypi-ui-mods --yes
sudo apt-get install chromium-browser --yes

Wir aktivieren zunächst das automatische Login auf den Desktop:

sudo raspi-config

Wähle unter „Boot Options“ -> „Desktop / CLI“ -> „Desktop“ aus.

Nun stellen wir das automatische Login in die GUI ein:

sudo nano /etc/lightdm/lightdm.conf

Wir suchen die Zeile „#autologin-user=“ (Suchen geht einfach mit STRG+W) und entfernen die Raute am Anfang und setzen am Ende den User „openhabian“, sodass sie so aussieht:

autologin-user=openhabian

Speichere mit STRG+O und gehe zurück in die Konsole mit STRG+X.

Nun stellen wir noch sicher, dass der Browser mit der entsprechenden Seite beim Start auch

sudo nano /home/openhabian/.config/lxsession/LXDE-pi/autostart

Ganz ans Ende der Datei kommt folgende Zeile.

@xset s noblank
@xset s off
@xset -dpms 
@sudo chmod a+rw /dev/i2c-*
@/usr/bin/chromium-browser --kiosk --disable-restore-session-state http://http://openhabianpi:8080/basicui/app?sitemap=weatherstation

Außerdem müssen wir noch eine weitere Datei bearbeiten:

sudo nano /etc/kbd/config

Hier ändern die Werte der folgenden beiden Einträge auf Null:

BLANK_TIME=0
POWERDOWN_TIME=0

Nach dem Speichern starten wir den Raspberry Pi neu:

sudo reboot

Nun wird der Browser gestartet, jedoch dauert es einen Moment, bis auch OpenHAB gestartet ist und das Panel sichtbar wird.