DS18B20 TO-92 Temperatursensor bereitet Probleme? Schreiben Sie einen Überwachungsdienst.

Behebung von Instabilität bei DS18B20 TO-92 Temperatursensoren: Ein praktischer Leitfaden In meinem Smart Home-Klimamodul verwende ich eine Vielzahl von Sensoren und Anwendungen zur Überwachung von Temperatur, Luftfeuchtigkeit, Luftdruck und Luftqualität. Ein immer wiederkehrendes Problem mit

Behebung von Instabilität bei DS18B20 TO-92 Temperatursensoren: Ein praktischer Leitfaden

In meinem Smart Home-Klimamodul verwende ich eine Vielzahl von Sensoren und Anwendungen zur Überwachung von Temperatur, Luftfeuchtigkeit, Luftdruck und Luftqualität. Ein immer wiederkehrendes Problem mit dem DS18B20 TO-92 Temperatursensor veranlasste mich jedoch, eine Lösung für eine ununterbrochene Datenaufzeichnung zu finden. In diesem Artikel teile ich meine Erfahrungen, beschreibe das Problem, seine Auswirkungen auf die Datenerfassung und eine einfache, aber effektive Lösung, um eine stabile Sensorleistung zu gewährleisten.

Ursprünglich erwartete ich eine nahtlose Integration des DS18B20 TO-92-Sensors neben den Messwerten des BME688-Sensors in meiner Datenbank. Leider erwies sich diese Annahme als falsch, da ich an den Vormittagen häufig Lücken in den aufgezeichneten Daten entdeckte. Das Skript, das für die Datenerfassung verantwortlich war, versäumte es oft, über längere Zeiträume Temperaturwerte zu erfassen, was ein ständiges Ärgernis darstellte.

In der Anfangsphase dieses Problems bestand meine unmittelbare Reaktion darin, das System neu zu starten, um den Sensor wieder in Betrieb zu nehmen und die Skriptfunktionalität wiederherzustellen. Da ich erkannte, dass ich eine nachhaltigere Lösung brauchte, untersuchte ich die Möglichkeit, den 1-Wire-Bus zurückzusetzen, die Treiber zu entladen und neu zu laden und den Sensor erneut zu erfassen. Zu meiner Erleichterung funktionierte dieser Ansatz nahtlos. Durch einfaches Entladen und Neuladen der Treiber war der DS18B20-Sensor innerhalb von Sekunden wieder online.

Zur weiteren Absicherung gegen Skriptausfälle aufgrund der Nichtverfügbarkeit von Sensoren habe ich einen Workaround implementiert, der das Schreiben von Daten auch dann ermöglicht, wenn ein Sensor offline ist. Außerdem habe ich einen kleinen Watchdog speziell für DS18B20-Sensoren entwickelt. Dieser Watchdog prüft ständig, ob ein Sensor vorhanden ist, und reinitialisiert den 1-Draht-Bus, um die Sensoren bei Bedarf wieder online zu bringen.

Die Implementierung ist einfach: Erstellen Sie eine “w1watchdog.py”, fügen Sie sie zu “/etc/rc.local” hinzu und lassen Sie sie in einer Dauerschleife laufen. Dieses Python-Programm setzt den Sensor zurück und sorgt so für seinen kontinuierlichen Betrieb. Seitdem ich diese Lösung eingeführt habe, laufen alle meine Skripte reibungslos und zuverlässig. Das Programm protokolliert auch die Aktivitäten in ‘/var/log/w1watchdog.log’ und gibt so Aufschluss über die Häufigkeit der Rücksetzungen, ein hilfreiches Werkzeug zur Fehlerbehebung, um die Stabilität des Sensors zu erhalten.”

Eine Datei w1watchdog.py erstellen und sie in /etc/rc.local hinzufügen

nano w1watchdog.py

Kopieren Sie diese Zeilen und fügen Sie sie in Ihre Datei ein:


import subprocess
import time
import logging
   
def setup_logger():
    # Log-Datei konfigurieren
    logging.basicConfig(
        filename='/var/log/w1watchdog.log',
        level=logging.INFO,
        format='%(asctime)s - %(levelname)s: %(message)s',
        datefmt='%Y-%m-%d %H:%M:%S'
    )
   
