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.
Raspberry Pi zeigt falsche Uhrzeiten an
-
Jonathan Zwosta -
September 2, 2024 at 2:59 PM -
Thread is Unresolved
-
-
Raspberry Pi zeigt falsche Uhrzeiten an? Schau mal ob du hier fündig wirst!
-
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().
Participate now!
Don’t have an account yet? Register yourself now and be a part of our community!