Sarkasmus, wenns sein muss.
Popups gibs bei mir jedenfalls nicht.
Sarkasmus, wenns sein muss.
Popups gibs bei mir jedenfalls nicht.
Vielleicht noch ein Erklärungsversuch:
Stell dir das Signal, welches in digitaler Form (also z.B. 00110100011101) aus dem Sensor kommt,
nicht als strömenden Fluss vor.
Das (theoretisch) kein Strom fließt, ist diese Vorstellung (das Modell) einfach nicht passend.
Stell dir das digitale Signal ehr als ein Klopfen an einer Tür vor.
Dabei wird nichts, außer die Information übergeben.
Zumindest solange die Tür zu ist.
Also die Tür ist der hochohmische Widerstand
Moin,
was haltet ihr eigentlich von dieser Schaltung mit diesem Skript: Schaltung
Und dann mit python folgendes Skript laufen lassen:
import os, glob, time
os.system(′modprobe w1-gpio′)
os.system(′modprobe w1-therm′)
base_dir = ′/sys/bus/w1/devices/′
device_folder = glob.glob(base_dir + ′28*′)[0]
device_file = device_folder + ′/w1_slave′
def read_temp_raw():
f = open(device_file, ′r′)
lines = f.readlines()
f.close()
return lines
def read_temp():
lines = read_temp_raw()
while lines[0].strip()[-3:] != ′YES′:
time.sleep(0.2)
lines = read_temp_raw()
equals_pos = lines[1].find(′t=′)
if equals_pos != -1:
temp_string = lines[1][equals_pos+2:]
temp_c = float(temp_string) / 1000.0
temp_f = temp_c * 9.0 / 5.0 + 32.0
return temp_c, temp_f
while True:
print("temp C=%f\ttemp F=%f" % read_temp())
time.sleep(1)
---------------------------------------------------------------------------------
$ python temp_DS18B20.py
temp C=25.187000 temp F=77.336600
temp C=25.125000 temp F=77.225000
temp C=25.062000 temp F=77.111600
temp C=26.312000 temp F=79.361600
temp C=27.875000 temp F=82.175000
temp C=28.875000 temp F=83.975000
PS: Meine Rx- und Tx-Pin's also der eigentliche serielle Port sind freigeschalten und fungieren als Ein- und Ausgang, deswegen liegt das Datenkabel am Tx-Pin an in dem Bild
Ich sehe da keinen Unterschied zu der von uns vorgeschlagenen Schaltung!
In beiden Fällen werden die Pins 3,3V, GND und GPIO4 genutzt.
Der Pin TXD ist auf dem Bild der, der rechts von GPIO4 liegt.
Dein Script wird deshalb nicht funktionieren, weil du nach def nicht einrückst und damit Python die Subroutine / Funktion nicht erkennen kann:
import os, glob, time
os.system(′modprobe w1-gpio′)
os.system(′modprobe w1-therm′)
base_dir = ′/sys/bus/w1/devices/′
device_folder = glob.glob(base_dir + ′28*′)[0]
device_file = device_folder + ′/w1_slave′
def read_temp_raw():
f = open(device_file, ′r′)
lines = f.readlines()
f.close()
return lines
def read_temp():
lines = read_temp_raw()
while lines[0].strip()[-3:] != ′YES′:
time.sleep(0.2)
lines = read_temp_raw()
equals_pos = lines[1].find(′t=′)
if equals_pos != -1:
temp_string = lines[1][equals_pos+2:]
temp_c = float(temp_string) / 1000.0
temp_f = temp_c * 9.0 / 5.0 + 32.0
return temp_c, temp_f
while True:
print("temp C=%f\ttemp F=%f" % read_temp())
time.sleep(1)
Display More
oder so ähnlich, musst du im Original gucken. Kann aus zeitlichen Gründen da nicht einsteigen, nutze selber ein anders - aber auch umfangreicheres - Script.
Display More
Ich sehe da keinen Unterschied zu der von uns vorgeschlagenen Schaltung!
In beiden Fällen werden die Pins 3,3V, GND und GPIO4 genutzt.
Der Pin TXD ist auf dem Bild der, der rechts von GPIO4 liegt.
Dein Script wird deshalb nicht funktionieren, weil du nach def nicht einrückst und damit Python die Subroutine / Funktion nicht erkennen kann:CodeDisplay Moreimport os, glob, time os.system(′modprobe w1-gpio′) os.system(′modprobe w1-therm′) base_dir = ′/sys/bus/w1/devices/′ device_folder = glob.glob(base_dir + ′28*′)[0] device_file = device_folder + ′/w1_slave′ def read_temp_raw(): f = open(device_file, ′r′) lines = f.readlines() f.close() return lines def read_temp(): lines = read_temp_raw() while lines[0].strip()[-3:] != ′YES′: time.sleep(0.2) lines = read_temp_raw() equals_pos = lines[1].find(′t=′) if equals_pos != -1: temp_string = lines[1][equals_pos+2:] temp_c = float(temp_string) / 1000.0 temp_f = temp_c * 9.0 / 5.0 + 32.0 return temp_c, temp_f while True: print("temp C=%f\ttemp F=%f" % read_temp()) time.sleep(1)
oder so ähnlich, musst du im Original gucken. Kann aus zeitlichen Gründen da nicht einsteigen, nutze selber ein anders - aber auch umfangreicheres - Script.
Dieses Skript ist aus einem Buch. Es muss funktionieren. Weshalb sollte es nicht? Was muss ich ändern?
So habe das Script aus dem letzten Post getestet. Es funktioniert schon deshalb - bei mir - nicht, da die 1. Zeile im Script
lauten muss.
Ausserdem erhalte ich folgende Fehlermeldung:
raspberrypi-hzg:~# ./test2.py
File "./test2.py", line 24
temp_string = lines[1][equals_pos+2:]
^
IndentationError: expected an indented block
das kann aber daran liegen dass ich drei Sensoren im Einsatz habe.
Was definitiv funktioniert ist:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import re, os, rrdtool, time
import RPi.GPIO as GPIO
# path and name of the log file
logfile = '/var/log/heizung/error.log'
# For logging rrdtool update data uncomment the next line
# logging = True
logging = False
########## function to save log messages to specified log file
def log(*msg):
# open the specified log file
file = open(logfile,"a")
# write log message with timestamp to log file
file.write("%s %s\n" % (time.strftime("%d.%m.%Y %H:%M:%S ## heizung.py ## "),' '.join(msg)))
# close log file
file.close
######### 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_c = float(m.group(2)) / 1000.0
value_f = value_c * 9.0 / 5.0 + 32.0
f.close()
except (IOError), e:
print time.strftime("%x %X"), "Error reading", path, ": ", e
log('Error reading : No such file or directory:', datei)
return value_c, value_f, path
# define pathes to 1-wire sensor data
# temp_v = 10-000802db9c02
# temp_r = 10-000802db7ae2
# wohnz = 10-000802db6b74
pathes = (
"/sys/bus/w1/devices/10-000802db9c02/w1_slave",
"/sys/bus/w1/devices/10-000802db7ae2/w1_slave",
"/sys/bus/w1/devices/10-000802db6b74/w1_slave"
)
######### Heinzung.py itself ####################
# Endlosschleife
while True:
# read tempatature sensor data
for path in pathes:
#temp_c = read_sensor(path)
#temp_f = temp_c * 9.0 / 5.0 + 32.0
print("temp C=%f\ttemp F=%f\tQuelle=%s"% read_sensor(path))
Display More
Die Wert(e) für pathes sind natürlich anzupassen überflüssige zu sind zu Lösen. Die Ausgabe sieht bei mir dann so aus:
raspberrypi-hzg:~# ./test.py
temp C=53.437000 temp F=128.186600 Quelle=/sys/bus/w1/devices/10-000802db9c02/w1_slave
temp C=29.937000 temp F=85.886600 Quelle=/sys/bus/w1/devices/10-000802db7ae2/w1_slave
temp C=23.562000 temp F=74.411600 Quelle=/sys/bus/w1/devices/10-000802db6b74/w1_slave
temp C=53.437000 temp F=128.186600 Quelle=/sys/bus/w1/devices/10-000802db9c02/w1_slave
temp C=29.937000 temp F=85.886600 Quelle=/sys/bus/w1/devices/10-000802db7ae2/w1_slave
temp C=23.562000 temp F=74.411600 Quelle=/sys/bus/w1/devices/10-000802db6b74/w1_slave
temp C=53.500000 temp F=128.300000 Quelle=/sys/bus/w1/devices/10-000802db9c02/w1_slave
temp C=29.937000 temp F=85.886600 Quelle=/sys/bus/w1/devices/10-000802db7ae2/w1_slave
temp C=23.562000 temp F=74.411600 Quelle=/sys/bus/w1/devices/10-000802db6b74/w1_slave
temp C=53.625000 temp F=128.525000 Quelle=/sys/bus/w1/devices/10-000802db9c02/w1_slave
temp C=30.000000 temp F=86.000000 Quelle=/sys/bus/w1/devices/10-000802db7ae2/w1_slave
temp C=23.562000 temp F=74.411600 Quelle=/sys/bus/w1/devices/10-000802db6b74/w1_slave
temp C=53.687000 temp F=128.636600 Quelle=/sys/bus/w1/devices/10-000802db9c02/w1_slave
temp C=30.000000 temp F=86.000000 Quelle=/sys/bus/w1/devices/10-000802db7ae2/w1_slave
temp C=23.562000 temp F=74.411600 Quelle=/sys/bus/w1/devices/10-000802db6b74/w1_slave
temp C=53.812000 temp F=128.861600 Quelle=/sys/bus/w1/devices/10-000802db9c02/w1_slave
temp C=30.062000 temp F=86.111600 Quelle=/sys/bus/w1/devices/10-000802db7ae2/w1_slave
temp C=23.562000 temp F=74.411600 Quelle=/sys/bus/w1/devices/10-000802db6b74/w1_slave
temp C=53.937000 temp F=129.086600 Quelle=/sys/bus/w1/devices/10-000802db9c02/w1_slave
temp C=30.062000 temp F=86.111600 Quelle=/sys/bus/w1/devices/10-000802db7ae2/w1_slave
temp C=23.562000 temp F=74.411600 Quelle=/sys/bus/w1/devices/10-000802db6b74/w1_slave
Display More
Ich empfehle dir dazu den Artikel auf dieser Seite - nicht jedoch die Schaltung -da bleib bei deiner:
QuoteDisplay More1-wire Softwaretreiber
Die für die Ansteuerung des 1-wire Temperatursensors erforderlichen Kernelmodule sind Bestandteil der Linux-Distribution Raspbian "wheezy". Man muss sie allerdings explizit laden:
sudo modprobe w1-gpio pullup=1
sudo modprobe w1-therm
Wichtig ist der Parameter pullup=1, der dem Modul mitteilt, dass eine parasitäre Speisung über einen Pullup-Widerstand vorhanden ist. Die Module legen im Verzeichnis /sys/bus/w1/devices jeweils ein Unterverzeichnis für jeden gefundenen Sensor an. Der Name des Verzeichnisses setzt sich aus dem Family-Code des Sensors und seiner eindeutigen Identifikationsnummer zusammen. Sensoren vom Typ DS1820 und DS18S20 haben den Family-Code 10, DS18B20 den Code 28 und DS1822 die 22. In jedem Unterverzeichnis gibt es die Datei w1_slave, die Sensorstatus und gemessenen Temperaturwert enthält:
cd /sys/bus/w1/devices
cd 10-000801b5*
cat w1_slave
0f 00 4b 46 ff ff 06 10 0c : crc=0c YES
0f 00 4b 46 ff ff 06 10 0c t=7375
Die Datei besteht aus zwei Zeilen, die jeweils den hexadezimalen Registerdump des Sensor-ICs enthalten. Am Ende der ersten Zeile steht die Prüfsumme (CRC) und die Information, ob es sich um einen gültigen Messwert handelt (YES). Die zweite Zeile endet mit dem Temperaturmesswert in tausendstel Grad Celsius. Im Beispiel beträgt die Temperatur also 7,375 °C. Die Genauigkeit auf drei Stellen hinter dem Komma ist natürlich nur scheinbar; dem Datenblatt des DS18S20 entnimmt man zum Beispiel, dass die Messgenauigkeit ±0,5 °C beträgt. Die tatsächliche Temperatur liegt also irgendwo zwischen 6,8 und 7,9 °C.
Wenn alles soweit funktioniert, dann sollte man die beiden erforderlichen Module in die Datei /etc/modules eintragen, damit sie der Kernel in Zukunft automatisch beim Systemstart lädt:
# /etc/modules
w1-gpio pullup=1
w1-therm
Hallo Technik Freunde. Ich finde in dem Ordner keine Datei! Ich habe den Sensor angeschlossen aber in /sys/bus/w1/devices/ liegt bei mir nichts. Woran kann das liegen?
Gruß
Hallo AliceDeh,
was sagt Dir denn
Wenn hier irgendwas mit 3.18 kommt, dann mach noch den hier Stichwörter suchen
Beste Grüße
Andreas
Hast du vielleicht
Quote
sudo modprobe w1-gpio pullup=1
sudo modprobe w1-therm
vergessen?
Found it!
sudo nano /boot/config.txt
add :
dtoverlay=w1-gpio
Das musste ich in die Datei schreiben noch jetzt aknn ich ihn auslesen Ich danke für eure Hilfe!!
[hr]
RaspiJo: Ich habe versucht deine Schleife nachzubauen.
def read_sensor(/sys/bus/w1/devices/28-0000065fa6c1):
value = "U"
try:
f = open(/sys/bus/w1/devices/28-0000065fa6c1, "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_c = float(m.group(2)) / 1000.0
value_f = value_c * 9.0 / 5.0 + 32.0
f.close()
except (IOError), e:
print time.strftime("%x %X"), "Error reading", /sys/bus/w1/devices/28-0000065fa6c1, ": ", e
log('Error reading : No such file or directory:', datei)
return value_c, value_f, /sys/bus/w1/devices/28-0000065fa6c1
Ich hoffe mal das klappt jetzt
FUNKTIONIERT
cd /sys/bus/w1/devices
cd 28-0000065fa6c1
cat w1_slave
HABE ICH IN DEN SYSTEMSTART EINGEFÜGT
sudo modprobe w1-gpio pullup=1
sudo modprobe w1-therm
[hr]
Syntax Error bei:
def read_sensor(/sys/bus/w1/devices/28-0000065fa6c1):
^ invalid syntax
Was ist beim Pfad falsch?
[hr]
PS:
import os, glob, time
os.system(′modprobe w1-gpio′)
os.system(′modprobe w1-therm′)
base_dir = ′/sys/bus/w1/devices/′
device_folder = glob.glob(base_dir + ′28*′)[0]
device_file = device_folder + ′/w1_slave′
def read_temp_raw():
f = open(device_file, ′r′)
lines = f.readlines()
f.close()
return lines
def read_temp():
lines = read_temp_raw()
while lines[0].strip()[-3:] != ′YES′:
time.sleep(0.2)
lines = read_temp_raw()
equals_pos = lines[1].find(′t=′)
if equals_pos != -1:
temp_string = lines[1][equals_pos+2:]
temp_c = float(temp_string) / 1000.0
temp_f = temp_c * 9.0 / 5.0 + 32.0
return temp_c, temp_f
while True:
print("temp C=%f\ttemp F=%f" % read_temp())
time.sleep(1)
Funktioniert absolut klasse! Ich bekomme nun jede Sekunde das genau Ergebnis in C und F angezeigt. Sehr schön
RaspiJo doch was ist mit deiner Schleife? Ich würde auch diese gerne mal testen, aber was stimmt bei dem PFad nicht?
Gruß
Dein Code lässt sich schwer lesen, bzw. nicht prüfen, da die Einrückungen fehlen!
Bitte die Format-Schaltfläche "Formatierten Code einfügen" verwenden!
Da dürften einfach nur die Anführungszeichen fehlen
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_c = float(m.group(2)) / 1000.0
value_f = value_c * 9.0 / 5.0 + 32.0
f.close()
except (IOError), e:
print time.strftime("%x %X"), "Error reading", path, ": ", e
log('Error reading : No such file or directory:', datei)
return value_c, value_f, path
Display More
Was muss für Path rein? Ich habe den kompletten Pfad angegeben wie oben in dem Code. Doch er sagt falsche Syntax /sys/bus/w1/...
freibeuter: auch mit anführungszeichen meckert er ..
An dieser Stelle muss gar nichts für "path rein"!
Path ist der Übergabeparamter für dir Funktion read_sensor! Ich Zerlege mal das Ganze.
Hier stehen die allgemeinen Definitionen:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import re, os, rrdtool, time
import RPi.GPIO as GPIO
# path and name of the log file
logfile = '/var/log/heizung/error.log'
# For logging rrdtool update data uncomment the next line
# logging = True
logging = False
Display More
Nun folgt die Fehlerbehandlung, wobei beim Aufruf dieser Funktion
der Wert für msg in der Klammer mitgegeben wird.
########## function to save log messages to specified log file
def log(*msg):
# open the specified log file
file = open(logfile,"a")
# write log message with timestamp to log file
file.write("%s %s\n" % (time.strftime("%d.%m.%Y %H:%M:%S ## heizung.py ## "),' '.join(msg)))
# close log file
file.close
Display More
Und die Funktion mit der Fehlermeldung
######### 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_c = float(m.group(2)) / 1000.0
value_f = value_c * 9.0 / 5.0 + 32.0
f.close()
except (IOError), e:
print time.strftime("%x %X"), "Error reading", path, ": ", e
log('Error reading : No such file or directory:', datei)
return value_c, value_f, path
Display More
Der Wert für Path wird beim Aufruf mitgegeben:
Nun zum Hauptteil, der bei dir simpel ausfällt, da du nur einen Sensor hast:
path="/sys/bus/w1/devices/28-0000065fa6c1/w1_slave"
######### Heinzung.py itself ####################
# Endlosschleife
while True:
print("temp C=%f\ttemp F=%f\tQuelle=%s"% read_sensor(path))
Der Wert für den path wird definiert und dann die Endlosschleife gestartet.
So, jetzt gilt wieder probieren geht über studieren.
PS: Das mit dem Übergabeparameter funktioniert in allen Programmiersprachen so.
Ich korrigiere mich. Deine Posts waren vollkommen korrekt alle gesamt, ich habe sie nur falsch interpretiert.
Jetzt steh ich nur noch vor einem Problem:
######### 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_c = float(m.group(2)) / 1000.0
value_f = value_c * 9.0 / 5.0 + 32.0
f.close()
except (IOError), e:
print time.strftime("%x %X"), "Error reading", path, ": ", e
log('Error reading : No such file or directory:', datei)
return value_c, value_f, path
Display More
Was muss ich unten in diesem Code für "datei" einsetzen? Er meckert dort, weil "datei" nicht deklariert ist.
Das ist mein Fehler, ersetze mal datei durch path., dann sollte es klappen!
Traceback (most recent call last):
File "temp_ds18b20.py", line 54, in <module>
print("temp C=%f\ttemp F=%f\tQuelle=%s"% read_sensor(path))
File "temp_ds18b20.py", line 42, in read_sensor
return value_c, value_f, path
UnboundLocalError: local variable 'value_c' referenced before assignment
Ok ist erledigt
Was sagst du dazu?
Hier nochmal der komplette Code:
#!/usr/bin/Python
#-*- coding: utf-8 -*-
import re, os, time
import RPi.GPIO as GPIO
# path and name of the log file
logfile = '/var/log/heizung/error.log'
# For logging rrdtool update data uncomment the next line
# logging = True
logging = False
########## function to save log messages to specified log file
def log(*msg):
# open the specified log file
file = open(logfile,"a")
# write log message with timestamp to log file
file.write("%s %s\n" % (time.strftime("%d.%m.%Y %H:%M:%S ## heizung.py ## "),' '.join(msg)))
# close log file
file.close
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_c = float(m.group(2)) / 1000.0
value_f = value_c * 9.0 / 5.0 + 32.0
f.close()
except (IOError), e:
print time.strftime("%x %X"), "Error reading", path, ": ", e
log('Error reading : No such file or directory:', path)
return value_c, value_f, path
pathes = (
"/sys/bus/w1/devices/28-0000065fa6c1/w1_slave"
)
# Endlosschleife
while True:
# read tempatature sensor data
for path in pathes:
#temp_c = read_sensor(path)
#temp_f = temp_c * 9.0 / 5.0 + 32.0
print("temp C=%f\ttemp F=%f\tQuelle=%s"% read_sensor(path))
Display More
Tausch mal diesen Code
pathes = (
"/sys/bus/w1/devices/28-0000065fa6c1/w1_slave"
)
# Endlosschleife
while True:
# read tempatature sensor data
for path in pathes:
#temp_c = read_sensor(path)
#temp_f = temp_c * 9.0 / 5.0 + 32.0
print("temp C=%f\ttemp F=%f\tQuelle=%s"% read_sensor(path))
Display More
gegen diesen aus:
path = "/sys/bus/w1/devices/28-0000065fa6c1/w1_slave"
# Endlosschleife
while True:
print("temp C=%f\ttemp F=%f\tQuelle=%s"% read_sensor(path))
Und vergleiche das mal mit dem Code den ich im Thread 35 gelefert habe. Manch mal sind auch die kleinen Details von großer Bedeutung.
Ich gehe davon aus, dass dein Sensor die Kennung 28-0000065fa6c1 hat! Sonst ist die Zeile entsprechend anzupassen.
Ähm?^^
Was machen wir nun mit "value_c"?
[hr]
Jawoll!!
Vielen Dank RasPi-Jo für deine Unterstützung meines Projektes.
Ich musste in deiner neuen Code-Zeile nur noch "while true" auf while True" ändern und jetzt läuft es. Ich danke dir, meine andere Lösung aus dem Buch war zwar auch korrekt, aber durch deinen Code und deine Tipps weiß ich nun wie ich auch die Werte mehrerer Sensoren anzeigen lassen kann.
Hier nochmal die korrekten Lösungen.
MEHRERE SENSOREN: pathes = ( "/sys/bus/w1/devices/28-0000065fa6c1/w1_slave", "", "")
#!/usr/bin/Python
#-*- coding: utf-8 -*-
import re, os, time
import RPi.GPIO as GPIO
# path and name of the log file
logfile = '/var/log/heizung/error.log'
# For logging rrdtool update data uncomment the next line
# logging = True
logging = False
########## function to save log messages to specified log file
def log(*msg):
# open the specified log file
file = open(logfile,"a")
# write log message with timestamp to log file
file.write("%s %s\n" % (time.strftime("%d.%m.%Y %H:%M:%S ## heizung.py ## "),' '.join(msg)))
# close log file
file.close
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_c = float(m.group(2)) / 1000.0
value_f = value_c * 9.0 / 5.0 + 32.0
f.close()
except (IOError), e:
print time.strftime("%x %X"), "Error reading", path, ": ", e
log('Error reading : No such file or directory:', path)
return value_c, value_f, path
path = "/sys/bus/w1/devices/28-0000065fa6c1/w1_slave"
# Endlosschleife
while True:
print("temp C=%f\ttemp F=%f\tQuelle=%s"% read_sensor(path))
Display More
EIN SENSOR: pathes = ("/sys/bus/w1/devices/28-0000065fa6c1/w1_slave","", "")
#!/usr/bin/Python
#-*- coding: utf-8 -*-
import re, os, time
import RPi.GPIO as GPIO
# path and name of the log file
logfile = '/var/log/heizung/error.log'
# For logging rrdtool update data uncomment the next line
# logging = True
logging = False
########## function to save log messages to specified log file
def log(*msg):
# open the specified log file
file = open(logfile,"a")
# write log message with timestamp to log file
file.write("%s %s\n" % (time.strftime("%d.%m.%Y %H:%M:%S ## heizung.py ## "),' '.join(msg)))
# close log file
file.close
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_c = float(m.group(2)) / 1000.0
value_f = value_c * 9.0 / 5.0 + 32.0
f.close()
except (IOError), e:
print time.strftime("%x %X"), "Error reading", path, ": ", e
log('Error reading : No such file or directory:', path)
return value_c, value_f, path
path = "/sys/bus/w1/devices/28-0000065fa6c1/w1_slave"
# Endlosschleife
while True:
print("temp C=%f\ttemp F=%f\tQuelle=%s"% read_sensor(path))
Display More
ANDERE LÖSUNG FÜR EINEN (1x) SENSOR:
#!/usr/bin/Python
#-*- coding: utf-8 -*-
import os, glob, time
os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')
base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'
def read_temp_raw():
f = open(device_file, 'r')
lines = f.readlines()
f.close()
return lines
def read_temp():
lines = read_temp_raw()
while lines[0].strip()[-3:] != 'YES':
time.sleep(0.2)
lines = read_temp_raw()
equals_pos = lines[1].find('t=')
if equals_pos != -1:
temp_string = lines[1][equals_pos+2:]
temp_c = float(temp_string) / 1000.0
temp_f = temp_c * 9.0 / 5.0 + 32.0
return temp_c, temp_f
while True:
print("temp C=%f\ttemp F=%f" % read_temp())
time.sleep(1)
Display More
Ich danke auch allen andere die sich bemüht haben mir zu helfen.
Der Ordner "Heizung" muss natürlich per Hand in "/var/log" erstellt werden.
PS: Der Code von RasPi-Jo läuft schneller und performanter.
Die Anzeige nimmt auch die Temperaturänderung schneller war als die zweite Variante.
Ich erkläre den Thread als
-----CLOSED-----