IPS_SetEventCyclic fehlerhaft ?!

Das reicht erstmal. Gebt mir ein wenig Zeit nachzusehen, ob das so gewollt ist, oder ein Fehler ist…

paresy

ich wollte mal nachfragen ob es an der front was neues gibt?

Ich hab endlich mal Zeit gehabt mir die Sache genauer anzusehen.

Es ist kein Bug, sondern eine Eigenart, wie die Timer funktionieren. Die Zeituhr (quasi alle x Sekunden) wird immer auf Basis des CyclicTimeFrom Timestamps berechnet. Wenn dieser also ab 00:05 startet, wird der Timer, wenn dieser im 60 Sekunden Takt läuft, immer bei der 5. Sekunde von jeder Minute ausgeführt. Das ist so gemacht, damit ihr eure zyklischen Timer unabhängig vom Systemstart gestreut ausführen könnt. (Also z.B. nicht alles zur vollen Minute).

Das bedeutet also, dass ihr das Eieruhr-Prinzip nachbauen könnt, indem ihr den absoluten Startzeitpunkt für die Berechnung verändert. Das könnt ihr mit dieser Funktion machen: IPS_SetEventCyclicTimeBounds: IP-Symcon :: Automatisierungssoftware


//Einfach Variante. Hat aber das Problem, dass nach Mitternacht der Timer nicht mehr korrekt laufen würde, sofern dies benötigt wird. Für eine einfache Eieruhr aber ausreichend.
IPS_SetEventCyclicTimeBounds($eid, time(), 0);

//Vollständige Variante, die jedoch das aktuelle Timer-Intervall benötigt. (Je nach Anwendungsfall auch über IPS_GetEvent abfragbar)
IPS_SetEventCyclicTimeBounds($eid, time() % $TIMERINTERVALL, 0);

Die IPS_SetScriptTimer Funktion benutzt genau dieses Prinzip, um den Timer relativ zum Ausführungszeitpunkt der Funktion innerhalb der nächsten X Sekunden neu zu starten.

Ich hoffe, ich konnte ein wenig Licht ins Dunkel bringen :slight_smile:

paresy

Hallo,
ich brauche noch etwas Hilfe zu IPS_SetEventCyclicTimeBounds :o

Ich habe einen Script eine Ereignis zugefügt welches tägl. ausgeführt wird.
Wenn ich nun mit IPS_SetEventCyclicTimeBounds die Ausführungszeit ändere wir die auch übernommen, aber das Script startet nicht zu der angegeben Zeit :confused:

Wenn ich die Uhrzeit in den Ereignis manuell ändere und mit weiter und ok das Ereignis verlasse wird das Script ordentlich zur gewünscheten Zeit ausgeführt :o

Hier mein Befehl:

IPS_SetEventCyclicTimeBounds(14334 /*[Haussteuerung\Schlafzimmer\Scripte\Wecken Start 0\]*/, mktime(1, 00, 0), 0); // Wecker

Mache ich da irgendetwas falsch ?