Timer schaltet zu falscher Zeit bzw. unvorhergesehen

Hallo zusammen… ich versuche mein Problem halbwegs verständlich zu Beschreiben:

Ich habe eine Int Variable mit dem Profil 0=Aus, 1 =Ein, 2=Zeit für meine Gartenbewässerung. Diese hat ein Aktionsskript:

<?php
SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
$id_knx = "36339";
$id_timer = "15806";
$i = $_IPS['VALUE'];
$t = GetValueInteger(18065);
switch ($i) {
    case 0:
    KNX_WriteDPT1($id_knx, false);
    IPS_SetEventActive($id_timer, false);
    break;
    case 1:
    KNX_WriteDPT1($id_knx, true);
    break;
    case 2:
    IPS_SetEventCyclic($id_timer, 0, 0, 0, 0, 2, $t);
    IPS_SetEventActive($id_timer, true);
    KNX_WriteDPT1($id_knx, true);
    break;
}

und ein Ereigniss mit der oben genannten ID.
Das Ereigniss hat als Aktion den Code:

SetValueInteger(55480,0);
KNX_WriteDPT1(36339, false);
IPS_SetEventActive(15806, false);

Dann gibt es noch die Int Zeit mit der ich Zeit vorwähle welche das jeweilige Ventil öffnen soll.

Jetzt ist es aber so, dass die Ventile zu völlig unvorhergesehenen Zeiten zurück schalten. Ich habe noch keine wirklichen Schlussfolgerungen aus dem ganzen ziehen können. Auf jeden Fall wird bei längeren Schaltzeiten die Dauer nicht erreicht.
Kann sich jemand einen Reim darauf machen bzw. erkennt einen Fehler im Code?
So Schaut der Objektbaum aus:


Und so war die letzte Schaltung bei 90min vorgewählt:
grafik

gruß
Stefan

Der Intervall wird immer von der eingestellt Startzeit berechnet und diese Zeit wird nicht in deinem Script gesetzt.
Du setzt es nur auf aktiv/inaktiv. Dadurch ändert sich aber die Startzeit nicht. Und somit wird beim Erreichen des nächsten Zeitintervall ausgeschaltet. Das kann auch in 5 Minuten sein.
Du musst also auch die Startzeit auf die aktuelle Zeit setzen.

Michael

Ja wie geil… Ok einfache Lösung, jetzt wird das auch völlig klar warum ich keine Systematik erkennen konnte. Da wär ich nie drauf gekommen.
Also beim setzen die Ist-Zeit aufdröseln und mit IPS_SetEventCyclicTimeFrom setzen oder?
Danke
Stefan

Genau. Oder das Muster auf einmalig setzen und eine Zielzeit ausrechnen und setzen.
Den Code im Ereignis kannst du auch sparen und damit einfach schalte Variable (als Ziel die Variable auswählen) auf 0 auswählen.
Michael