Funktionen zu bestimmten Zeiten ausführen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
blubb333
User
Beiträge: 4
Registriert: Sonntag 6. April 2014, 17:51

Hallo liebe Gemeinde,

ich benötige eure Hilfe in Bezug auf ein Konzept. Und zwar möchte ich mit einem Script verschiedene Steuerungen schalten.

1) Es gibt 366 Zeitpaare - je Kalendertag die Zeit für Sonnenaufgang und Sonnenuntergang. Anhand dieser Zeiten soll eine Lichtschaltung ein- und ausgeschaltet werden.
2a) An bestimmten Zeiten am Tag sollen zudem mehrere Motoren für kurze Zeit (0,5-2 Sekunden) gestartet werden. D.h. diese Motoren werden immer zu gleichen Zeiten ein oder mehrmals am Tag aktiviert.
2b) Manche Motoren sind in Abhängigkeit von Punkt 1 zu sehen. D.h. z.B. 30 Minuten vor Sonnenaufgang wird Motor 1 kurz aktiviert; Motor 2 30 Minuten nach Sonnenuntergang...

Derzeit habe ich es so gelöst, dass in einem Array die Zeitpaare in vergangenen Sekunden des Tages gespeichert sind.

Code: Alles auswählen

beleuchtungszeiten = [ (25836, 74095), (25875, 74113), (25914, 74128), usw... ] 
	while True:
		aktuelle_zeit = (localtime().tm_hour*3600)+(localtime().tm_min*60)+localtime().tm_sec
		(beginn, ende) = beleuchtungszeiten[localtime().tm_yday-1] # Hier wird aus dem Array anhand des Kalendertages die Zeiten für Sonnenaufgang und -untergang ausgelesen
		if beginn < aktuelle_zeit < ende:
			# Licht wird eingeschaltet (dabei wird ein Dimmvorgang über 15 Minuten vorgenommen)
		sleep(60)
Ich finde das insgesamt irgendwie nicht so wirklich elegant gelöst (Punkt 2 ist noch gar nicht implemetiert). Entsprechend wird das Licht natürlich auch wieder ausgeschaltet.
Vor allem habe ich das Problem, was passiert, wenn die Stromzufuhr mal unterbrochen wird und das Script neu gestartet wird - z.B. wenn dies während des Dimmvorgangs passiert.

Naja, ich freue mich auf jede Anregung, wie ihr das am Besten umsetzen würdet.
BlackJack

@blubb333: Als erstes würde ich mal das `datetime`-Modul anschauen. Damit lassen sich die Werte etwas „menschenlesbarer” angeben.

`localtime()` mehrfach aufzurufen um dann jeweils eine Komponente zu verwenden kann in seltenen Fällen problematisch sein. Denn bei mehrfachen Aufrufen müssen die Stunden, Minuten, und Sekundenwerte ja zusammen nicht mehr die aktuelle Zeit ergeben. Da kann die Zeit die am Ende heraus kommt um 59 Minuten in der Vergangenheit liegen.

Das was Du Array nennst, ist übrigens eine Liste.
blubb333
User
Beiträge: 4
Registriert: Sonntag 6. April 2014, 17:51

Ich überlege ob Crontabs besser geeignet wären...
Antworten