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
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.
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?
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.
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