Raspberry Pi zeigt falsche Uhrzeiten an

  • Hi zusammen,

    erstmal kurzes Vorwort damit es leichter zu verstehen ist. Ich habe ein Projekt in meinem Ausbildungsbetrieb bekommen, per Magnetschalter eine Überwachung für das Rolltor zu bauen. Ich habe es mittlerweile geschafft, dass bei Statusänderung automatisch in der Commandline eine Nachricht erscheint mit Timestamp und dem Aktuellen Status nur habe ich das Problem, dass sobald der Code gestartet wird sich der Timestamp nicht mehr ändert. Habe ich hier einen Denkfehler? Geht das überhaupt nicht?
    Des weiteren, würde ich zeitgleich eine *.txt Datei erstellen mit dem genannten Timestamp und der Statusänderung erzeugen also quasi ein LOG (alle Änderungen sollen in die gleiche Datei geschrieben werden) Wie ist das möglich?

    Hier der Code:
    from datetime import datetime
    import signal
    import sys
    import RPi.GPIO as GPIO

    MAGNET_GPIO = 17

    jetzt = datetime.now()
    datum_zeit = jetzt.strftime("%Y-%m-%d %H:%M:%S")

    def signal_handler (sig, frame):
    GPIO.cleanup()
    sys.exit(0)
    def button_callback(channel):
    if not GPIO.input(MAGNET_GPIO):
    print(f"{datum_zeit}:" "tor offen")
    wert = 1
    else:
    print(f"{datum_zeit}:" "Tor geschlossen")
    wert = 0

    if __name__ == '__main__':
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(MAGNET_GPIO, GPIO.IN, pull_up_down=GPIO.PUD_UP)

    GPIO.add_event_detect(MAGNET_GPIO, GPIO.BOTH, callback=button_callback, bouncetime=50)

    signal.signal (signal.SIGINT, signal_handler)
    signal.pause()

    Ich hoffe es war halbwegs verständlich und bedanke mich im voraus für die Antworten.

    Nach oben

  • Jonathan Zwosta Quelltext bitte in Zukunft in einem Code-Block im Beitrag setzen, dann bleibt die Formatierung/Einrückung erhalten. Und farbige Syntaxhervorhebung gibt's gratis dazu. 🤓

    Dein Denkfehler ist das Code der einmal ausgeführt wurde nicht auf magische Weise immer dann noch mal ausgeführt wird wenn man das praktisch finden würde. Da wird einmal vor der Definition von den Funktionen eine Zeichenkette mit der dann aktuellen Uhrzeit erstellt. Warum sollte sich eine Zeichenkette auf magische Weise ändern, ohne das man da explizit Code schreibt der das macht‽

    Wenn Du an einem Punkt im Programmablauf einen aktuellen Zeitstempel haben möchtest, musst Du auch an der Stelle im Programmablauf die aktuelle Zeit ermitteln.

    Das mit dem Signal-Handler würde man in C machen, in Python macht das nicht wirklich Sinn. Da würde man mit try/finally dafür sorgen, dass am Ende die gewünschten Aufräumarbeiten stattfinden. Dann passiert das auch wenn unvorhergesehe Ereignisse wie andere Ausnahmen als KeyboardInterrupt das Programm beenden.

    Die Zuweisung an wert kann weg, denn das wird nirgends verwendet. Und das Hauptprogramm sollte auch in einer Funktion verschwinden. Die heisst üblicherweise main().

    “Don't put your trust in revolutions. They always come around again. That's why they're called revolutions. People die, and nothing changes.” — Terry Pratchett, Night Watch

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!