DS18B20 mit w1thermsensor fehlerfrei lesen

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Die 7 DS18B20 unserer Heizungssteuerung lese ich mit dem Paket w1thermsensor über eine Leitung auf dem GPIO4-pin aus.

    Die 1wire-Datenleitung ist mit 4kOhm auf Vcc=3,3 Volt gelegt.

    Das funktioniert 9999 mal, aber sporadisch steigt dann w1thermsensor mit einer Python-exception SensorNotReadyError aus.

    Sollte man Vcc der Sensoren besser auf 5 Volt legen oder reicht es einen dicken Kondensator zwischen VCc und Erde zu legen?

  • Hallo,

    und danach funktioniert er wieder 9999 mal? Ist das immer der gleiche?

    Kannst du mal bitte den passenden Code, in Code-tags (</> - Button), dazu posten?

    Es wäre ja auch eine Möglichkeit, das man diese Ausnahme im Programm behandelt ohne dass das abbricht. Man könnte dass dann auch in Log-Dateien schreiben, dann kannst du nachschauen wie oft und welcher Sensor ausgefallen.

    Aber dennoch würde ich noch abwarten, bis einer zu deiner Hardwarekonfiguration antwortet.

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Die 1wire-Datenleitung ist mit 4kOhm auf Vcc=3,3 Volt gelegt.

    zu hochohmig, nutze die 3mA vom GPIO aus und setze den R auf 1k - 1,1k

    Abfragen brauchen ca. 1s Pause damit das 12-bit Auslesen klappt und bei parasitärer Speisung auch der interne Kondensator sich aufladen kann.

    EDIT: wie oft fragst du denn ab?

    Wenn sich innerhalb von Sekunden die Temperatur dramatisch ändert brennt die Bude und es ist eh zu spät zu helfen! :lol:

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • ich habe tatsächlich 4,7 kOhm, wie auf der timofurrer-Seite angegeben, auf der 1wire-Sammelplatine verlötet. Den werde ich morgen gegen 1 kOhm austauschen.

    Auch mit try/except habe ich versucht den SensorNotReadyError abzufangen.

    Auch verschiedene time.sleep-zaiten nach jedem getSensor.

    Vielen Dank erstmal für den Hinweis, 4,7 kOhm gegen 1 kOhm auszutauschen.

  • ich habe tatsächlich 4,7 kOhm

    ist normalerweise ausreichend bei kurzen Verbindungen an 5V -> ca. 1mA (5k Ohm Widerstände sind knapper)

    Dummerweise kann man nicht jeden Vorschlag 1:1 an niedere Spannungen von 5V auf 3,3V umsetzen, man sollte stets im Hinterkopf behalten warum Werte gewählt wurden.

    Mehr Spannung kann mehr Widerstand von Draht und Kontakten überbrücken, deswegen kann man aber nicht beliebig runtergehen!

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Heute morgen habe ich einen 2 kOhm Widerstand parallel zum 4,7 kOhm Widerstand

    in das letzte freie Schraubterminal gesteckt, also zwischen 3,3 V Ausgang und Datenleitung.

    Das macht dann etwa 1,3 kOhm total zwischen 3,3V und Daten.

    Das ändert aber nichts am Verhalten. Mit Aus- und Einstecken einer Datenleitung kann ich w1thermsensor dazu überreden, alle 7 Sensoren zu erkenen und richtige Meßwerte auszugeben.

    Das Heizprogramm startet dann normal und im 30-ten Abfragezyklus bei 279:75 [min:sec] gibt mein Programm T1W.py nur noch die alten Temp-Werte zurück, weil die Anzahl der "Sensoren" nicht mehr 7 ist, zu erkennen daran, daß delta_t nur noch ~0,32 min ist:

    (m,s)= 279:33 t0= [11.12, 31.81, 26.19, 9.62, 24.75, 22.69, 36.94] esum= 96.9 fgw=13 fhw=28

    atm= 11.25 T1,R1,R2,IOi,iZH38= [36.94, 22.69] 3 2 e 29 delta_t= 0.68 enbw= 516 Wh

    (m,s)= 279:53 t0= [11.12, 31.81, 26.19, 9.62, 24.75, 22.69, 36.94] esum= 98.7 fgw=14 fhw=28

    atm= 11.25 T1,R1,R2,IOi,iZH38= [36.94, 22.69] 3 2 e 30 delta_t= 0.33 enbw= 526 Wh

    (m,s)= 280:12 t0= [11.12, 31.81, 26.19, 9.62, 24.75, 22.69, 36.94] esum= 100.4 fgw=13 fhw=27

    atm= 11.24 T1,R1,R2,IOi,iZH38= [36.94, 22.69] 3 2 e 31 delta_t= 0.32 enbw= 536 Wh

    (m,s)= 280:32 t0= [11.12, 31.81, 26.19, 9.62, 24.75, 22.69, 36.94] esum= 102.2 fgw=13 fhw=28

    atm= 11.24 T1,R1,R2,IOi,iZH38= [36.94, 22.69] 3 2 e 32 delta_t= 0.33 enbw= 545 Wh

    (m,s)= 280:52 t0= [11.12, 31.81, 26.19, 9.62, 24.75, 22.69, 36.94] esum= 104.0 fgw=13 fhw=28

    atm= 11.24 T1,R1,R2,IOi,iZH38= [36.94, 22.69] 3 2 e 33 delta_t= 0.33 enbw= 555 Wh

    T1W.py:

    pi@heizpi:~/wpibex $ cat T1W.py

    from w1thermsensor import W1ThermSensor as W1

    import sys,time

    #print(W1.get_available_sensors())

    def TI(talt):

    ti=talt

    i=0

    sensoren=W1.get_available_sensors()

    slen=len(sensoren)

    if not slen==7:return talt

    for sensor in sensoren:

    try:ti[i]=sensor.get_temperature()

    except Exception:

    ti[i]=talt[i]

    ti[i]=float(format(ti[i],".2f"))

    if (ti[i]>60) or (ti[i]<-30):ti[i]=talt[i]

    time.sleep(1)

    i=i+1

    return ti

    Das Programm lief seit 2 Jahren ohne Probleme.

    Im Sommer habe ich eine Menge geändert: 7 Sensoren statt 6 an den 1wire-pin angeklemmt,

    alle Daten- und 240-Volt-Leitungen in Kabelkanäle gelegt, damit es "schön" aussieht.

    Bis vor 2 Jahren habe ich die 1wire-Sensoren noch über eine #142a-Platine von phanderson.com gelesen und es gab manchmal Proleme mit dem USB>RS232-Weg. Aber die angeschlossenen Sensoren wurden alle angezeigt.

    Ich werde jetzt mal testen, wie lange das T1W.py allein läuft, ohne den Rest der Datenerfassung (Frequenzmessung der Flußzähler für Grund- und Heizwasser, EnBW-Stromzähler, Relaissteuerung).

    Für weitere Ratschläge wäre ich sehr dankbar.

  • Das Programm lief seit 2 Jahren ohne Probleme.

    kenne ich

    Im Sommer habe ich eine Menge geändert: 7 Sensoren statt 6 an den 1wire-pin angeklemmt,

    als es bei mir Jahre lief und KEIN Sensor hinzu kam sich nicht mal die Verlegung geändert hat denke ich an Arbeitspunktverschiebung durch Alterung, bei mir half zuerst der R zu verkleinern, dann ein Sensor zu entfernen.

    Dir könnte helfen die Versorgung auf einen GPIO zu legen und eine Sekunde vor dem Auslesen Spannung aus/an.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (18. September 2022 um 11:11)

  • Hi, ibex44;

    Deine Anfangsfrage war ja auch, ob man die VCC an 5V legen sollte. Da du von 7 Sensoren zur Heizungssteuerung sprichst, kann das je nach Kabellänge sinvoll sein. Die Verkabelung müsste dann nach diesem Schema laufen:

    https://forum-raspberrypi.de/attachment/10830-unbenannt-jpg/

    Du brauchst halt eine zusätzliche 5V-Leitung zur Versorgung der Sensor-Elektronik; die Datenleitung bleibt aber bei den 3,3 V, die der Raspberry verträgt.

    Bei mir musste Ich trotzdem den Widerstand immer etwas verringern, wenn ein neuer Sensor hinzukam.

    Wichtig: wie jar schon schrieb: Die Pause zwischen dem Abfragen der Sensoren und eine saubere Verdrahtung.

    Und dann natürlich die Frage, wie man es codemäßig lösen kann, bei EINEM Ausfall unter 10.000 Messungen eine saubere Fallback-Lösung zu erstellen.

  • Und dann natürlich die Frage, wie man es codemäßig lösen kann, bei EINEM Ausfall unter 10.000 Messungen eine saubere Fallback-Lösung zu erstellen.

    na ja unter AVR in C löse ich das so, ich messe mehrmals und schmeise +85, +129 °C raus sind Fehlerwerte auch im Sensor Datenblatt beschrieben.

    Dann schmeisse ich auch zur Not den obersten und untersten Messwert raus, braucht also min. 5 Messungen. Von den verbleibenen Messungen bilde ich den Mittelwert. Seit dem habe ich keine Fehlmessungen mehr.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Hi jar;

    Ich habe noch uralten python-Code , denn Ich selbst mit "kruden Voodoo-Methoden" (Bezeichnung hier im Forum :D ) versatanisiert habe im Einsatz, trotzdem kamen die von Dir beschriebenen typischen Fehler-Werte (-85; +129) nur vor, wenn ein Sensor anscheinend vor dem Lebensende stand oder etwas an den Kontakten Bulls**t war.

    w1thermsensor habe Ich jetzt zum ersten Mal gesehen, anscheinend erfolgt ja mit sensoren=W1.get_available_sensors() als Erstes eine Auflistung der erkannten Sensoren.

    Kann man jetzt hier Einfluss nehmen? -In welchem Abstand werden hier die Sensoren abgefragt?

  • ich habe von python NULL Ahnung!

    ich fand meinen Webserver auf AVR Basis von 2008 und der läuft noch heute!

    jar
    11. November 2013 um 09:01

    gerade frisch getestet!

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • gemogelt, weil der Balkonsensor nach 7 Jahren im Schrumpfschlauch und 7m 2-Draht aufgab, hatte ich für den Wert einen in der TAE Dose eingesetzt :blush:

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • wenn der jetzige selbst-"abgedichtete" Außen-Lötsensor seinen Geist aufgibt, muss wohl doch mal ein professioneller wasserdichter her!

    kennt ihr das mit den Dingen die man mal angehen MÜSSTE? :lol:

    Dann gibt es noch Wetter, Regen, Schnee, Pollenflug alles keine guten Voraussetzungen für Neuinstallation.

    (manches erledigt sich durch aussitzen, biologisch :angel: )

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (18. September 2022 um 12:26)

  • Hallo,

    deine ganzen Einrückungen sind verloren gegangen, sah der Programmteil so aus(?):

    An der Stelle würde ich die Exception nicht so verschlucken, sondern mir in irgendeiner Form ausgeben lassen, was denn da lost ist.

    Wie oft wird 'TI' aufgerufen?

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Aber dennoch würde ich noch abwarten, bis einer zu deiner Hardwarekonfiguration antwortet.

    Ha, hier: https://www.maximintegrated.com/en/design/tech…ials/1/148.html

    Meistens kommt man erst im Fehlerfall drauf, dass die verkabelte (Stern-)Topology für den 1-wire Bus vom Hersteller nicht empfohlen wird.

    aus AN148

    Precautions with Star Topologies

    Testing has shown that unswitched star-type network topologies (i.e., those with several branches diverging at the master) are the most difficult to make reliable. The junction of various branches presents highly mismatched impedances; reflections from the end of one branch can travel distances equal to nearly the weight of the network (rather than the radius) and cause data errors. For this reason, the unswitched star topology is not recommended, and no guarantees can be made about its performance.

    7 Sensoren mit 3,3 V aus dem Pi zu versorgen wird auch beim Pi bald grenzwertig. Am 3,3 V Ausgang des Pi steht nur begrenzter Strom z.V.

    Servus !

    RTFM = Read The Factory Manual, oder so

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!