Temperaturmessung mit dem Raspberry Pi

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.

Klimalogger Raspberry Pi
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.

Der Raspberry Pi

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

Steckplatinen Ansicht Temperaturmesser Raspberry Pi
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 https://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

DHT22 am Raspberry Pi
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: http://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

Allnet-ALL3075 V2 Netzwerksteckdose
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 "http://192.168.0.93/r?b=1&r=0&s=0" > /dev/null
# unter 30 Grad ALL3075 einschalten
else lynx -dump "http://192.168.0.93/r?b=1&r=0&s=1" > /dev/null
fi

#ausschalten
else lynx -dump "http://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

Optional

  • Schaltsteckdose ALL 3075 bei Amazon

53 Gedanken zu „Temperaturmessung mit dem Raspberry Pi“

  1. Hallo Rainer,

    der Klimalogger macht einen tollen Eindruck – klasse Arbeit!

    Wir haben eine Wetter Stations App (www.myweathercenter.net) für das iPhone entwickelt. Vielleicht könnte man auch Deinen Klimalogger unterstützen?! An den Raspberry könnte man ja einen Bluetooth Adapter anschließen und so die Daten direkt ans iPhone übertragen!

    Viele Grüße,
    Oliver

    Antworten
  2. Hallo zusammen,

    danke für das gute Tuturial. Leider bekomme ich meinen Sensor damit nicht angesteuert:
    Driver $ sudo ./Adafruit_DHT 22 4
    Using pin #4
    Data (0): 0x0 0x0 0x0 0x0 0x0

    Die Verkabelung stimmt und ich habe auch schon mehrer Pins probiert, klappt leider nicht. Nach Anleitung auf dieser Seite klappt es:
    http://www.sweetpi.de/blog/436/luftfeuchtigkeit-und-temperatur-mit-dem-raspberry-pi-messen

    Doch leider bringt mir die wenig, da ich einen Log File erzeugen möchte um diesen dann aus fhem ansprechen zu können und Aktoren zu steueren.

    Liegt es vielleicht daran, dass ich einen raspberry b+ habe?

    Viele Grüße und ich bin dankbar über jede Hilfe, den das adafruit Tutorial hat leider für mich auch nicht funktioniert *verzweifelt*
    https://learn.adafruit.com/dht-humidity-sensing-on-raspberry-pi-with-gdocs-logging

    Antworten
  3. Abend,

    in deinem Video hast du den Hochkomma Fehler behoben aber nicht in deiner Anleitung. 🙂

    ##############################################################
    #!/bin/bash

    #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 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}‘))
    echo $WERTE

    # Ausgabe semikolonsepariert in Datei
    echo „$datum;$TEMP;$LUFT“ >> log.csv
    ###############################################################

    MfG

    Antworten
  4. Danke für den Eintrag

    Zum Thema Crontab:
    /5 * * * * /../../datei ist falsch

    */5 * * * * /…/…/datei wäre richtig.

    */5 heißt nichts anderes als „In jeder Minute, die ein vielfaches von 5 ist“

    Funktioniert wunderbar 🙂

    Antworten
  5. Mir war es schon in dem YouTube Video aufgefallen und hier auch wieder: Mit „sudo apt-get update“ wird das Betriebssystem noch nicht aktualisiert. Mit dem Befehl wird nur geschaut welche potentiellen updates zur Verfügung stehen. Die eigentliche Aktualisierung muss danach mit „sudo apt-get dist-upgrade“ durchgeführt werden.

    Antworten
  6. Hallo,

    ich glaube ich habe auch noch einen Bug entdeckt. Bei der Codierung der Datumsvariablen wird {e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}m für die Minuten verwendet. Das ist glaube ich falsch, richtig müsste es {e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}M heißen, da sonst in den Minuten immer der Monatswert steht. Aber ansonsten alles prima. Konnte alles nachvollziehen und hat dann nach der kleinen Korrektur auch super geklappt. Danke.

    Antworten
  7. Hallo Rainer,

    während ich noch auf den Sensor warte, bin ich hier gelandet.
    Das Auslesescript werde ich testen sobald der Sensor eintrudelt. Zur Zeit habe ich einen 433mhz Sender, eine 8×8 dot Matrix zum spielen und ein zweiteiliges LCD mit RGB angeschlossen, ich bin sicher das da noch der ein oder andere Sensor angeschlossen werden kann.
    Ein Tipp zur Crontab – */5 anstatt /5.

    Grüsse Timo

    Antworten
  8. Hallo,

    du schrebibst zum Anlegen der Tabelle :“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.“

    Das hört sich gut an 🙂

    Wie öffne ich die mySQL Oberfläche? Muss die nicht erst noch installiert werden (phpMyAdmin)?
    Oder wie lautet der Befehl?

    Gruß

    Antworten
  9. Hallo Rainer,
    ich bin absoluter RPi neuling und wollte ein bischen Bastel was nach deiner Anleitung auch gut geklappt hat nur tut sich nachfolgendes Problem auf:

    Die Uhrzeit wird in der Tabelle nicht richtig angezeit sondern immer nur die Startzeit wenn das programm manuell ausgeführt wurde das ändert sich auch nicht

    ich hab jetzt herausgefunden wie es geht und die Programmierung so angepasst
    #!/bin/bash
    #Aktuelles Datum mit Uhrzeit einer Variablen zuweisen

    datum=$(date +”{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}d.{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}m.{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}y {e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}R”)

    # Im Skript den Ordner wechseln und die Temperaturdaten auslesen
    cd 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}’))
    echo $WERTE
    # Ausgabe semikolonsepariert in Datei
    echo “$datum;$TEMP;$LUFT” >> log.csv

    leider Schreibt er keine Temperatur und Luftfeuchtigkeitsdaten in die csv nur Datum + Uhrzeit – nur die semikolon sind vorhanden

    starte ich das programm im terminal mit
    cd home/pi/adafruit/Adafruit-Raspberry-Pi-Python-Code-master/Adafruit_DHT_Driver/
    sudo ./Adafruit_DHT 22 4
    bekomme ich die Temperatur und Luftfeuchtigkeit angezeigt

    Hast Du vieleicht eine Idee?

    Danke

    Gruß
    Arndt

    Antworten
  10. Kleiner Fehler im Code. Die Minuten werden nicht korrekt
    dargestellt. {e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}m ist der Monat und {e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}M die Minuten.

    Also bitte den Code von

    #Aktuelles Datum mit Uhrzeit einer Variablen zuweisen
    datum=$(date +“{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}d.{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}m.{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}y {e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}H:{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}m“)

    auf

    #Aktuelles Datum mit Uhrzeit einer Variablen zuweisen
    datum=$(date +“{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}d.{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}m.{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}y {e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}H:{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}M“)

    ändern.

    Danke!

    Antworten
  11. Hallo ich hab mysql mit phpmyadmin auf den Raspi installiert. Datenbank läuft aber ich bekomme keinen connect via Skript. Folgende Fehlermeldung bekomme ich: ERROR 1045 (28000): Access denied for user ‚root’@’localhost‘ (using password: YES)

    Hast du vielleicht eine Idee?

    Antworten
  12. Danke für die Anleitung.

    Die notwendige Änderung des Codes bzgl. der Uhrzeit wurde ja schon erwähnt. Bei mir kam es vereinzelt vor, dass der Sensor keine Werte für Temperatur/Feuchtigkeit ausgegeben hat. Daher hab ich in das Skript zum auslesen noch eine Überprüfung eingefügt, ob die Variablen TEMP/LUFT leer sind und ggf. erneute Abfrage nach einer Zeitverzögerung von 1s.

    Antworten
    • Hallo Christian,

      kannst du die Überprüfung ob die Variablen leer sind hier vllt. mal posten? Das würde uns alle denke interessieren. Einfach weil die Lesequote nicht die beste ist beim DHT22.

      Danke

      Antworten
  13. Also, es tut mir leid @admin dass ich jetzt sooft das selbe geschrieben habe, bitte die anderen einfach löschen.

    Ich hänge bei der MySQL anbindung:

    Die Tabelle habe ich wie folgt erzeugt:

    ich öffne phpMyAdmin,
    erstelle den user pi mit pw raspberry

    erstelle eine neue Datenbank namens raspberry
    Wähle die datenbank aus
    klicke oben neben „Struktur“ auf „SQL“
    gebe den code ein:

    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;

    und klicke okay.

    Dann erstellt es mir in der Datenbank raspberry ne Tabelle namens temperatur.
    Die Spalten heißen „luftfeuchtigkeit, temperatur und zeit“.

    trotzdem bleibt das skript hängen.
    line 80: unexpected EOF while looking for matching `“‚

    das ist diese Zeile:
    echo $INSERT | mysql -h $mySQLserver -P $mySQLport -u $mySQLuser -p“$mySQLpass“$

    probiert habe ich:
    – Dollarzeichen am Ende weg (oben musste ich das schonmal machen)
    – Leerzeichen nach -p
    – Anführungszeichen von mySQLpass weg

    das problem ist also vermutlich in diesen Zeilen:
    # 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

    Jemand ne Idee was da nicht funktioniert?

    „looking for matching `“‚“ heißt ja das er auf ein Anführungszeichen wartet aber keines kommt?

    Antworten
    • Hi Christoph,

      ich das Script gerade repariert:

      # WERTE in Datenbank eintragen
      INSERT=“INSERT INTO $mySQLdatabase.$mySQLtable (luftfeuchtigkeit,temperatur) VALUES(‚$LUFT‘,’$TEMP‘);“
      #echo „$INSERT\n“;
      echo $INSERT | mysql -h $mySQLserver -P $mySQLport -u $mySQLuser –password=$mySQLpass;
      # echo $INSERT
      exit 0

      Antworten
  14. Hallo!

    Ich habe dein Tutorial befolgt und (fast) alles funktioniert! Ich verwende den DHT11 zum messen.

    Mein Problem ist, dass nicht bei jedem Messpunkt einen Temperatur- und Luftfeutigkeitswert auslesen kann.

    Jedes mal wenn ich einen Wert auslesen kann steht bei Data: 0x30….
    Jedes mal wenn ich keinen Wert auslesen kann steht bei Data etwas anderes als 0x30….(z.b. 0x20… oder 0x2f….)

    Hat jemand eine Erklärung? 🙂

    MfG Markus

    Antworten
  15. Hi,

    ein schönes Tutorial.
    Ich nutze in dem Zusammenhang den Befehl watch um mir die Messwerte kontiunierlich anzeigen zu lassen, ohne gleich einen CronJob zu starten.

    watch sudo ./Adafruit_DHT 22 4

    fragt immer wieder(2sec.) selbstständig den Sensor ab.
    Strg + c beendet den Spaß wieder.

    Weiter so!

    Antworten
  16. das projekt finde ich super, aber die anbindung an die datenbank bekomme ich nicht auf die reihe. die zugagsdaten werden nicht richtig erkannt. gibt es ein lauffähiges script zum download oder wie auch immer?

    ich würde mich riesig über hilfe freuen.

    Antworten
  17. Guten Tag,

    ich habe diese Anleitung befolgt, benutze jedoch einen DHT11.
    Nur habe ich das Problem, dass nachdem ich das script über „sudo ./Adafruit_DHT 11 4“ gestartet habe, absolut garnichts mehr passiert.
    Die Zeile „Using pin #4“ erscheint zwar, doch auch nach einer Wartezeit kommt nichts weiter. Habe ich vielleicht eine benötigte Software nicht installiert?
    Habe es mit 2 verschiedenen DHT11s getestet, doch jedes Mal mit dem gleichen Ergebnis.
    Ich werde es morgen nochmal mit einem anderen Raspberry benutzen (momentan benutze ich den Raspberry Pi 2 Model B V1.1).
    Die Schaltung selbst wurde auch 1 zu 1 übernommen, die Durchgangsprüfung war auch fehlerfrei.
    Ich bin jetzt am Ende und habe keine Ideen mehr.

    Vielleicht kann mir jemand von euch weiterhelfen.

    Mit freundlichem Gruß
    Johnny

    Antworten
  18. Hallo,

    habe die Anleitung soweit hingekriegt mit der Auslesen.sh.
    Nur leider sind bei mir in der log.csv auch keine Werte drin.
    Obwohl die manuelle Ausführung die Werte rausgibt ..

    Jemand eine Lösung / Idee ??

    Antworten
  19. Hallo

    Schöne Beschreibung. Ein kleiner Fehler ist noch drin. Für die Ausgabe der Zeit im ersten Skript darf es nicht datum=$(date +“{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}d.{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}m.{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}y {e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}H:{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}m“) hießen, sondern datum=$(date +“{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}d.{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}m.{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}y {e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}H:{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}M“).

    Gruß Ulf

    Antworten
  20. Hallo,

    super Anleitung.

    Jedoch hänge ich an einer Stelle, wo viele anscheinend hängen.

    Nach Eingabe von:

    sudo ./Adafruit_DHT 2 44 erscheint nur:

    Using Pin #4

    Und das war es.

    Hat jemand in der Zwischenzeit eine Lösung.

    Gruß
    Martin

    Antworten
  21. Hallo,

    ich habe jetzt 2 Sensoren getestet und beide liefern viel zu hohe Werte (800 Grad, Luftfeuchtigkeit liegt auch in dem Bereich) beide Sensoren liefern die selben Werte. Was mache ich falsch? Tipps?

    Besten Dank

    Antworten
  22. Danke für dieses Komplettwerk.
    Ich nutze die DTH Sensoren schon seit einiger Zeit.
    Mir ist aufgefallen das seit es den Pi B+ gibt und „vermutlich“ der Kernel darauf erweitert wurde es Probleme gibt die DTHs auszulesen.
    Soll heißen: Früher hatte ich fast immer einen gültigen Datensatz beim auslesen des Sensors.
    Seit der Anpassung bekommt man fast keine gültige Messung mehr. Das blöde, man bekommt nur noch B+ zu kaufen so dass man nicht einfach einen alten Kernel nutzen kann.
    Am Sensor liegt es nicht ich hatte diverse zum testen.
    Liegt es nur an mir, oder ist an der Sache etwas dran?
    Gruß Sebastian

    Antworten
  23. Warum benutzt Du denn eine teure Schaltsteckdose. Du hast einen PI und darauf jede Menge GPIO Pins zur freien Verfügung. Was spricht denn dagegen die Schaltung mit einem Relais zu erweitern und hierüber die Heizmatte direkt mit dem PI zu schalten?

    Gruß Thoralf

    Antworten
  24. Hallo,

    Das Script auslesen.sh gibt keine Werte in die .csv Datei, nur Datum Uhrzeit und ; Vllt hat da schon jmd eine Lösung?

    ich hänge leider auch am script mit einem Syntax Error Zeile 33 „(“ unexpected (expected „done) Ich nutze lol_dht22 und/oder Adafruit_Python_DHT. Über den Adafruit Driver steht bei mir nur Using Pin 4 aber keine Werte.

    Das ganze rennt auf einem Rpi2.

    Vielen Dank für eventuelle Antworten.

    Antworten
  25. Hallo,

    ich habe die Anleitung oben befolgt und grundsätzlich funktioniert es sehr gut. Vereinzelt kommt es jedoch vor, dass die Temperatur- und Feuchtigkeitswerte nicht ausgelesen werden können. Um dem entgegen zu wirken, habe ich das script leicht angepasst:

    #!/bin/bash

    #Aktuelles Datum mit Uhrzeit einer Variablen zuweisen
    datum=$(date +“{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}d.{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}m.{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}y {e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}H:{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}M:{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}S“)

    COUNTER=0
    while [ „$TEMP“ == „“ ] && [ $COUNTER -lt 10 ]
    do
    WERTE=$(sudo /home/pi/adafruit/Adafruit-Raspberry-Pi-Python-Code-master/Adafruit_DHT_Driver/Adafruit_DHT 22 4)
    TEMP=( $(echo $WERTE | awk ‚{print $13}‘))
    LUFT=( $(echo $WERTE | awk ‚{print $17}‘))
    let COUNTER=COUNTER+1
    sleep 3
    done

    # Ausgabe semikolonsepariert in Datei
    echo „$datum;$TEMP;$LUFT“ >> /home/pi/humidity/log.csv

    Antworten
  26. Hallo,

    danke für das gute Video.

    Leider gib der Pi mir nur folgendes aus:
    „Data (0): 0x0 0x0 0x0 0x0 0x0“
    Sieht aus als bekommt dieser keine Werte vom Sponsor geliefert. Ist das korrekt und welchen Fehler habe ich gemacht?

    Antworten
  27. Hallo,

    danke für die Anleitung. Da Linux zwischen Groß/Kleinschreibung unterscheidet müsste es am Anfang der Anleitung heissen:

    mkdir Adafruit
    cd Adafruit

    und die Zeile:
    cd Adafruit/Adafruit-Raspberry-Pi-Python-Code-master/Adafruit_DHT_Driver/

    muss in:
    cd Adafruit-Raspberry-Pi-Python-Code-master/Adafruit_DHT_Driver/

    geändert werden, da Sie im vorhergehenden Schritt schon in dem Verzeichnis sind.

    Vielen Dank für die Anleitung,
    Gruß Frank

    Antworten
  28. Ich möchte gerne ein zwei Keller Räume Temperatur und Luftfeuchtigkeit messen.
    Bei einem bestimmten Wert der Luftfeuchtigkeit soll über email alamiert werden so das man reagieren kann.
    Wenn man diese Werte dann noch über http://192.168.xxx.xxx auslesen kann mit einem verkauf der letzten Woche wäre klasse.
    So wie ich das gelesen habe ist das mit dem Raspberry Pi möglich.
    Es gibt verschiedene Anleitungen im Internet mit unterschiedlichen Sensoren.
    Da ich mich aber in der Programmiersache gar nicht auskenne traue ich mich nicht ran.
    Kann mir da jemand über teamviewer helfen?

    Antworten
  29. Hallo Leute,
    habe das Ganze auch mal zusammengebaut. Einiges hat ganz schon geholpert 🙂
    Jetzt läuft es juheee !!!

    Ich frage alle 60 Minuten den DHT 11 ab, ab und zu, ca. 1.2 mal am Tag kommt keine Antwort. Kann man da eine Routine machen wenn das Ergebnis leer ist das man noch mal anfrägt ? Sollte doch einfach gehen, aber wie frägt man ab ? ungleich -30 bis +50 Grad ? Geht das wenn des Ergebnis leer ist ? Hat jemand eine Idee ? Den DHT 11 habe ich schon getauscht, der 2. ist auch nicht anders.

    Grüße an Euren RASPBERRY

    Antworten
    • Hallo,
      ich habe lange mit den DHTs rumprobiert. Immer wieder mal keine
      Daten. Aber noch schlimmer war es, dass die Luftfeuchte gar nicht
      genau gemessen werden konnte. Vor allem, wenn es im Außenbereich
      in den Sättigungsbereich ging, fiel so mancher DHT aus.

      Ich setze seit einigen Monaten einen SHT21 innen und außen ein.
      Keine Probleme mehr, die Daten sind viel genauer, auch im Außeneinsatz
      ohne Probleme.

      Schaut euch mal die Datenblätter dazu an.

      Gruß
      Dirk

      Antworten
  30. Hat eigentlich mal jemand erlebt, dass so eine Bash-Skript-Frickellösung ohne ätzendes Debuggen funktioniert? Ich nicht.
    Kein Wunder, da ruft ein Skript das nächste auf, dann werden Ausgaben durch obskure Filterkommandos gepipet. Und das ganze auch noch schön von der individuellen Verzeichnisstruktur abhängig gemacht.
    Warum??
    Man kann doch einfach den Python-Beispielcode aus dem Adafruit-Paket ergänzen, so dass der selbst das Loggen in eine CSV-Datei übernimmt. Von komplexeren Aufgaben wie Datenbankzugriff oder gar irgendwelchen Regelungen mal ganz abgesehen, das ist ja noch verrückter, sowas in ein Shell-Skript zu verpacken.

    Antworten
    • Damit ich nicht nur meckere: So sieht das modifizierte Python-Skript aus, welches direkt aus der Crontab (mit sudo davor!) aufgerufen werden kann. Ist doch viel schöner, als diese Bash-Syntax, davon kriegt man ja Augenkrebs ;-).

      #!/usr/bin/python
      import Adafruit_DHT
      import datetime

      sensor = Adafruit_DHT.DHT22
      pin = 21
      filename = ‚/home/pi/temphumlog/log_temp_hum.csv‘

      humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)

      if humidity is not None and temperature is not None :
      with open(filename, ‚a‘) as logfile:
      if logfile.tell() == 0 :
      logfile.write(‚Temp [Degree C]; Humidity [{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}]; Date and Time\n‘)

      logfile.write(‚{0:0.1f}; {1:0.1f}; ‚.format(temperature, humidity))
      logfile.write(datetime.datetime.now().strftime(‚{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}d.{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}m.{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}y {e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}H:{e92c0003fed3f2a63f7f662bfe6d7cb8bac1c5b10c577da992f84ab8dab8276b}M\n‘))

      Antworten
      • Hallo Jan,
        gern hätte ich Dein script benutzt, habe es mit copy & paste versucht, doch leider bekomme ich folgende Fehlermeldung:

        SyntaxError: Non-ASCII character ‚\xe2‘ in file dht22_log.py on line 7, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

        Hast Du eine Lösung für mein Problem?
        Wäre Die sehr dankbar.

        Antworten
  31. Hallo, habe alles so gemacht, wie oben beschrieben, jedoch bekomme ich die Fehlermeldung „-bash: cd Adafruit/Adafruit-Raspberry-Pi-Python-Code-master/Adafruit_DHT_Driver/: Datei oder Verzeichnis nicht gefunden“ Wer kann helfen?

    Antworten
  32. Hallo,
    danke für die Anleitung.
    Ich habe einen DHT 11.
    Eine Frage, wie kann ich einen Temperaturwert (oder Luftfeuchte) weiterverarbeiten?
    Ich möchte zum beispiel wenn temp > 25 dann sollte ein anderer GPIO angeschaltet werden?
    Ich finde nirgends eine Erklärung wie ich an den einzelnen Wert des Sensors komme um den weiter zu Verarbeiten.

    Vielen Dank!

    Antworten
  33. Hallo,

    der Aussage dass 5V den Sensor „killen“ würden muss ich leider widersprechen, laut Datenblatt ist der DHT22 auf 3,3V-6V und sogar der DHT11, von welchem ich seit Monaten 4 Stück in Betrieb habe, auf 3,5V-5,5V ausgelegt.

    Grüße

    Antworten

Schreibe einen Kommentar