Inhaltsverzeichnis
Feuchte- und Temperatur-Sensor DHT22
Im folgenden wird beschrieben wie man einen DHT22 am Raspberry Pi anschließt und betreibt.
Sensor anschließen
Dieser benötigt an PIN2 ein Pull up (4,7k - 10k) Widerstand nach 3,3V (GPIO Pin1) und Pin4 Masse (z.B. GPIO Pin 9). Pin2 wird mit einem beliebigen GPIO verbunden (z.B. GPIO23 Pin 16).
Software installieren
sudo apt-get install git-core cd ~ git clone git://git.drogon.net/wiringPi cd wiringPi ./build cd .. git clone https://github.com/technion/lol_dht22 cd lol_dht22 ./configure make
Software starten
Die Pin Nummer von wiringPi, in diesem Fall Pin 4, an dem der Sensor angeschlossen ist wird als Parameter mit übergeben.
sudo ./loldht 4 Raspberry Pi wiringPi DHT22 reader www.lolware.net Data not good, skip Humidity = 57.60 % Temperature = 20.40 *C
Kanäle der Middelware
Es wird 1 Kanal für die Temperatur und 1 Kanal für die Luftfeuchtigkeit benötigt. Siehe: Einrichtung.
Script erstellen
nano ~/dht22script.sh
Die IP-Adresse und UUID müssen angepasst werden.
- dht22script.sh
#!/bin/bash WERTE=$( /home/pi/lol_dht22/loldht 4 | grep Humidity) d=`date +%Y-%m-%d-%H-%M` #echo "$d ergebnis $WERTE" >> /home/pi/log_vom_dht22.log Hum=$(echo $WERTE | awk {'print $3'}) Temp=$(echo $WERTE | awk {'print $7'}) if [ "$(echo $Hum| sed 's/\.//g')" -gt "0" ] && [ "$(echo $Hum | sed 's/\.//g')" -lt "10000" ];then echo "Humidity: $Hum" wget -O /dev/null "http://<IP Adresse>/middleware.php/data/<ID vom Sensor>.json?operation=add&value=$Hum" fi echo "Temperature: $Temp" if [ "$(echo $Temp | sed 's/\.//g')" -gt "-2000" ] && [ "$(echo $Temp | sed 's/\.//g')" -lt "5000" ];then wget -O /dev/null "http://<IP Adresse>/middleware.php/data/<ID vom Sensor>.json?operation=add&value=$Temp" fi
Script ausführbar machen
chmod +x ~/dht22script.sh
Script testen
sudo ~/dht22script.sh
Wenn alles funktioniert, müssten nun in der Middleware die ersten Messwerte ankommen.
cronjob
crontab -e
Folgende Zeile hinzufügen. In diesem Fall wird das Script jede volle Stunde ausgeführt.
0 * * * * sudo /home/pi/dht22script.sh
Das Programm loldht versucht im Sekundentakt bis zu 100 mal, den Sensor auszulesen – bis es „gute“ Daten erhält und diese ausgibt. Wer diesen Sensor also mit sehr schnell veränderlicher Temperatur und/oder Luftfeuchtigkeit per cronjob jede Minute auslesen und die Daten in die DB eintragen will, sollte mit einem zweiten Kommandozeilen-Parameter die Anzahl der Versuche z.B. auf 45 oder maximal 50 begrenzen: Sonst kann es sein, dass ein Job noch gar nicht fertig ist und der nächste schon gestartet werden soll. Mehrere Zugriffe gleichzeitig verträgt der Sensor aber nicht und daher wird es mittels eines Lockfiles verhindert.
Ebenfalls zu beachten ist die „Geschwätzigkeit“ von loldht (und auch des Shell-Scripts). Man sollte also seine Logfiles überwachen – oder in der obigen crontab-Zeile ein
> /dev/null 2>&1
anhängen. Ob sinnvolle Werte geliefert und erfolgreich eingespeichert werden, sieht man ja auch im Volkszähler