Hallo,
seit rund 8 Monaten erfasse ich bei uns einige Temperaturen. Dazu nutze ich den 1-wire-Bus mit GPIO4 und ein Skript von Martin Kompf. Das hat mir so gefallen, dass ich das System erweitern möchte.
Allerdings wird das System jetzt instabil. Der Aufbau am Tisch mit einer aufgewickelten 20m-Leitung ist halt doch was Anderes, als eine gestückelte Fenster zu Fenster Verbindung.
Eine Lösung könnte der Einsatz eines Busmasters sein. Zumindest am Tisch funktioniert es schon mal mit der Temperaturabfrage nach diesem Tutorial.
Das Ergebnis sieht so aus:
pi@test / $ /home/pi/skripte/temperatur/./owtemp.py
24.625C
24.625C
24.5625C
24.6C
24.625C
24.5625C
24.625C
85C
24.5625C
Es fehlen rechts die Nullen und auch die Fehlmessung (vorletzter Wert) wird akzeptiert.
Nun habe ich aber das Problem, dass ich kein Programmierer bin und froh bin, wenn ich so einigermaßen verstehe, was die Profis hier herzaubern können. Ich möchte schon, dass ich meine bisherige Datenbank beibehalte und "nur" die Datenquelle ändere.
Bisher wird die Datei /sys/bus/w1/devices/**/w1/slave
abgefragt
# 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
Alles anzeigen
zugeordnet und in die RRD-Datenbank eingetragen.
temp1_path = "/sys/bus/w1/devices/28-000006087dbd/w1_slave" # test 1
temp2_path = "/sys/bus/w1/devices/28-00000608b002/w1_slave" # test 2
#
# read sensor data
temp0 = read_sensor(temp0_path)
time.sleep(1)
temp1 = read_sensor(temp1_path)
time.sleep(1)
temp2 = read_sensor(temp2_path)
time.sleep(1)
...
# insert data into round-robin-database
data = "N:%s:%s:%s:%s:%s:%s:%s:%s:%s:%s:%s:%s:%s:%s:%s:%s:%s" % (temp0, temp1, temp2, temp3, temp$
rrdtool.update(
"%s/werte.rrd" % (os.path.dirname(os.path.abspath(__file__))),
data)
Alles anzeigen
Nach dem neuen Tutorial wird so abgefragt:
#!/usr/bin/env python
# owtemp.py. This script prints the measured temperature in grd C and updates every minute.
# siehe http://www.raspberrypi.org/forums/viewtopic.php?t=27379&p=505250
import time
import os
file_name=os.path.join("/","mnt","1wire","28.02B008060000","temperature")
while 1:
file_object=open(file_name,'r')
line=file_object.read()
print(line+'C')
time.sleep(60)
file_object.close()
Alles anzeigen
und die Datendatei sieht so aus: /mnt/28.***/1wire/temperature
Aber wie ich das jetzt zusammenbringen kann, habe ich keine Idee.
Ich habe mehrere Temperatursensoren und möchte in einer späteren Ausbaustufe weitere andere Sensoren abfragen, also nur deren Vorhandensein prüfen.
Könnt ihr mir helfen?