def check_sensor(device_id):
    try:
        # Versuche das Gerät zu lesen
        subprocess.check_output(['cat', f'/sys/bus/w1/devices/{device_id}/w1_slave'])
        return True
    except subprocess.CalledProcessError:
        return False
   
def reset_w1_bus():
    try:
        # W1-Bus-Module entfernen und wieder hinzufügen
        subprocess.run(['sudo', 'rmmod', '-f', 'w1_gpio'], check=True)
        subprocess.run(['sudo', 'rmmod', '-f', 'w1_therm'], check=True)
        subprocess.run(['sudo', 'modprobe', 'w1_gpio'], check=True)
        subprocess.run(['sudo', 'modprobe', 'w1_therm'], check=True)
    except subprocess.CalledProcessError as e:
        logging.error(f"Fehler beim Zurücksetzen des W1-Bus: {e}")
        raise
   
def main():
    setup_logger()
    device_id = '28-3ce1d443d02b'  # Ersetze durch die tatsächliche Device-ID deines DS18B20-Sensors
   
    while True:
        try:
            if not check_sensor(device_id):
                error_message = f"Sensor {device_id} nicht gefunden. W1-Bus wird zurückgesetzt."
                logging.error(error_message)
                print(error_message)
                reset_w1_bus()
            else:
                logging.info(f"Sensor {device_id} gefunden.")
   
            time.sleep(300)  # Warte 5 Minuten, bevor der nächste Check durchgeführt wird
   
        except Exception as e:
            # Behandle unerwartete Ausnahmen und protokolliere den Fehler
            error_message = f"Unerwarteter Fehler: {str(e)}"
            logging.error(error_message)
   
if __name__ == "__main__":
    main()

Bitte ändern Sie Ihre Sensor-ID hier! Sie finden Ihre ID hier:

ls -la /sys/bus/w1/devices

Öffnen Sie die Datei /etc/rc.local in einem Texteditor:

nano /etc/rc.local

und fügen Sie folgende Zeile hinzu:

python /home/axel/dev/bme688screen/w1watchdog.py

Durch das Ausführen des Python-Programms ‘w1watchdog’ in einer Endlosschleife wird der Sensor zurückgesetzt und wieder online gebracht. Seitdem laufen alle meine Skripte reibungslos und stabil. Die Datei speichert auch ein Protokoll in /var/log/w1watchdog.log, und ich kann sehen, dass der Sensor mehrmals täglich zurückgesetzt werden muss:

2023-12-05 09:26:20 - INFO: Sensor 28-3ce1d443d02b gefunden.
2023-12-05 09:31:21 - INFO: Sensor 28-3ce1d443d02b gefunden.
2023-12-05 09:36:21 - INFO: Sensor 28-3ce1d443d02b gefunden.
2023-12-05 09:41:21 - ERROR: Sensor 28-3ce1d443d02b nicht gefunden. W1-Bus wird zurückgesetzt.
2023-12-05 09:46:22 - INFO: Sensor 28-3ce1d443d02b gefunden.
2023-12-05 09:51:23 - INFO: Sensor 28-3ce1d443d02b gefunden.
2023-12-05 09:56:24 - INFO: Sensor 28-3ce1d443d02b gefunden.
2023-12-05 10:01:25 - INFO: Sensor 28-3ce1d443d02b gefunden.
2023-12-05 10:06:26 - INFO: Sensor 28-3ce1d443d02b gefunden.

Durch Befolgen dieser Schritte und die Implementierung der Lösung mit ‘w1watchdog.py’ können Sie die Stabilität und Zuverlässigkeit von DS18B20 TO-92 Temperatursensoren in Ihrer Smart-Home-Umgebung verbessern. Mit einem konsistenten Betrieb der Sensoren können Sie darauf vertrauen, dass Ihre Datensammlungsprozesse reibungslos ablaufen, was den Frust über fehlende wichtige Temperaturmessungen vermeidet. Viel Erfolg mit Ihren Sensoren, und ich hoffe, Sie werden diesen Wachhund in Ihrem System nicht benötigen!

One thought on “DS18B20 TO-92 Temperatursensor bereitet Probleme? Schreiben Sie einen Überwachungsdienst.

Leave a Reply

Your email address will not be published. Required fields are marked *