Seite 1 von 1
Zeitberechnung
Verfasst: Mittwoch 31. Dezember 2014, 14:11
von berndhs
Hallo zusammen,
für meine Heizungssteuerung muß ich Zeitberechnungen durchführen und brauche da mal Hilfe.
Es soll geprüft werden, ob die Zeit beim Scriptaufruf innerhalb einer vorgegebenen Zeit (Schaltzeit) liegt. Also ist "jetzt" innerhalb von
Montag 05:00 bis 22:00
..
Samstag 06:00 bis 23:00
Derzeit habe ich die Zeiten in einer Mysql-DB und mache die Abfrage dort. Ich will aber weg von der DB, die Zeiten könnten in einer separaten config ausgelagert werden.
Brauche da mal einen Anstupser wie man das lösen kann.
Gruß
Bernd
Re: Zeitberechnung
Verfasst: Mittwoch 31. Dezember 2014, 14:41
von noisefloor
Hallo,
im einfachsten Fall legst du die einfach eine Datei an, z.B. time_config.py, und hinterlegst darin die Zeiten. Ob als String, Liste, Dict oder wie auch immer hängt dann davon ab, wie die erlaubten Zeiten aussehen.
Im Hauptprogramm importierst du die Datei dann und greifst auf die Werte zu.
Alternative kannst du dir auch eine .ini-Datei anlegen und darauf mit
configparser Modul zugreifen.
Gruß, noisefloor
Re: Zeitberechnung
Verfasst: Mittwoch 31. Dezember 2014, 14:45
von EyDu
Hallo und willkommen im Forum!
Wo liegt denn genau dein Problem?
Re: Zeitberechnung
Verfasst: Mittwoch 31. Dezember 2014, 15:02
von mutetella
Das ist ein klassischer
datetime Fall...

Code: Alles auswählen
import datetime
class TimeRange(object):
def __init__(self, weekday, begin, end=None):
self.weekday = weekday
self.begin = begin
self.end = end or begin
def intersection(self, other):
return (
self.weekday == other.weekday and
self.begin <= other.begin and
self.end >= other.end
)
Damit legst Du für jeden Zeitraum, den Du überprüfen möchtest, ein ``TimeRange`` Objekt an und prüfst mit dessen ``intersection`` Methode, ob sich ein anderes ``TimeRange`` Objekt darin befindet:
Code: Alles auswählen
>>> import datetime
>>> valid_time = TimeRange(0, datetime.time(5, 0), datetime.time(22, 0))
>>> valid_time.intersection(TimeRange(0, datetime.time(5, 0), datetime.time(22, 0)))
True
>>> valid_time.intersection(TimeRange(0, datetime.time(5, 0), datetime.time(22, 1)))
False
>>> valid_time.intersection(TimeRange(0, datetime.time(4, 59), datetime.time(22, 0)))
False
>>> valid_time.intersection(TimeRange(0, datetime.time(8, 0)))
True
>>> valid_time.intersection(TimeRange(1, datetime.time(8, 0)))
False
mutetella
Re: Zeitberechnung
Verfasst: Mittwoch 31. Dezember 2014, 15:36
von Sirius3
@mutetella: die intersection-Methode ist wohl eher ein contains.
Re: Zeitberechnung
Verfasst: Mittwoch 31. Dezember 2014, 15:42
von mutetella
@Sirius3
Stimmt. Für ``intersection`` müsste das zweite ``and`` ein ``or`` sein, oder?
mutetella