Adafruit_dht immer die gleichen werte

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.

Der Raspberry Pi als Klimalogger: Mit ein bischen Bastelaufwand kann er Temperatur und Luftfeuchtigkeit automatisch speichern.

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
sudo apt-get update

Der Temperatursensor

Der Schaltplan: Der DHT22, ein Widerstand und ein paar Kabel. Der Raspberry Pi ist schnell zum Klimalogger umgebaut.

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.

Anschluss Sonde/Raspberry Pi:

  1. Der PIN 1 der Sonde wird an die Stromversorgung (3,3V) des Raspberrys angeschlossen
  2. PIN 2 der Sonde wird – wie in der Schaltung ersichtlich – mittels eines Widerstandes (4700 Ohm) und der Stromversorgung mit PIN 4 verbunden
  3. PIN 3 bleibt unbelegt
  4. PIN 4 wird an die Masse des Raspberry angeschlossen

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.

Installation der Adafruit-Software und erste Messwerte

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.
Dann wechseln wir in den Ordner, laden von Github die Adafruit-Software herunter und entpacken sie. Die einzelnen Schritte lauten:

mkdir adafruit
cd adafruit
wget //github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code/archive/master.zip
unzip master.zip

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/
sudo ./Adafruit_DHT 22 4

Die Linux-Konsole solle – wenn alles korrekt ist – nun die Temperatur und die Luftfeuchtigkeit ausgeben.

Die Konsole sollte danach – je nach Klimadaten – das nachfolgende Bild zeigen:

_Driver $ 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

Deutlich über 100 Euro muss man für eine Netzwerksteckdose anlegen. Billiger – aber weniger komfortabler – geht es mit Funksteckdosen aus dem Discounter.

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

Toplist

Neuester Beitrag

Stichworte