at -> notify -> modify at überpringt Ausführung

Begonnen von koldomon, 01 Dezember 2013, 14:08:08

Vorheriges Thema - Nächstes Thema

koldomon

Hallo zusammen,

ich beobachte gerade folgendes Phänomen

ein at löst um xx:05 einen notify aus. In dem notify aktualisiere ich das Intervall des at. Der modifizierte at zeigt aber nicht die nächste (gewollte) Ausführung, sondern die übernächste.
Beispiel:
"at1" ist definiert als +*00:30 trigger nfy1
12:05 Uhr AT "at1" wird ausgelöst und ruft notify "nfy1" auf
notify "nfy1" macht ein "modify at1 +*00:10"
theoretisch sollte der "at1" jetzt "Next: 12:15" anzeigen, aber zeigt "Next: 12:25" an. Der AT überspringt quasi eine Ausführung obwohl es immer noch 12:05 Uhr ist

Was ich erreichen wollte: Der Notify soll einen Aktor einschalten und das Prüfintervall auf 10min. setzen. wird der Aktor ausgeschaltet, soll das Prüfintervall 30 min. sein.

Hab ich einen Denkfehler, Bug oder "Behavior by design"?

Danke für eure Unterstützung

OdroidC1 -> fhem
CUNO -> FS20
CUL -> HomeMatic
TCM310 -> enOcean
DUOFERN -> rademacher

rudolfkoenig

Letzteres.

Falls at mit * definiert ist (d.h. wiederkehrende at), dann ruft es nach dem ausfuehren des zugehoerigen Befehls wieder die Funktion "define" auf, um den naechsten Zeitpunkt zu bestimmen. Damit ist ein modifizieren im ausgefuehrten Befehl sinnlos.

koldomon

danke rudolfkönig für die Erklärung

aber, wie kann ich das sonst machen? Ich hätte gerne, dass wenn der Aktor an ist, öfter geprüft wird, ob der Status noch benötigt wird. 10min wenn an und 30 min. wenn aus. Wie macht man sowas, wenn nicht mit modify at?
OdroidC1 -> fhem
CUNO -> FS20
CUL -> HomeMatic
TCM310 -> enOcean
DUOFERN -> rademacher

rudolfkoenig

Entweder ein at, der alle 10 minuten laeuft, und falls nicht notwendig, die pruefung nicht durchfuehrt, oder zwei ats, die je nach Zustand was machen oder nicht.

koldomon

Hallo rudolfkönig,

danke, dann geh ich "zu Fuß"  ;)

ich hab mir über dein geschildertes Verhalten mal gedanken gemacht. Evtl. könntest du für ein Update ein Attribut vorsehen, mit dem man bestimmen kann, ob die Berechnung für die nächste Ausführung auf dem State oder auf time() basiert. Bei der Gelegenheit auch gleich ein Attribut, mit dem man das "alignTime" für jede Berechnung mit einbeziehen kann.

schönen abend

cu markus
OdroidC1 -> fhem
CUNO -> FS20
CUL -> HomeMatic
TCM310 -> enOcean
DUOFERN -> rademacher