Zum Messen der Bodenfeuchtigkeit benutzen wir den kapazitiven Bodenfeuchtesensor VH400. Versuche mit günstigeren Sensoren fürten sehr schnell zur Auflösung der selbigen. Der VH400 ist ziemlich teuer, aber unterliegt keiner Korrosion und ist sehr langlebig. Der Sensor liefert einen Strom von 0-3 Volt und muss an einen Analog/Digital Wandler angeschlossen werden.
Das Script zum messen und speichern:
# -*- coding: UTF-8 -*- import spidev import MySQLdb import time from time import * #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 # sensorarray = channel, raum, sensornummer sensor=[[ 0,1,1]] # wenn ein senseor dazukommt, muss die zahl höher for i in sensor: print"------------------------------------------------------------" print "A/D-Channel: ",i[0], " - Raum: ", i[1], " - Sensornnummer: ", i[2] z=1 while z < 10: spiantwort = spi.xfer([1,(8+i[0]) << 4,0]) # print "wert1: ", spiantwort[1], " wert2: ",spiantwort[2] messwert = round( ( ( spiantwort[1] * 256 ) + spiantwort[2] ) /6 ) if messwert < 1: print z , ". Messung fehlgeschlagen. Nächste Messung in 3 Sec." z=z+1 sleep(3) else: print "Bodenfeuchtigkeit: ", messwert," %" sensorname = "R"+str(i[1])+"BF"+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] != messwert: cursor.execute("insert into log(datum,zeit,sensor,wert) values('%s','%s','%s','%s')" % (tag, zeit, sensorname, messwert) ) break cursor.execute("SELECT COUNT(*) FROM log") anzahl = cursor.fetchone() print " " print "%s Zeilen in Tabelle log" % anzahl[0] db.commit() db.close()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.