Mehrere DS1820 Sensoren am Raspberry Pi mit Python einlesen

Veröffenticht am 08.10.2016    von     in der Kategorie Raspberry Pi, Sensoren     bisher 33 Reaktionen    Zuletzt überarbeitet am 01.11.2023


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.

Die fritzing Projektdatei habe ich für dich zum Download bereitgestellt.

 

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.

 

 

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.

 

Die Funktionsweise des (ursprünglichen) Programmcodes habe ich als Video auf YouTube hochgeladen.


Transparenz-Hinweis:

Die auf dieser Seite verwendeten Produktlinks sind sogenannte Affiliate-Links zu einem Partnerprogramm. Für dich entstehen dadurch keine Mehrkosten, ich erhalte durch deinen Kauf über den Link eine kleine Provision.


Wolfgang Raab – Betreiber von webnist.de

Mein Name ist Wolfgang, ich beschäftige mich nun schon seit 1985 mit der EDV und im Besonderen mit der Software- und Webentwicklung.

Auf diesem Blog schreibe ich über Dinge, die mich begeistern, beschäftigen und ich der Meinung bin, es könnte für andere interessant und hilfreich sein.

Als großer Fan des Raspberry Pi finde ich es spannend, wie man den kleinen Computer in Verbindung mit dem IoT und Smart Home nutzen kann. Deshalb behandeln viele Beiträge auch genau dieses Thema.

Ich bin ein leidenschaftlicher Leser und Fotograf. Wenn ich nicht gerade in einem spannenden Roman versinke, bin ich oft unterwegs, um die Schönheit der Welt mit meiner Kamera einzufangen und zu teilen.

Weitere Infos und Fotos findest du auf einem der folgenden Plattformen.






Mehr erfahren?

Besuche die "About"-Seite meines Blogs und finde heraus, wie du mit mir in den Bereichen Web- und Mobile-Programmierung und Raspberry Pi zusammenarbeiten kannst. Hier beginnt deine digitale Reise.


Unterstützen

Dieser Beitrag hat dir gefallen und konnte dir bei deinem Projekt oder Problem behilflich sein? Dann würde ich mich sehr freuen, wenn du dich mit einer noch so kleinen Spende erkenntlich zeigen möchtest.




  • Andi schrieb am 20. Januar 2023:

    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?

  • Ueli Gläser schrieb am 1. Mai 2022:

    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

    • Wolfgang schrieb am 2. Mai 2022:

      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

  • Johannes schrieb am 6. Juni 2019:

    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

    • Wolfgang schrieb am 6. Juni 2019:

      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

  • Hans Raab schrieb am 25. Mai 2019:

    Hi Wolfgang, absolut stark diese Seiten! Hast hier viel Zeit investiert. Respekt, Respekt
    Papa

    • Wolfgang schrieb am 27. Mai 2019:

      Hallo Papa! 😀
      Vielen Dank für Deinen netten Kommentar.
      Viele Grüße
      Wolfgang

  • Malte Röhrs schrieb am 17. Januar 2019:

    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.

    • Wolfgang schrieb am 19. Januar 2019:

      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

  • pensionär schrieb am 18. Oktober 2018:

    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

    • Wolfgang schrieb am 18. Oktober 2018:

      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.

  • Sean schrieb am 25. August 2018:

    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."

    • Wolfgang schrieb am 25. August 2018:

      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

  • olaf schrieb am 28. Juni 2018:

    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

    • Wolfgang schrieb am 2. Juli 2018:

      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

  • willi schrieb am 17. April 2018:

    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 ?

    • Wolfgang schrieb am 18. April 2018:

      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

  • willi schrieb am 16. April 2018:

    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.")

    • Wolfgang schrieb am 16. April 2018:

      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

  • willi schrieb am 13. April 2018:

    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

    • Wolfgang schrieb am 14. April 2018:

      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

  • Axel schrieb am 29. November 2017:

    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

  • Axel schrieb am 29. November 2017:

    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.

  • Skipper schrieb am 27. Juli 2017:

    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…

    • Wolfgang schrieb am 27. Juli 2017:

      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

  • Wilfried schrieb am 17. Juli 2017:

    Hi Wolfgang,

    das ist bisher das beste Script, das ich zum Auslesen der 1-wire-slave-Dateien gefunden habe. Danke für deine Vorarbeit.

    • Wolfgang schrieb am 18. Juli 2017:

      Hallo Wilfried,
      vielen Dank für Deinen netten Kommentar.

      Viele Grüße
      Wolfgang

  • Dennis schrieb am 30. Dezember 2016:

    Wie kann ich jedem Sensor noch den Namen des Messortes zuordnen?

    • Wolfgang schrieb am 31. Dezember 2016:

      Hallo Dennis,

      eine Zuordnung einer eigenen Bezeichnung für einen Sensor habe ich per SQLite gelöst.

      Viele Grüße
      Wolfgang

  • Marcus schrieb am 20. Oktober 2016:

    Servus,
    interessanter Ansatz. Was ist wenn die Sensorbezeichnungen abweichend sind? Meine beginnen mit unterschiedlichen Zahlen (10 und 28).

    • Wolfgang Raab schrieb am 21. Oktober 2016:

      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


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Notwendige Felder sind mit * markiert.

 

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.

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.

Aktuelles Video auf YouTube

Beschreibung der Verwendung eines TTP223B Touch Sensors am GPIO Port des Raspberry Pi mit Python.