Python Funktion zu bestimmter Zeit ausführen
Hallo,
Ich möchte mit meinem Python Programm auf dem Raspberry Pi meine Wetterdaten in eine SQL Datenbank schreiben. Ich möchte allerdings nur zu den Minuten 0,15,30,45 den Wert eintragen. Ich habe es bis jetzt so weit gebracht, dass es nur zu den angegebenen Minuten in die Datenbank schreibt, aber dann ist halt das Problem, dass es bei Minute 15 den Wert mehrmals einträgt. Also was ich eigentlich brauche ist eine Funktion die erst einmal Checkt dass es zb. 10:15 ist(die stunde ist uninteressant, es geht nur um die Minuten) und dann zusätzlich noch checkt ob für diese Minute schon ein Wert eingetragen wurden, wenn nicht, dann soll er eingetragen werden, wenn ja, dann soll er das Eintragen überspringen.
So siehts bis jetzt aus, allerdings wird diese Funktion 5-6 mal Pro Minute aufgerufen und demnach wird dann der Wert auch bis zu 5-6mal in die DB geschrieben
zeit = time.strftime("%M")
zeit = int(zeit)
if zeit == 0 or zeit == 15 or zeit == 30 or zeit == 45:
c.execute("INSERT INTO wetterdata (date, time, temperature, pressure) VALUES (CURRENT_DATE(), NOW(),%s,%s)", (temp, pressure))
Danke für eure Hilfe!
Justin
2 Antworten
Du kannst mit time.sleep(3) z.b. 3 min warten ( zuerst natürlich import time)
Ja klar, das würde gehen, jedoch werden noch andere Funktionen ausgeführt. time.sleep(3) bedeutet ja dass das ganze Programm für 3 sekunden angehalten wird. Und zudem wollte ich eben dass die Werte genau zu Minute 0,15,30,45 in die Datenbank geschrieben werden, und eben nicht wenn das Programm gestartet wird + 15 minuten.
Aber trotzdem Danke dass du dir meine Frage durchgelesen hast!
du musst zusätzlich noch eine kontrollvariable altezeit einführen mit format HH:MM
diese wird innerhalb des IFs abgefragt und danach gesetzt:
neuezeit = time.strftime("%H:%M") # hilfsvariable
if zeit % 15 == 0 and neuezeit > altezeit: # beim 1. mal sollte altezeit == "" sein
altezeit = neuezeit
c.execute ...
ohne gewähr...
Hat geklappt! Super! Da hätte ich auch mal draufkommen sollen einfach neue und alte zeit miteinander zu vergleichen. Aber wozu braucht man
zeit % 15 == 0
? Reicht nicht einfach nur alte und neue zeit zu vergleichen? Solltest du meinen dass Python damit nur zu Minute 15 diese abfrage als true bezeichnet, geht das leider nicht. Er führt immer noch jede Minute die Funktion genau einmal aus. Um das auf Minute: 0,15,30 und 45 zu beschränken habe ich einfach noch ein IF davorgeschoben.
if zeit == 0 or zeit == 15 or zeit == 30 or zeit == 45:
Mein weiteres IF mag jetzt nicht die eleganteste Lösung sein, aber es klappt.
Vielen Dank an dich!
Jetzt wirds nur noch spannend wann sich der Raspberry mal aufhängt oder ob man über mehrere Wochen die Messung laufen lassen kann.