Cookies ermöglichen eine bestmögliche Bereitstellung dieser Webseite. Mit der Nutzung von test-wetterstation.de erklären Sie sich damit einverstanden, dass wir Cookies verwenden. Ob als kleine Wetterstation, Klimalogger, als Überwachung von Temperatur und Luftfeuchtigkeit in Computer- oder
Wohnräumen oder zur Steuerung von Heizsystemen in Gewächshäusern – die Experimentierplattform Raspberry Pi eignet sich hervorragend zur Protokollierung von Temperatur und Luftfeuchtigkeit. Einiges an Geschick und Bastelwillen jedoch vorausgesetzt. Als ambitionierter Bastler kommt man zwangsläufig mit einem Raspberry Pi in Kontakt. Irgendwann schafft man sich diesen Mini-Computer für knapp 30 Euro an und probiert diverse Anwendungsmöglichkeiten aus. Doch längere Zeit läuft keine Anwendung produktiv. Dann irgendwann kam ich aufdie Idee, einen Temperaturfühler
anzuschließen und die aktuelle Luftfeuchte und Temperatur auf dieser Webseite zu veröffentlichen. Den notwendigen Fühler habe ich schnell gekauft, doch Zeit für ein solches „Projekt“ hatte ich nie. Dann, der Frühling stand bevor, kam das Projekt, mit welchem ich alle Anwendungsmöglichkeiten umsetzen konnte und musste: Meine Chili-Aussaat in kleinen Gewächshäusern bedurften einer Heizung, da die sonnige Fensterbank mit darunterliegender Wohnraumheizung fehlt. Entsprechende Heizmatten mit
Fühler sind im Handel zu haben, doch dafür 100 bis 200 Euro zu investieren, war mir zu viel. Wie ich die Temperatursteuerung mit einem Raspberry PI gelöst habe, erwartet Euch in diesem Artikel. Aber auch auf weitere denkbare Anwendungsmöglichkeiten wie die laufende Protokollierung der Temperaturdaten inklusive der Speicherung in einer MySQL-Datenbank gehe ich hier ein. Um es gleich vorwegzunehmen, wer lediglich Temperaturdaten über einen längeren Zeitraum kontrollieren möchte, kann auf die
Wetterstationen Oregon Scientific RAR 501 oder die TFA Dostmann Klimalogg zurückgreifen. Mit rund 80 EUR sind diese Lösungen nicht teuer und die Daten schnell in einer Tabellenkalkulation wie Excel zu verarbeiten. Doch wir
wollen heute andere Wege beschreiten und auch unseren Spieltrieb befriedigen. Und als Spielzeug für Erwachsene ist der Raspberry PI hervorragend geeignet. Wir installieren auf einer mindestens 8 GB großen (Class 10) SD-Karte ein entsprechendes Betriebssystem (ich verwende das Wheezy-raspbian) und nutzen
Putty zur Kommunikation mit dem Mini-Computer. Die genaue Installation vorab zeige ich Euch im Video. Im Netz gibt es zudem unzählige Tutorials zur Installation des Raspberry, so dass ich diesen Punkt hier nur streife. Der Raspberry läuft, ist per LAN-Kabel an ein lokales Netzwerk verbunden und ich konnte mich per Putty-Konsole darauf verbinden (je nach Betriebssystem lautet der User: „pi“ und das
Passwort „raspberry“). Eine Internetverbindung vorausgesetzt, sollte man zu aller erst ein Update durchführen: # zuerst Linux updaten Leider verfügt der Raspberry über keinen eingebauten Temperatursensor. Doch für weniger als 5 EUR kann man einen Sensor (DHT22) kaufen, der neben der Temperatur auch die Luftfeuchtigkeit ermittelt. In meinen Versuchen stellte sich die Qualität der Messungen als erstaunlich gut dar. Ich habe ausschließlich den DHT22 verwendet. In diversen Foren kann man nachlesen, dass der DHT11 billiger, aber auch deutlich schlechter sei. Ich persönlich habe hier keine Erfahrungen gemacht. Vor dem Einschalten des Raspberry ist der korrekte Anschluss zu prüfen. Auf keinen Fall den 5V-Anschluss des Raspberry verwenden.
Dieser würde die DHT22-Sonde killen, da diese nur für 3,3V ausgelegt ist. Nachdem der Sensor und seine kleine Schaltung gebaut und mit drei Kabeln an den Raspberry angeschlossen wurde, kann der Mini-Computer in Betrieb genommen werden. Anschluß nur
bei ausgeschaltetem Gerät und eine Kontrolle der Schaltung setze ich voraus! Der Pi läuft, wir sind via Putty darauf verbunden und legen einen neuen Ordner an. Diese Schritte zeige ich Euch im Video sehr ausführlich. mkdir adafruit Dies war es schon. Die „master.zip“ kann gelöscht werden. Nun wechseln wir das Verzeichnis, rufen das Adafriut-Skript auf
und bekommen – sofern alles funktioniert – die aktuelle Temperatur und Luftfeuchtigkeit präsentiert: cd Adafruit/Adafruit-Raspberry-Pi-Python-Code-master/Adafruit_DHT_Driver/ Die Konsole sollte danach – je nach Klimadaten – das nachfolgende Bild zeigen: _Driver $ sudo ./Adafruit_DHT 22 4
sudo apt-get updateDer Temperatursensor
Anschluss
Sonde/Raspberry Pi:
Installation der Adafruit-Software und erste Messwerte
Dann wechseln wir in den Ordner, laden von Github die Adafruit-Software herunter und entpacken sie. Die einzelnen Schritte lauten:
cd adafruit
wget //github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code/archive/master.zip
unzip master.zip
sudo ./Adafruit_DHT 22 4
Using pin #4
Data (40): 0x1 0xbb 0x0 0xc3 0x7f
Temp = 19.5 *C, Hum = 44.3
Das war es schon. Beachten Sie bitte, dass der Aufruf beim Sensor „DHT 11“ entsprechen „sudo ./Adafruit_DHT 11 4“ lautet.
Automatische Speicherung der Temperaturdaten in ein Logfile oder eine csv-Datei (Excel)
Nun möchten wir natürlich nicht jede Minuten selbst den Befehl zur Temperaturabfrage ausführen und die Daten auch dauerhaft speichern. Dazu erstellen wir ein Shell-Skript und rufen es per Cronjob in einem zu definierenden Intervall auf. Dieses Skript soll auch aus der Textausgabe des Adafruit-Aufrufes nur die zwei Daten der Luftfeuchtigkeit und der Temperatur herausfiltern und speichern.
Wir nutzen den Editor NANO und erstellen
unser Bash-Skript. Wir geben auf der Konsole ein:
nano auslesen.sh
Das Skript:
#!/bin/bash
#Hochkommas angepasst. Siehe Kommentar von Jörg Nießen. Danke!
#Aktuelles Datum mit Uhrzeit einer Variablen zuweisen
datum=$(date +"{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}d.{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}m.{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}y {e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}H:{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}m")
# Im Skript den Ordner wechseln und die Temperaturdaten auslesen
cd /home/pi/Adafruit/Adafruit-Raspberry-Pi-Python-Code-master/Adafruit_DHT_Driver/
WERTE=$(sudo ./Adafruit_DHT 22 4)
TEMP=( $(echo $WERTE | awk '{print $13}'))
LUFT=( $(echo $WERTE | awk '{print $17}'))
# Ausgabe semikolonsepariert in Datei
echo "$datum;$TEMP;$LUFT" >> log.csv
Wir speichern das Skript, müssen dem Skript entsprechende Rechte zur Ausführung geben und starten es:
# Bash-Skript ausführbar machen
chmod u+x auslesen.sh
# Start
./auslesen.sh
Gute Tipps zum Thema Shell gibt es hier: //www.linux-services.org/shell/
Nachdem wir das Skipt nun einmal „per Hand“ ausgelesen und gesehen haben, dass die Datei „log.csv“ erstellt wurde, sollten wir nun das Skript per Cronjob automatisieren. Hierzu geben wir in der Konsole den Befehl „crontab –e“ (Erstellen) ein.
Wir tragen nun in der Crontab die Zeile am Schluss ein:
* * * * * /home/pi/Adafruit/Adafruit-Raspberry-Pi-Python-Code-master/Adafruit_DHT_Driver/auslesen.sh
Nach dem Speichern der Crontab wird nun jede Minute das Skript ausgeführt. Die genaue Parameter der Crontab zur Zeitsteuerung
können im Blog von sirmark nachgelesen werden. Einen Hinweis kann ich an dieser Stelle noch geben. Der Schalter „/5“ bei den Minuten, der normalerweise das Skript alle fünf Minuten ausführen sollte, funktioniert auf meinen Raspberry nicht. Ich habe mich – unschön – mit folgender Zeile beholfen:
5,10,15,20,25,30,35,40,45,50,55 * * * * /home/pi/Adafruit/Adafruit-Raspberry-Pi-Python-Code-master/Adafruit_DHT_Driver/auslesen.sh
Speicherung der Temperaturdaten in einer MySQL Tabelle
Bisher haben wir uns mit der Speicherung in einer semikolonseparierten Datei begnügt. Ich möchte die Daten jedoch auf
einem MySQL-Server in meinem Netzwerk speichern. Denkbar wäre hier auch, einen MySQL-Datenbankserver auf einem externen Webspace anzusprechen um die Daten auf einer Webseite anzuzeigen.
Wir speichern hier die Daten bewusst NICHT auf dem Mini-Computer. Wer die beabsichtigt, sollte sich einmal SQLite anschauen, da dies den Kleinen wahrscheinlich deutlich weniger belastet.
MySQL-Lösung: Hierzu müssen wir auf dem Raspberry PI einen MySQL Client installieren.
sudo apt-get install mysql-client
Auf unserem Mysql-Server legen wir eine Tabelle an (in meinem Beispiel Datenbank „raspberry“, Tabelle „temperatur“. Ich verwende das Feld „zeit“ als PrimaryKey und lasse es von MySQL automatisch vergeben.
CREATE TABLE IF NOT EXISTS `temperatur` (
`zeit` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`luftfeuchtigkeit` decimal(5,2) NOT NULL,
`temperatur` decimal(5,2) NOT NULL,
PRIMARY KEY (`zeit`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Das Ansprechen der MySQL Datenbank ist einfach:
# WERTE in Datenbank eintragen
INSERT="INSERT INTO $mySQLdatabase.$mySQLtable (luftfeuchtigkeit,temperatur) VA$
# echo "$INSERT\n";
echo $INSERT | mysql -h $mySQLserver -P $mySQLport -u $mySQLuser -p"$mySQLpass"$
Das Skript wird wie in Abschnitt 4 ebenfalls per nano (oder einem anderen Texteditor) angelegt, ausführbar gemacht und per Cronjob ausgeführt.
Anschluss externer Geräte
In meinem
Anwendungsfall möchte ich nicht nur wissen und speichern, welche Temperatur und Luftfeuchtigkeit mein kleiner Klimalogger misst, sondern beim Unterschreiten einer bestimmten Temperatur soll die Heizmatte unter meinen Mini-Gewächshäusern angeschaltet werden. Beim Erreichen einer maximalen Temperatur soll meine Saat nicht gegrillt werden. Der Raspberry soll dann die Heizmatte ausschalten. Um dies zu erreichen, muss eine Schaltsteckdose der Heizmatte vorgeschaltet werden. Ich nutze eine
ALL 3075. Diese Schaltsteckdose ist leider nicht gerade sehr billig; aber sehr einfach in der Handhabung. Sie wird einfach per LAN-Kabel an einen Switch angeschlossen und per IP-Adresse angesprochen.
Eine weitere Möglichkeit ist die Verwendung einer Funksteckdose. Entsprechende Lösungen sind
im Netz erhältlich. Auch die c´t hat in der Ausgabe 2014, Heft 3 auf Seite 101 eine entsprechende Lösung vorgestellt. Getestet habe ich diese Möglichkeit nicht. Ich könnte mir vorstellen, dass es Probleme gibt, den Funkmodul und den Temperatursensor gleichzeitig an einen Raspberry Pi anzuschließen. Wer damit Erfahrungen gesammelt hat, kann gerne einen Kommentar hinterlassen!
Zurück zu meiner Netzwerksteckdose: Der Vorteil dieser Schaltung ist, dass lediglich der (http-) Aufruf einer bestimmten URL genügt, um die Steckdose zu schalten. Und dies nach einigem Testen auch sehr zuverlässig. Somit ist es ein leichtes, das Skript dahingehend abzuändern. Im nachfolgenden Skript schalte ich beim Unterschreiten der Temperatur von 30 Grad die Steckdose an, beim Überschreiten von 30 Grad Celsius die Steckdose und somit die Heizmatte wieder aus. Ein Blick in die Natur zeigt, dass es Nachts durchaus kälter ist. Somit wird die Heizmatte im Zeitraum zwischen 8 und 21 Uhr prinzipiell ausgeschaltet.
Das komplette Skript:
#!/bin/bash
# In diesem Skript ermitteln wir die Temperatur über den Raspberry
# Anhand der Temperatur schalten wir eine Temperaturmatte (Gewächshaus) an oder aus.
# Dies geschieht mit der vorgeschalteten Schaltsteckdose (Netzwerkanschluß) ALL3075
# Am Schluss schreiben wir die Temperaturdaten und die Luftfeuchtigkeit in eine MySQL Tabelle
#IP oder Name des MySQL Servers
mySQLserver="192.168.0.XXX"
# MySQL Port (default)
mySQLport="3306"
# MySQL User
mySQLuser="USERNAME"
# MySQL Passwort
mySQLpass="PASSWORT"
# MySQL Datenbankname
mySQLdatabase="raspberry"
# MySQL Tabellenname
mySQLtable="temperatur"
# Adafruit - Verzeichnis
cd /home/pi/Adafruit/Adafruit-Raspberry-Pi-Python-Code-master/Adafruit_DHT_Driv$
# Manchmal kommt es vor, dass keine Temperaturdaten zurückkommen
# daher probieren wir es mehrmals, wenn Variable leer ist
TEMP=
while [ -z "$TEMP" ]
do
WERTE=$(sudo ./Adafruit_DHT 22 4)
TEMP=( $(echo $WERTE | awk '{print $13}'))
LUFT=( $(echo $WERTE | awk '{print $17}'))
# 1 Sekunde warten
sleep 1
done
function ceiling() {
float_in=$1
ceil_val=${float_in/.*}
ceil_val=$((ceil_val+1))
}
# aktuelle stunde ermitteln
stunde=`date +"k"`
# echo $stunde
#
String in INTEGER
ceil_val=
ceiling $TEMP
# echo $ceil_val
# Nun haben wir die aktuelle Stunde und die Temperatur
# Anbindung an eine extrene Quelle. Hier sprechen wir die Schaltsteckdose ALL3075
# unter der IP 192.168.0.93 mittels des Linux-Browsers LYNX an (s=0 : ausschalten; s=1 : einschalten)
# ge = größer gleich, le kleiner gleich
# Wenn größer gleich 8 Uhr UND kleiner gleich 20 Uhr
if [ "$stunde" -ge 8 ] && [ "$stunde" -le 20 ]
then
if [ "$ceil_val" -gt 30 ]
# über 30 Grad ALL3075 ausschalten; hier hat die Schaltsteckdose die IP 192.168.0.93
then lynx -dump "//192.168.0.93/r?b=1&r=0&s=0" > /dev/null
# unter 30 Grad ALL3075 einschalten
else lynx -dump "//192.168.0.93/r?b=1&r=0&s=1" > /dev/null
fi
#ausschalten
else lynx -dump "//192.168.0.93/r?b=1&r=0&s=0" > /dev/null
fi
# WERTE in Datenbank eintragen
INSERT="INSERT INTO $mySQLdatabase.$mySQLtable (luftfeuchtigkeit,temperatur) VA$
# echo "$INSERT\n";
echo $INSERT | mysql -h $mySQLserver -P $mySQLport -u $mySQLuser -p"$mySQLpass"$
# echo $INSERT
exit 0
Einkaufsliste für unseren Klimalogger
- DHT22 Sensor bei Amazon
- Steckbrett (Breadboard) bei Amazon
- Kabel männlich/weiblich bei Amazon
- Kabel männlich/
- Kabel männlich/männlich bei Amazon
- Widerstand 4700 Ohm
- Raspberry Pi bei Amazon
- Netzteil bei Amazon (oder altes Handy Netzteil)
- SD-Karte (8 GB, Class 10) bei Amazon
Optional
- Schaltsteckdose ALL 3075 bei Amazon