Mehrere DS1820 Sensoren am Raspberry Pi mit Python einlesen
Der in diesem Beitrag veröffentlichte Programmcode soll die automatische Einbindung von DS1820 Sensoren, die an den 1-Wire Bus des Raspberry Pi angeschlossen sind, ermöglichen. Dies soll die Einbindung der Sensoren in das Python-Programm vereinfachen bzw. das Programm auch nach einem Sensorwechsel weiterlaufen lassen.
Die notwendigen Schritte zur Einbindung der Sensoren in das Raspberry Pi OS findest du in meinem Beitrag “Temperatur-Sensor DS1820 am Raspberry Pi mit Python“.
Aktualisiert am 13.09.2023: Der ursprüngliche Beitrag stammt vom 08.10.2016 und wurde heute von mir aktualisiert. Neben einer Beschreibung des 1-Wire-Busses habe ich den Code an Python 3 angepasst.
Anschluss der DS1820 Sensoren
Wie der folgende Schaltplan zeigt, können die DS1820 Temperatursensoren in Reihe an den 1-Wire Port des Raspberry Pi angeschlossen werden. Der Widerstand wird nur einmal benötigt.
Kurze Einführung in den 1-Wire Bus
Bevor wir tiefer in die Integration der DS1820 Sensoren eintauchen, möchte ich kurz den 1-Wire Bus vorstellen. „1-Wire“ bedeutet wörtlich übersetzt „ein Draht“ und genau das ist das Besondere an diesem Kommunikationssystem. Es ermöglicht die Datenübertragung über nur eine Datenleitung.
Wie ist das möglich? Neben der Datenleitung braucht der Bus natürlich noch eine Stromversorgung und eine Erdung. Das Tolle am 1-Wire-System ist aber, dass es möglich ist, sowohl Strom als auch Daten über dieselbe Leitung zu übertragen. Das macht die Installation und Handhabung sehr einfach, besonders wenn man mehrere Sensoren in einer Kette anschließen möchte.
Einer der Hauptvorteile des 1-Wire Busses ist die Möglichkeit, viele Sensoren an nur einer Datenleitung zu betreiben. Dies reduziert den Verkabelungsaufwand erheblich. Der DS1820, über den wir hier sprechen, verwendet ebenfalls diesen Bus, sodass wir in der Lage sind, mehrere von ihnen einfach in Reihe zu schalten und trotzdem jeden Sensor einzeln auszulesen, dank einer eindeutigen ID, die jeder Sensor besitzt.
Nachdem wir nun einen Überblick über den 1-Wire Bus haben, können wir uns wieder dem eigentlichen Thema zuwenden und herausfinden, wie man die Sensoren auf dem Raspberry Pi ausliest!
DS1820 Sensoren einlesen
Da jeder Sensor am 1-Wire Bus eine eigene ID hat, der DS18B20 Sensor hat die Kennung “28-xxx” und der DS18S20 Sensor die Kennung “10-xxxx”, wird in ds1820einlesen() das Verzeichnis der Sensoren am 1-Wire Bus ausgelesen.
Noch einmal der Hinweis: Die notwendigen Schritte zur Einbindung der Sensoren in das Raspberry Pi OS findest du in meinem Beitrag “Temperatur-Sensor DS1820 am Raspberry Pi mit Python“.
Temperaturwerte auslesen
In ds1820auslesen() werden gem. der ermittelten Anzahl der vorhandenen Sensoren und deren einzelnen Bezeichnungen nun die dazugehörigen Werte ausgelesen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
#!/usr/bin/python # coding=utf-8 # messprogramm_mehrere_sensoren.py #------------------------------------------------------------ import os, sys, time # Global für vorhandene Temperatursensoren tempSensorBezeichnung = [] #Liste mit den einzelnen Sensoren-Kennungen tempSensorAnzahl = 0 #INT für die Anzahl der gelesenen Sensoren tempSensorWert = [] #Liste mit den einzelnen Sensor-Werten # Global für Programmstatus / programmStatus = 1 def ds1820einlesen(): global tempSensorBezeichnung, tempSensorAnzahl, programmStatus #Verzeichnisinhalt auslesen mit allen vorhandenen Sensorbezeichnungen 28-xxxx try: for x in os.listdir("/sys/bus/w1/devices"): if (x.split("-")[0] == "28") or (x.split("-")[0] == "10"): tempSensorBezeichnung.append(x) tempSensorAnzahl = tempSensorAnzahl + 1 except: # Auslesefehler print ("Der Verzeichnisinhalt konnte nicht ausgelesen werden.") programmStatus = 0 def ds1820auslesen(): global tempSensorBezeichnung, tempSensorAnzahl, tempSensorWert, programmStatus x = 0 try: # 1-wire Slave Dateien gem. der ermittelten Anzahl auslesen while x < tempSensorAnzahl: dateiName = "/sys/bus/w1/devices/" + tempSensorBezeichnung[x] + "/w1_slave" file = open(dateiName) filecontent = file.read() file.close() # Temperaturwerte auslesen und konvertieren stringvalue = filecontent.split("\n")[1].split(" ")[9] sensorwert = float(stringvalue[2:]) / 1000 temperatur = '%6.2f' % sensorwert #Sensor- bzw. Temperaturwert auf 2 Dezimalstellen formatiert tempSensorWert.insert(x,temperatur) #Wert in Liste aktualisieren x = x + 1 except: # Fehler bei Auslesung der Sensoren print ("Die Auslesung der DS1820 Sensoren war nicht möglich.") programmStatus = 0 #Programminitialisierung ds1820einlesen() #Anzahl und Bezeichnungen der vorhandenen Temperatursensoren einlesen # Temperaturausgabe in Schleife while programmStatus == 1: x = 0 ds1820auslesen() print ("Sensorbezeichnung und Temperaturwert:") while x < tempSensorAnzahl: print (tempSensorBezeichnung[x] , " " , tempSensorWert[x] , " °C") x = x + 1 time.sleep(.5) print ("\n") # Programmende durch Veränderung des programmStatus print ("Programm wurde beendet.") |
Fazit
In diesem Artikel habe ich gezeigt, wie man mithilfe von Python mehrere DS1820 Sensoren an einen Raspberry Pi anschließen kann. Dabei wurde deutlich, wie nützlich und zeitsparend der 1-Wire Bus bei solchen Anwendungen sein kann, da er den Anschluss mehrerer Sensoren an einem einzigen Port ermöglicht. Der von mir vorgestellte Programmcode nimmt einem viel Arbeit ab: Er erkennt automatisch alle angeschlossenen Sensoren und liest deren Daten ein. Durch die ausführlichen Erklärungen und den strukturierten Code sollte es auch für Anfänger ein Leichtes sein, dem Projekt zu folgen und es selbst umzusetzen. Egal, ob du nur einen oder mehrere Sensoren an deinen Raspberry Pi anschließen möchtest, dieser Artikel liefert dir alles, was du dafür brauchst. Jetzt bist du bestens gerüstet, um selbst in die spannende Welt der Temperaturmessung mit dem Raspberry Pi einzutauchen!
Bereitgestellte Dateien und Links
Die Fritzing Projektdatei steht auch auf meiner Fritzing Projektseite auf diesem Blog zum Download zur Verfügung.
Wenn du dir das Abtippen oder Kopieren des Codes sparen möchtest, steht dir der Code als Textdatei zum Download bereit.
Gib im Terminal folgenden Befehl ein, dieser lädt die Textdatei herunter und speichert diese als Python-Datei ab.
1 |
wget -O messprogramm_mehrere_sensoren.py https://webnist.de/downloads/messprogramm_mehrere_sensoren.txt |
Die Funktionsweise des (ursprünglichen) Programmcodes habe ich als Video auf YouTube hochgeladen.
Hallo, ich bin auch Anfänger und freue mich das es bei mir läuft.
Träumen tue ich aber von einer Lösung die die gelesenen Daten in eine influxdb schreibt.
Ich suche und suche nach Lösungen finde aber für mein Anfängerwissen keine. Kann da jemand helfen und mir ein script zeigen?
Hallo Andi,
es freut mich, wenn es bei dir läuft. Mit InfluxDB kenne ich nicht. Allerdings scheint die API (https://docs.influxdata.com/influxdb/cloud/api/) gut beschrieben.
Viele Grüße
Wolfgang
Hoi Wolfgang
leider bricht der Script bei Zeile 26 beim auslesen der Sensoren ab. Ich habe 8 DS18B20 angeschlossen deren Temperatur ich auch jeweils auslesen kann. Ich vermute es liegt an der Pyton Version. Auf meinem Raspi 4 ist Pyton Version 3.9.2 installiert. Für einen Tipp wäre ich dankbar da meine Programmier Kenntnisse dafür nicht ausreichen.
Fehlermeldung:
File “/usr/bin/gettemp1.py”, line 26
print “Der Verzeichnisinhalt konnte nicht ausgelesen werden.”
^
SyntaxError: Missing parentheses in call to ‘print’. Did you mean print(“Der Verzeichnisinhalt konnte nicht ausgelesen werden.”)?
Freundliche Grüsse
Ueli
Hallo Ueli,
das Skript ist für Python in der Version 2.7 geschrieben. Da Du Python in der Version 3.9 verwendest, musst Du die Ausgaben der print-Befehle in Klammern setzen. Zum Beispiel print (“Der Verzeichnisinhalt konnte nicht ausgelesen werden.”)
Viele Grüße
Wolfgang
Hallo Wolfgang,
in meinem Anwendungsfall werde ich wahrscheinlich etwa 11 Sensoren benötigen.
In der bisherigen Internetrecherche habe ich erfahren, dass der Bus ab 9 Sensoren Probleme bekommt.
Hast du Erfahrungen oder Tipps in dieser Richtung? Evtl die Sensoren gruppieren?
Gruß
Johannes
Hallo Johannes,
die Größe eines 1-Wire Systems ist von mehreren Faktoren abhängig:
– von der verbaute Kabellänge
– von der Anzahl an Devices
– vom verwendeten Busmaster.
Irgendwo habe ich mal etwas von theoretischen 200 Sensoren gelesen. Wobei dann die Kabellänge und somit der Widerstand sehr niedrig sein müssen. Persönlich habe ich noch nicht mehr als 8 Sensoren angeschlossen. Die Probleme am Raspberry kenne ich somit auch nur aus Beiträgen im Netz.
Allerdings habe ich schon Beiträge von 20 Sensoren am 1-Wire Bus des Arduinos gelesen. Vielleicht kannst du ja deine Sensoren mit dem Arduino auslesen und die Daten ggf. per WLAN in eine Datenbank schreiben oder per UART an den Raspberry Pi zur weiteren Verarbeitung senden.
Viele Grüße
Wolfgang
Hi Wolfgang, absolut stark diese Seiten! Hast hier viel Zeit investiert. Respekt, Respekt
Papa
Hallo Papa! 😀
Vielen Dank für Deinen netten Kommentar.
Viele Grüße
Wolfgang
Hallo Wolfgang,
erst einmal möchte ich Dir einen Dank für deine tolle Arbeit hier aussprechen. Durch Zufall bin ich auf eines deiner Videos gestoßen und habe mir daraufhin gleich einen Raspberry zugelegt. Nach einen Tagen des Rumexperimentierens kam ich auf die glorreiche Idee, “hey damit könnte ich doch meine Heizungssteuerung realisieren.” Oh man, ich wusste nicht worauf ich mich da eingelassen hatte. Seit zwei Wochen bemerke ich, dass ich immer mehr graue Haare bekomme.
Zur Verständnis, ich habe von Programmierung keine Ahnung. Die Hardware stellt mich nicht vor ein Problem, aber die Programmierung eben.
Es fängt schon damit an, dass ich mich frage, was die beste Herangehensweise ist. Sollte man erst die Temperaturwerte in eine Datenbank schreiben und die Werte von dort für das Schalten von Relais nutzen, oder doch gleich direkt die Relais schalten, ohne die Werte erst aus einer Datenbank zu lesen?
Mein Stand ist, ich kann ein Relai direkt mit einem ausgelesen Temperaturwert schalten. Leider habe ich keine Ahnung wie ich vier Relais schalten soll? (mit unterschiedlichen Temperaturen aus mehreren Sensoren)
Vielleicht hast du dazu ein paar Tipps und Ideen für mich? Würde mich sehr freuen.
Hallo Malte,
vielen Dank für Deinen Kommentar. Eine allgemeingültige Antwort abzugeben ist nicht einfach, ja fast schon unmöglich. Bei der Herangehensweise an ein Projekt sollte zuerst einmal die Anforderung klar definiert sein. In Deinem Fall möchtest Du eine beliebige Anzahl von Relais (4) in Abhängigkeit von zugehörigen Temperatursensoren schalten. Eine Speicherung der Temperaturwerte, wie eventuell der Status der Relais erscheint mir sinnvoll. So kannst Du die aktuellen Werte in einem weiteren Schritt anzeigen und auswerten. Da Du auf einen Raspberry Pi zur Aufgabenerfüllung setzt, gehe ich von einer nicht zeitkritischen Anwendung aus. So könntest Du mit einem Modul die Temperaturwerte in der Datenbank speichern. Mit einem anderen Modul kannst Du die Datenbank abfragen und entsprechend die Relais schalten. So wäre es eventuell auch möglich, die Schaltung der Relais über ein Webinterface auszulösen. Ein anderer Ansatz wäre natürlich die Auslesung der Temperatursensoren und Schaltung der Relais in einem Skript. Die Speicherung der Daten wäre optional.
Ein Ansatz der Schaltung der verschiedenen Relais könnte zum Beispiel so aussehen: Du erstellst eine Funktion, die mit einem Wert (1-4) aus der Temperatursensorauswertung aufgerufen wird. In dieser löst Du die Auslösung des zuvor zugeordneten Relais (1-4) in Abhängigkeit des Übergabewertes (Wert 1-4) aus.
Viele Grüße
Wolfgang
hallo,
auch durch das lesen aller kommentare habe ich mein problem gelöst. die sensoren können ausgelesen werden….. soweit alles ok. ich würde die daten gerne nach thingspeak beamen um mir arbeit zu ersparen. datenbanken sind mir zu neu, zu kompliziert da lass ich die finger lieber weg ….. thingspeak wäre ne lösung
Hallo,
wie schon in meiner Antwort auf deine Nachricht geschrieben, habe ich persönlich keine Erfahrung mit Thingspeak. Allerdings müsste die Plattform eine API zur Datenanbindung mit dem eigenen Account anbieten. Genauere Informationen sind bestimmt auf der Thingspeak-Seite zu finden. Aber vielleicht kann dir einer der Leser dieses Beitrags helfen.
Moin
Leider bekomme ich immer eine Fehlmeldung, Bin noch Anfänger mit dem Pi, Habe den Code 1 zu 1 Kopiert. Habe aber noch irgend wo ein Fehler. der Meldung ich erhalte lautet ” Missing Parentheses in call to Print”
Ich verwende DS18B20 Fühler mit 1m Kabel.
Danke für ihre mühe.
mfg Sean
# !/usr/bin/python
# coding=utf-8
# messprogramm.py
#————————————————————
import os, sys, time
# Global für vorhandene Temperatursensoren
tempSensorBezeichnung = [] #Liste mit den einzelnen Sensoren-Kennungen
tempSensorAnzahl = 0 #INT für die Anzahl der gelesenen Sensoren
tempSensorWert = [] #Liste mit den einzelnen Sensor-Werten
# Global für Programmstatus /
programmStatus = 1
def ds1820einlesen():
global tempSensorBezeichnung, tempSensorAnzahl, programmStatus
#Verzeichnisinhalt auslesen mit allen vorhandenen Sensorbezeichnungen 28-xxxx
try:
for x in os.listdir(“/sys/bus/w1/devices”):
if (x.split(“-“)[0] == “28”) or (x.split(“-“)[0] == “10”):
tempSensorBezeichnung.append(x)
tempSensorAnzahl = tempSensorAnzahl + 1
except:
# Auslesefehler
print “Der Verzeichnisinhalt konnte nicht ausgelesen werden.”
programmStatus = 0
def ds1820auslesen():
global tempSensorBezeichnung, tempSensorAnzahl, tempSensorWert, programmStatus
x = 0
try:
# 1-wire Slave Dateien gem. der ermittelten Anzahl auslesen
while x < tempSensorAnzahl:
dateiName = "/sys/bus/w1/devices/" + tempSensorBezeichnung[x] + "/w1_slave"
file = open(dateiName)
filecontent = file.read()
file.close()
# Temperaturwerte auslesen und konvertieren
stringvalue = filecontent.split("\n")[1].split(" ")[9]
sensorwert = float(stringvalue[2:]) / 1000
temperatur = '%6.2f' % sensorwert #Sensor- bzw. Temperaturwert auf 2 Dezimalstellen formatiert
tempSensorWert.insert(x,temperatur) #Wert in Liste aktualisieren
x = x + 1
except:
# Fehler bei Auslesung der Sensoren
print "Die Auslesung der DS1820 Sensoren war nicht möglich."
programmStatus = 0
#Programminitialisierung
ds1820einlesen() #Anzahl und Bezeichnungen der vorhandenen Temperatursensoren einlesen
# Temperaturausgabe in Schleife
while programmStatus == 1:
x = 0
ds1820auslesen()
print "Sensorbezeichnung und Temperaturwert:"
while x < tempSensorAnzahl:
print tempSensorBezeichnung[x] , " " , tempSensorWert[x] , " °C"
x = x + 1
time.sleep(.5)
print "\n"
# Programmende durch Veränderung des programmStatus
print "Programm wurde beendet."
Hallo Sean,
das Skript ist für Python 2.7 geschrieben. Die Fehlermeldung lässt mich vermuten, dass du Python 3 verwendest. Der Print-Befehl wird mit Klammern verwendet, siehe als Beispiel hierzu den Kommentar von Willi vom 16.04.2018.
Viele Grüße
Wolfgang
Hallo,
der Code funktioniert perfekt. Ich möchte die Werte der einzelnen Sensoren aller 10min in eine Mariadb schreiben. Ich habe bereits eine DB “Sensoren” mit den Feldern ID, Datum, Uhrzeit, S1, S2, … , S10 angelegt. Irgendwie fehlen mir leider die entsprechenden Programmierkentnisse dies umzusetzen. Es sind derzeit 4 Sensoren angeschlossen. Wenn ich richtig verstanden habe werden neue Sensoren immer hinten angefügt. Die Werte der Sensoren sollten in die Felder S1 bis S10 geschrieben werden, in Felder wo keine Sensoren / Daten vorhanden sind, sollte eine 0 geschrieben werden. Könnten Sie mir bitte etwas Starthilfe geben.
Danke
Hallo Olaf,
das Skript liest die Sensoren aufsteigend der Sensorenbezeichnung ein. Sollte ein weiterer Sensor zu den vier verwendeten hinzukommen, kann es sein, dass dieser plötzlich an der Stelle S1 steht. Daher würde ich zuerst eine Art Zuordnungsliste (Sensor xxx ist S1, usw.) anlegen.
Durch die Zuordnungsliste kann das Einlesen der Temperaturwerte in einer Schleife erfolgen, wenn kein Sensor vorhanden ist, ist der Temperaturwert 0. Die in der Schleife ermittelten Werte können danach in die Datenbank geschrieben werden.
Hoffe ich konnte eine Starthilfe geben.
Viele Grüße
Wolfgang
Hallo und danke,
nachdem ich die Kommentare weggenommen und die fehlende klammer ergänzt habe, läuft das programm .
allerdings wird nur ein sensor angezeigt obwohl 2 gefunden und vorhanden sind.
zudem läuft das programm ohne ende und zeigt nur die werte des einen sensor.
diese Anweisung aus der temperatur ausgabe wird nicht durchgeführt.
print (“Sensorbezeichnung und Temperaturwert:”)
ich musste mit Contr. C stoppen
was kann nun fehlerhaft sein ?
Hallo Willi,
das Programm ist tatsächlich so aufgebaut, dass es so lange in einer Dauerschleife läuft bis sich der Wert programmStatus ändert. In diesem Beispiel ist keine Option eingebaut. Du kannst natürlich auch einen Zähler verwenden. Da er nur einen Sensor anzeigt, könnte es daran liegen, dass du die x Erhöhung nicht in der while Schleife x < tempSensorAnzahl erhöhst. Viele Grüße Wolfgang
hier das programm was den fehler verursacht, .
wenn du bitte einmal drüber schauen kannst.und mir sagt wo das problem liegt ?
Danke
#!/usr/bin/python3.5
# coding=utf-8
# Sensoren2.py
#————————————————————
import os,sys,time
# Global für vorhandene Temperatursensoren
tempSensorBezeichnung = [] #Liste mit den einzelnen Sensoren-Kennungen
tempSensorAnzahl = 0 #INT für die Anzahl der gelesenen Sensoren
tempSensorWert = [] #Liste mit den einzelnen Sensor-Werten
# Global für Programmstatus /
programmStatus = 1
def ds1820einlesen():
global tempSensorBezeichnung, tempSensorAnzahl, programmStatus
#Verzeichnisinhalt auslesen mit allen vorhandenen Sensorbezeichnungen 28-xxxx
try:
for x in os.listdir(“/sys/bus/w1/devices”):
if (x.split(“-“)[0] == “28”) or (x.split(“-“)[0] == “10”):
tempSensorBezeichnung.append(x)
tempSensorAnzahl = tempSensorAnzahl + 1
except:
# Auslesefehler
print (“Der Verzeichnisinhalt konnte nicht ausgelesen werden.”)
programmStatus = 0
def ds1820auslesen():
global tempSensorBezeichnung, tempSensorAnzahl, tempSensorWert, programmStatus
x = 0
try:
# 1-wire Slave Dateien gem. der ermittelten Anzahl auslesen
while x < tempSensorAnzahl:
dateiName = "/sys/bus/w1/devices/" + tempSensorBezeichnung[x] + "/w1_slave"
file = open(dateiName)
filecontent = file.read()
print(dateiName)
print(x)
file.close()
# Temperaturwerte auslesen und konvertieren
stringvalue = filecontent.split("\n")[1].split(" ")[9]
sensorwert = float(stringvalue[2:]) / 1000
temperatur = '%6.2f' % sensorwert #Sensor- bzw. Temperaturwert auf 2 Dezimalstellen formatiert
tempSensorWert.insert(x,temperatur) #Wert in Liste aktualisieren
#x=x+1
except:
# Fehler bei Auslesung der Sensoren
print ("Die Auslesung der DS1820 Sensoren war nicht möglich.")
programmStatus = 0
#Programminitialisierung
print (x)
ds1820einlesen() #Anzahl und Bezeichnungen der vorhandenen Temperatursensoren einlesen
# Temperaturausgabe in Schleife
while programmStatus == 1:
x = 0
ds1820auslesen()
print ("Sensorbezeichnung und Temperaturwert:")
while x < tempSensorAnzahl:
print (tempSensorBezeichnung[x] ), (" " ), (tempSensorWert[x] , (" °C")
#x = x + 1
time.sleep(0.5)
print ("\n")
# Programmende durch Veränderung des programmStatus
print ("Programm wurde beendet.")
Hallo,
auf den 1. Blick fällt mir in der Print-Anweisung vor der auskommentierten Erhöhung des Integer x, dass Du eine Klammer hinter tempSensorWert[x] vergessen hast. Die richtige Anweisung müsste meines Wissens nach allerdings print (tempSensorBezeichnung[x] , ” ” , tempSensorWert[x] , ” °C”) lauten. Die Fehlermeldung bezieht sich zwar auf die Zeile x = x + 1, dies liegt allerdings an der fehlerhaften Syntax in dem vorherigen Befehl. Daher kannst und musst du die Kommentierung entfernen, da sonst der zweite Sensor nicht angezeigt werden kann.
Viele Grüße
Wolfgang
hallo Wolfgang,
ich bin anfänger mit dem pi und habe dein Programm für die Temperaturmessung gefunden und versucht es unter Python 3.5 zum laufen zu bringen nachdem ich die Print Anweisungen angepasst habe. ich verwende 2 Ds 2820
Nun gibt es folgenden fehler:
File “./Sensoren2.py”, line 64
x = x + 1
^
SyntaxError: invalid syntax
Sobald ich diese zeile als kommentar setze erhalte ich diesen Fehler
File “./Sensoren2.py”, line 65
time.sleep(0.5)
^
SyntaxError: invalid syntax
ich habe versucht mir zwischenergebnisse mit Print als testhilfe in der while Schleife ausgeben zu lassen aber es erfolgte keinne Ausgabe.s. hier
while x < tempSensorAnzahl:
dateiName = "/sys/bus/w1/devices/" + tempSensorBezeichnung[x] + "/w1_slave"
file = open(dateiName)
filecontent = file.read()
print(dateiName) <–
print(x)<–
file.close()
nun weis ich auch nicht mehr weiter, kannst du mir hinweise geben ?
im übrigen finde ich es prima wie du die es gelöst hast das man mehrere Sensoren anschließen kann
Hallo Willi,
aus der Ferne ist es für mich etwas schwierig den Fehler zu analysieren. Bitte sende mir doch einmal Deinen kompletten Programmcode.
Viele Grüße
Wolfgang
Hallo Wolfgang,
ich habe zwischenzeitlich einwenig weiter probiert und jetzt funktioniert es: Der Widerstand war nicht das Problem, denn auch auf diese relativ große Entfernung lag der Widerstand bei nur knapp 800 Ohm. Ich habe mich einfach getraut, dem Sensorenbündel etwas mehr Strom zu gönnen und habe auf 5V umgesteckt – siehe da, es klappte. Dein Script funktioniert wunderbar, damit kann ich jetzt weiterarbeiten.
Nochmal vielen Dank und viele Grüße
Axel
Hallo Wolfgang,
danke für die gute Beschreibung. Nach langer Zeit bastele ich mal wieder mit dem Raspi. Mein Ziel ist eine Steuerung für unseren privaten Kühlraum. Die Sensoren habe ich im Kühlraum installiert, das Kabel führt vom Keller ins Dachgeschoss. Die Verbindung habe ich mit Telefonkabel hergestellt. Leider bekomme ich keine Antwort von meinen Sensoren. Hast Du eine Idee, ob der Widerstand auf die Entfernung zu groß ist? Sollte ich vielleicht eine zusätzliche Stromquelle einbinden? Ein einzelner Sensor, den ich direkt anschließe, funktioniert einwandfrei.
Hallo Wolfgang…
Ich baue derzeit ein grafisches Interface (Tkinter) für eine Eigenbaumaschine, in dem unter anderem die Temperaturen von diversen Komponenten erfasst & angezeigt werden sollen..
Wie kann ich nun aus deinem Programm eine “Klasse” bauen, die es mir ermöglicht in gewissem Zeitintervallen die Sensordaten der in der Maske verwendeten DS18B20 Sensoren anzuzeigen?
Evtl Aufruf der Klasse mit Übergabe der SensorID
[…]
messwert(28-xyz)
[…]
Ich hoffe Du verstehst was ich meine… bin noch ziemlich am Anfang der Programmierung in Python…
Hallo,
Du kannst die Funktionen natürlich in Klassen einbinden, siehe hierzu folgendes Tutorial einbinden. Oder Du rufst die Funktion ds1820auslesen() mit der gewünschten Bezeichnung auf. Hierzu wäre vielleicht, da Du ja die einzelnen Bezeichnungen Deiner Sensoren für die Zuordnung weißt, die Funktion aus diesem Beitrag sinnvoller. In diesem Beispiel könntest Du abhängig Deiner an die Funktion übergebenen Bezeichnung, den Pfad zur 1-wire Slave Datei setzen.
Viele Grüße
Wolfgang
Hi Wolfgang,
das ist bisher das beste Script, das ich zum Auslesen der 1-wire-slave-Dateien gefunden habe. Danke für deine Vorarbeit.
Hallo Wilfried,
vielen Dank für Deinen netten Kommentar.
Viele Grüße
Wolfgang
Wie kann ich jedem Sensor noch den Namen des Messortes zuordnen?
Hallo Dennis,
eine Zuordnung einer eigenen Bezeichnung für einen Sensor habe ich per SQLite gelöst.
Viele Grüße
Wolfgang
Servus,
interessanter Ansatz. Was ist wenn die Sensorbezeichnungen abweichend sind? Meine beginnen mit unterschiedlichen Zahlen (10 und 28).
Hallo Marcus,
den DS18S20 Temperatursensor (ID 10) habe ich ehrlich gesagt nicht bedacht. Vielen Dank für den Hinweis. 🙂
Ich habe den Beitrag diesbezüglich ergänzt und die if Abfrage in ds1820einlesen() ergänzt.
if (x.split(“-“)[0] == “28”) or (x.split(“-“)[0] == “10”):
Nun werden die beiden Sensoren DS18B20 und DS18S20 Sensoren eingelesen, also 28 oder 10.
Viele Grüße
Wolfgang
Kleiner Hinweis, alle Kommentare werden moderiert.
Dies bedeutet, der Kommentar wird vor der Veröffentlichung durchgelesen und von mir geprüft. Auch behalte ich mir vor, jeden Kommentar zu löschen, der nicht direkt auf das Thema abzielt oder nur den Zweck hat, Leser oder Autoren herabzuwürdigen.
Neuste Beiträge
Kleinen Spickzettel für Raspbian OS Befehle
Entdecke die Welt von Webnist.de
Erfahre mehr über die Hintergründe meines Blogs und wie ich dich bei deinen digitalen Projekten unterstützen kann.Kategorien
KATEGORIEN
Aktuelles Video auf YouTube
Beschreibung der Verwendung eines TTP223B Touch Sensors am GPIO Port des Raspberry Pi mit Python.
Die aktuell 6 derzeit meistbesuchten Beiträge
Beiträge mit den meisten Kommentaren
Funktional Immer aktiv
Vorlieben
Statistiken
Marketing