Raspberry Pi
Grow-Box Environment Control

Startseite Installation und Vorbereiten GPIO Anschlussplan Liste der Sensoren
Messen: Temperatur und Luftfeuchtigkeit Licht Bodenfeuchtigkeit
Steuern: Cronjob Licht Abluft Umluft -->
Webserver Dateien: : Logs darstellen Sollwerte einstellen Steuern

Temperatur und Luftfeuchtigkeit im Growroom loggen mit dem Raspberry Pi

Tempertur / Luftfeuchtgkeitsensor DHT22

Für das Messen der Temperatur und Luftfeuchtigkeit benutzen wir den Doppelsensor DHT22. Der Sensor ist mit Breakoutboard und kann direkt an einen GPIO Anschluss gesteckt werden. Dazu muss noch +5 Volt und Masse angeschlossen. Im vergleich zum DHT11 ist der Sensor genauer und dabei nicht viel teurer.

/grow/messen_temperatur.py


# -*- coding: UTF-8 -*-
import spidev
import Adafruit_DHT
import MySQLdb
import time
from time import *

sensortyp = Adafruit_DHT.DHT22

#spi vorbereiten (channel 0)
spi = spidev.SpiDev()
spi.open(0,0)

# aktuelle, lokale Zeit als Tupel
lt = localtime()

# Entpacken des Tupels, Datum
jahr, monat, tag, stunde, minute, sekunde = lt[0:6]
tag = "%04i-%02i-%02i" % (jahr,monat,tag) 
zeit = "%02i:%02i:%02i" % (stunde,minute,sekunde) 

db=MySQLdb.connect("127.0.0.1","pi","f6g7h8","grow")
cursor = db.cursor() 

print tag, zeit
# sensor pins: 4,17,27   sensorarray = gpio pin, raum, sensornummer

sensor=[[ 4,0,1],[17,1,1],[27,1,2]]

# wenn ein senseor dazukommt, muss die zahl höher
for i in sensor:
	print" ------------------------------------------------------------"
	print "Sensor - Pin: ",i[0], " - Raum: ", i[1], " - Nummer: ", i[2]

	z=1
	while z < 10:
		h, t = Adafruit_DHT.read_retry(sensortyp, i[0])
		h=round(h/2)*2
		t=round(t)
		if h > 99:
			print z , ". Messung in Raum ", i[1] ," Sensor ", i[2] ,"fehlgeschlagen. Nächste Messung in 3 Sec."
			sleep(3)
		else:
			print "Raum ", i[1] ," Sensor ", i[2] , " Temperatur: ", t," C   Luftfeuchtigkeit: ", h," %"
			sensorname = "R"+str(i[1])+"T"+str(i[2])
			cursor.execute("select wert from log where datum='%s' and sensor='%s' order by zeit desc" % (tag, sensorname) )
			wert=cursor.fetchone()
			if not wert or wert[0] != t:
				cursor.execute("insert into log(datum,zeit,sensor,wert) values('%s','%s','%s','%s')" % (tag, zeit, sensorname, t) )
			
			sensorname = "R"+str(i[1])+"H"+str(i[2])
			cursor.execute("select wert from log where datum='%s' and sensor='%s' order by zeit desc" % (tag, sensorname) )
			wert=cursor.fetchone()
			if not wert or wert[0] != h:
				cursor.execute("insert into log(datum,zeit,sensor,wert) values('%s','%s','%s','%s')" % (tag, zeit, sensorname, h) )
			break

cursor.execute("SELECT COUNT(*) FROM log")
anzahl = cursor.fetchone()
print "%s Zeilen in Tabelle log" % anzahl[0]      

db.commit()
db.close()


Diese Zeile muss angepasst werden:
# sensor pins: 4,17,27 sensorarray = gpio pin, raum, sensornummer
sensor=[[ 4,0,1],[17,1,1],[27,1,2]]
heist so viel wie sensor=[[GPIO 4, Raum 0, Sensornr. 1],[GPIO 17, Raum 1, Sensornr. 1],[GPIO 27, Raum 1, Sensornr. 2]] wir haben also 1 Sensor für die Zuluft und 2 Sensoren im Growraum auf verschiedenen Höhen. Die Zeile ist individuell kürzbar oder erweiterbar für x Sensoren in X Räumen.

Das Script kann von Hand ausgeführt werden und gibt die Daten als Text aus oder per Cronjob und schreit die Daten in die Datenbank. Allerdings erst wenn sie die Werte verändert haben.

Zum automatischen ausführen als Cronjob, zB alle 2 Minuten:
crontab -e
*/2 * * * * /usr/bin/python /home/pi/grow/messen_temperatur.py