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