Hallo Paresy!
Vielen Dank für die rasche Rückmeldung. Du hast sicherlich nicht ganz Unrecht mit deiner Vermutung, aber ich beschäftige mich intensiv mit dem Thema und mache Fortschritte
Ich versuche es mal anhand eines Beispiels zu erklären.
Um Mitternacht wird über ein Ereignis ein Script angetriggert, das u.a. einen Event anlegt, der einen Dimmer im Wohnzimmer auf 70% stellen soll.
$Befehl = array(1 => "HM_WriteValueFloat(\$IPS_TARGET, 'LEVEL', $Aktion);", 2=> "HM_WriteValueBoolean(\$IPS_TARGET, 'STATE', " . ($Aktion ? 'true' : 'false') . ");", 3 => "SC_MoveUp(\$IPS_TARGET, $Aktion);");
$eid = IPS_CreateEvent(1);
IPS_SetEventCyclic($eid, 0, 0, 0, 2, ($Zeit["repeat"] ? 2 : 0) ,1); //Zeitintervall auf eine Minute stellen, bei "repeat=true" jede Minute wiederholend
IPS_SetEventCyclicTimeBounds($eid, mktime($Zeit["hour"], $Zeit["minute"], 0), 0);
IPS_SetName($eid, ($Praesenz ? "Anwesend " : "Abwesend ") . ips_GetName($ObjectID*1));
IPS_SetParent($eid*1,$ObjectID*1); //Event an den richtigen Ort verschieben
IPS_SetEventScript($eid, $Befehl[$Typ*1]);
IPS_SetEventActive($eid,false);
Abhängig vom Name des Events werden danach die Events die dem aktuellen Anwesenheitsprofil entsprechen aktiviert (Anwesend oder Abwesend).
Wenn sich nun im Laufe des Tages das Anwesenheitsprofil ändert (z.B. von Anwesend auf Abwesend) wird geprüft, ob es im nun aktuellen Profil (Abwesend) ein Ereignis gibt das in der Vergangenheit liegt und noch nicht ausgeführt wurde. Wenn solche Ereignisse gefunden werden, wird das jüngste Ereignis verwendet und ausgeführt (und das mache ich jetzt mal übergangsweise mit der oben beschriebenen Variante mit IPS_SetEventCyclicTimeBounds). Also am Beispiel Dimmer:
Profil Anwesend: 17:00 Uhr Dimmer 60%
Profil Anwesend: 20:00 Uhr Dimmer 80%
Profil Abwesend: 18:00 Uhr Dimmer 0%
Profil Abwesend: 19:00 Uhr Dimmer 50%
Um 18:15 wird von Anwesend auf Abwesend gewechselt. Der Dimmer ist bei 60% (Anwesend) und muss auf 0% (jüngstes Event in der Vergangenheit) schalten. Um 19:00 schaltet der Dimmer auf 50%.
Wenn um 19:15 wieder auf Anwesend gewechselt wird, muss der Dimmer auf 60% (jüngster Event um 17:00 Uhr).
So habe ich es mir vorgestellt und auch schon umgesetzt. Wenn ich die Ausführungszeit der Events auf 10 Sekunden nach der aktuellen Zeit ändere werden sie auch ausgeführt, aber ich habe die Befürchtung, dass je nach Auslastung des Systems das unzuverlässig ist (ich habe beobachtet dass es mitunter mehrere Sekunden dauert, bis der Skriptbefehl beim Ereignis ankommt).
Ich hoffe, ich habe es halbwegs verständlich erklärt was ich machen will.
Danke für die Tipps im Voraus!
LG
Hugo