Selbstverständlich, jetzt sind ja immer Werte da. Macht ja keinen Sinn das Rad neu zu erfinden, ich hätte eine ähnliche Routine programmiert, da kann man auch die fertige nehmen und damit weiterarbeiten.
Das es zeitweise ein paar Sekunden dauert liegt daran, dass dieses Programm wie erwähnt 15 Wiederholungen startet wenn kein Wert gefunden wurde. (Mit jeweils 2 Sekunden Abstand)
Spielt aber ja keine Rolle, so wirds funktionieren.
Ich ergänze den Beitrag mit neuem Code wenn ich diesen dann fertig habe
--------------------------
So, ich habe hier jetzt mal eine Kleinigkeit gemacht, die kannst du aber vermutlich noch nicht nutzen. Ich müsste von dir noch wissen, wie du die Datenbank angepasst hast (also wo jetzt was steht), am besten lädst du mir dazu wieder deine .rrd-Datei hier als Anhang hoch. So kann ich das genau anpassen.
Das ist jetzt das gleiche Script was du vorher auch verwendet hast, also müsstest du die aktuelle Datei durch diese hier ersetzen. Passe den Namen der Datei dann so an wie er bei dir war, du hast darauf ja einen Cronjob oder so eingestellt.
Falls du gerade Zeit hast, könntest du das mal da rein tun und dir die Datenbank anschauen was da passiert und die Werte hier posten. (Kannst du ja mit dem Fetch-Befehl machen den wir schon ein paarmal verwendet haben)
Wenn die Spalte für die Luftfeuchtigkeit jetzt ganz vorne in der DB ist, müsste es eigentlich auf Anhieb funktionieren. (wenn du nicht auf den Cronjob warten willst, kannst du das Script ja wie gewohn mit "python scriptname.py" ausführen. (Denk dran die Datei an die Stelle von deinem alten Script zu schieben und entsprechend gleich zu nennen!!)
#!/usr/bin/python
# -*- coding: utf-8 -*-
import re, os, rrdtool, time, sys, Adafruit_DHT
# function: read and parse sensor data file
def read_sensor(path):
value = "U"
try:
f = open(path, "r")
line = f.readline()
if re.match(r"([0-9a-f]{2} ){9}: crc=[0-9a-f]{2} YES", line):
line = f.readline()
m = re.match(r"([0-9a-f]{2} ){9}t=([+-]?[0-9]+)", line)
if m:
value = str(float(m.group(2)) / 1000.0)
f.close()
except (IOError), e:
print time.strftime("%x %X"), "Error reading", path, ": ", e
return value
# define pathes to 1-wire sensor data
pathes = ("/sys/bus/w1/devices/10-000802e3d0a3/w1_slave","/sys/bus/w1/devices/10-000802e4210e/w1_slave","/sys/bus/w1/devices/28-000006d7409a/w1_slave")
data = 'N'
# DHT11 an GPIO 4 auslesen & prüfen
humidity, temperature = Adafruit_DHT.read_retry(11, 4)
if humidity is not None and temperature is not None:
data += ':'
data += str(humidity)
# read sensor data
for path in pathes:
data += ':'
data += read_sensor(path)
time.sleep(1)
# insert data into round-robin-database
rrdtool.update("%s/temperature2.rrd" % (os.path.dirname(os.path.abspath(__file__))),data)
Alles anzeigen