DHT22 in Endlosschleife

  • Hallo zusammen,


    ich bin etwas ratlos.


    Ich habe einen Rasberry 3b+ und habe an ihm 2 DHT22 Sensoren am laufen.

    Diese werden immer wieder abgefragt und ausgewertet. So auch kein Problem.


    Doch nach einigen Tagen kann der Rasberry den Wert nicht mehr auslesen. Ein reboot funktioniert dann auch nicht. Ich muss den Rasberry einmal komplett aus machen und wieder hoch fahren, dann funktioniert es wieder ganz normal ein paar Tage.


    Hintergrund:

    Ich nutze die beiden DHTs um an 2 Stellen die Luftfeuchtigkeit zu messen und wenn diese zu hoch ist, dann wird ein Lüfter angesteuert. Zusätzlich werden die Temperatur und die Luftfeuchtigkeit in eine MySQL Datenbank auf der NAS gesichert.


    Laut Putty habe ich folgende Ausgabe:



    Was muss ich machen, um den Fehler zu beheben?


    Freue mich auf Rückinfo.

  • Hallo Flixsi,

    Darüber nachzudenken beginnen, DEINEN Quellcode zur Verfügung zu stellen?



    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Edited 2 times, last by Andreas ().

  • Doch nach einigen Tagen kann der Rasberry den Wert nicht

    ‚den‘ Wert? Ist nur ein Dht betroffen?


    Gibts ein log file?


    Ist der Lüfter in der Zeit des fehlerfreien Betriebes geschaltet worden? Und in welchem Zustand ist der Lüfter im Fehlerfall?


    Und auf Andreas hören🙂

    Optimismus ist nur ein Mangel an Informationen🤓

  • Hallo,


    einmal der Quellcode und zum anderen, es werden von keinem der beiden DHTs mehr Werte erfasst bzw ausgegeben.

  • also mit dem Befehl habe ich folgende Ausgabe bekommen:


    Code
    pi@RaspiLuefter:~ $ df -h
    Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
    /dev/root        15G    2,2G   12G   16% /
    devtmpfs        459M       0  459M    0% /dev
    tmpfs           464M       0  464M    0% /dev/shm
    tmpfs           464M     12M  452M    3% /run
    tmpfs           5,0M    4,0K  5,0M    1% /run/lock
    tmpfs           464M       0  464M    0% /sys/fs/cgroup
    /dev/mmcblk0p1  253M     53M  200M   21% /boot
    tmpfs            93M       0   93M    0% /run/user/1000
  • Hallo,


    hier beide Werte, wie gewünscht.


    Frage ist nur, warum Speicher? Der Wert in der Variablen wird doch immer überschrieben, ist ja nicht gerade ein array was größer werden kann.

    • Official Post

    Der Wert in der Variablen wird doch immer überschrieben, ist ja nicht gerade ein array was größer werden kann.

    Überschreiben heißt neu anlegen und alten danach löschen.


    Swap: 102396 0 102396

    Der Swap ist voll ausgereizt, das bedeutet der Arbeitsspeicher ist knapp und wird vermutlich den Fehler verursachen. Ein Möglichkeit wäre evtl. den Swap zu erweitern, aber damit wird auch mehr auf die SD geschrieben. https://www.elektronik-kompend…/raspberry-pi/2002131.htm Ob das die Tatsächliche Ursache ist, kann ich allerdings natürlich nicht mit Sicherheit sagen, aber einen Versuch wäre es m.M.n. Wert.

  • Danke llutz! Das hatte ich übersehen, nehme ich alles zurück und behaupte das Gegenteil. ;)

    Ok, dann ist das auch nicht der Fehler. Was ist dann der Fehler?


    Oder macht es Sinn die Variablen zu leeren vor dem neuen befüllen?


    Oder ist doch ein Fehler im Code?


    Frage ist ja auch, ein reboot hilft nicht nur ein kompletter shutdown bringt ja Abhilfe.

  • Über den shutdown Befehl herunterfahren.

    Zum starten dann Spannung ausschalten und Spannung wieder drauf, System fährt wieder hoch und arbeitet erstmal normal.

  • Hallo Flixsi,


    beim Pi 4B ist es so, dass neben Ethernetanschluss z.B. auch die GPIO Leiste weiter mit Spannung versorgt wird, wenn der Raspberry heruntergefahren wird. Dieses Verhalten ist im Bootloader konfigurierbar. Wie das beim Pi 3B+ aussieht, weiß ich nicht.

    RPi.GPIO hält auch die Werte. Das könnte die Ursache sein, warum dein einfacher Reboot / Shutdown nicht klappt und du die Spannung abschalten musst. Deine Programmbibliothek ist veraltet, nimm diese hier.


    Bei dauerhaft hoher Luftfeuchtigkeit kann der Zähler für den Lüfter z.B. über 10000 gehen, dann wird der Lüfter immer wieder hintereinander eingeschaltet? Mit der Elektronik kenne ich mich nicht aus, aber ich würde ihn evtl. nur einmal einschalten, anstatt 10000 mal am Stück.


    Welche Werte liefern denn die Sensoren konkret? Sind da nicht öfter mal Fehlmessungen bei? In der Dokumentation steht, dass Fehlmessungen auftreten können und entsprechend behandelt werden sollen. Das machst du jedoch nicht. Um die Fehler besser einzugrenzen, würde ich Fehlmessungen berücksichtigen und zu Analysezwecken einige Variablenwerte auf dem Bildschirm ausgeben lassen.


    Viele Grüße,

    Tigerbeere

  • Hallo Tigerbeere


    ich habe lange gebraucht, dass diese DHTs richtig ausgelesen werden.

    Bin auch nicht so conform mit Linux, bzw bin mehr der Windoof Garfik Mensch, doch für mein Projekt habe ich mich in unbekanntes Tarain gegeben.


    Über den Bootloader habe ich bei Google noch nichts direkt gefunden. Finde immer Anleitungen wie ich von USB Boote, aber das brauch ich ja nicht. Wo kann ich das also einstellen? Macht das überhaupt dann einen Sinn?


    Du sagst ich würde den Sensor 10000 mal starten? Wo mach ich das denn bitte?

    Hatte überlegt, Fehler in eine Log Datei zu schreiben, bzw mir per Mail zu schicken.


    Habe mich nur an beispiele gehalten, wo eben Fehler auch nicht behandelt werden.

  • Hallo Flixsi,


    wie gesagt, mit dem Pi3B+ kenne ich mich nicht aus, beim Pi4B ist es hier beschrieben.


    Die 10000 mal ist, wenn

    Code
    if luefter > 5:
                GPIO.output(Relai_2, GPIO.LOW) # Lüfter an

    hier der Lüftercounter immer höher geht und weit über 5 liegen wird. Ob das eine Rolle spielt, weiß ich nicht, da ich mit Relais nicht arbeite und nicht in die Dokumentation geschaut habe.


    Deine Adafruit Bibliothek ist auch veraltet. Die hier benutzte CircuitPython DHT wird empfohlen.



    Du hast vollkommen Recht, das Beispiel ist tatsächlich ziemlich ungeeignet für Anfänger. Es steht jedoch dabei, dass Fehler nicht geprüft werden.


    Ich habe bei mir im Quelltext sowas stehen:



    Viele Grüße,

    Tigerbeere

  • Hallo,


    nun hat mich das ganze nochmal richtig zum Nachdenken gebracht.

    Zu dem Bootloader finde ich zu Raspberry 3 nichts. Wie beim 4er geht das leider nicht.

    Somit kann ich die GPIOs nur über den GPIO.cleanup() Befehl bereinigen.


    Spannungen kann ich hier aber nicht abschalten. Daher ist die Überlegung, das ich ein kleines Relai dazwischen baue. So ein Skript wird ja eigentlich von oben nach unten durchgearbeitet. Sprich wenn ich oben im allgemeinen Teil das Relai einmal schalten lasse und damit die Spannung der DHTs wegschalte, werden die DHTs ja quasi einmal refresht, was ich derzeit nur schaffe wenn ich den Raspberry komplett ausschalte. Seh ich das richtig?



    Quote


    Deine Adafruit Bibliothek ist auch veraltet. Die hier benutzte CircuitPython DHT wird empfohlen.


    Diese habe ich doch schon in Verwendung =)

    Wird ebenfalls über import adafruit_dht eingebunden oder woher siehst du das ich eine alte verwende?



    Zu dem Thema das Relai 100000 mal einzuschalten, habe ich aufgegriffen und das >5 durch =5 ersetzt. So wird der Ausgang einmal geschaltet, egal wie hoch der Zähler läuft. Sobald der Feuchtigkeitswert wieder unter die Grenze fällt, wird dieser Zähler ja wieder auf 0 gesetzt.


    Vielen Dank für die die Unterstützung hier.

  • Diese habe ich doch schon in Verwendung =)

    Wird ebenfalls über import adafruit_dht eingebunden oder woher siehst du das ich eine alte verwende?

    Danke, ich lerne hier auch immer noch dazu. Die letzten 2 Leute mit DHT Problemen hatten ihre Programmbibliothek verlinkt. Daher wusste ich noch nicht, dass die Importzeile identisch ist.