Hi!
Ich habe trotz einiger Erfahrung mit den smarthome.py-Innereien leider immer noch keine schöne Methodik gefunden, wie ich eine Logik die - unter Anderem - vom Crontab-Einträgen in der logic.conf gesteuert wird, richtig bei einem sh.py Neustart initialisiere:
Problem: Das wird schnell unübersichtlich, zudem ist die Gefahr von Inkonsistenzen sehr groß.
Möglichkeit 1:
Am Besten wäre es, wenn man (anstelle des "init") evtl. "last_match" parametrieren könnte, und die Logik dann initial mit dem letzten passenden Crontab-Eintrag aufgerufen würde!? Hier müsste der scheduler einmal alle Zeitspannen zwischen den Crontab-Einträgen und der aktuellen Zeit abprüfen. Gerade der scheduler ist ein wenig Voodoo - daher: aufwandstechnisch machbar?
Möglichkeit 2:
Ein Plugin wird nur mit "init" gestartet und trägt seine Crontrab-Einträge selber in den Scheduler ein. Damit könnte man Inkonsistenzen ausschließen, jedoch müsste das Plugin dann trotzdem mühevoll abfragen welcher der "letzte gültige Crontab" war.
Grüße
Robert
Ich habe trotz einiger Erfahrung mit den smarthome.py-Innereien leider immer noch keine schöne Methodik gefunden, wie ich eine Logik die - unter Anderem - vom Crontab-Einträgen in der logic.conf gesteuert wird, richtig bei einem sh.py Neustart initialisiere:
Code:
[tralala] name = 'tralala' filename = tralala.py crontab = init | 30 6 * 0,1,2,3,4 = day | 30 7 * 5,6 = day | 00 19 * * = night
Code:
if (trigger['by'] == 'Scheduler'): if (trigger['value'] == 'day'): logic.state_time = 'day' elif (trigger['value'] == 'night'): logic.state_time = 'night' if (not hasattr(logic,'state_time')): now = sh.now() if (((now.weekday() in range(0,5)) and (now.time() > datetime.time(6,30)) and (now.time() < datetime.time(19,30))) or ((now.weekday() in range(5,7)) and (now.time() > datetime.time(7,30)) and (now.time() < datetime.time(19,30)))): logic.state_time = 'day' else: logic.state_time = 'night'
Möglichkeit 1:
Am Besten wäre es, wenn man (anstelle des "init") evtl. "last_match" parametrieren könnte, und die Logik dann initial mit dem letzten passenden Crontab-Eintrag aufgerufen würde!? Hier müsste der scheduler einmal alle Zeitspannen zwischen den Crontab-Einträgen und der aktuellen Zeit abprüfen. Gerade der scheduler ist ein wenig Voodoo - daher: aufwandstechnisch machbar?
Möglichkeit 2:
Ein Plugin wird nur mit "init" gestartet und trägt seine Crontrab-Einträge selber in den Scheduler ein. Damit könnte man Inkonsistenzen ausschließen, jedoch müsste das Plugin dann trotzdem mühevoll abfragen welcher der "letzte gültige Crontab" war.
Grüße
Robert
Kommentar