Timer Ereignis deaktivieren

Hallo, habe eine Frage zum Timer Ereignis:
Früher (ist mir erst jetzt in der aktuellen V 5.3 aufgefallen, hatte lange nicht mehr programmiert) konnte ich im Objektbaum die vom Script erzeugten Timer per Maus aktivieren/deaktivieren…heute kommt die Fehlermeldung ‚kein gültiges Von oder Zu Datum gewählt‘.
Im Timer ist tatsächlich beim Tagesmuster nur ein Dummy Datum ‚tt.mm.jjjj‘ eingetragen … das hatte meines Wissens nach nie gestört.
Heute muss ich ein gültiges Datum eintragen …habt ihr da etwas geändert? Muss ich meine Timerroutine in den Scripts anpassen?

Gruß Michael

Daran hat sich seit mindestens 4.0 nichts geändert, wenn mich nicht alles täuscht.

Doch, die webbasierte Konsole prüft, ob im Ereignis sinnvolle Werte eingetragen sind, und trägt diese auch bei Erstellung automatisch ein. Die SkriptTimer sind da aber passend definiert und direkt deaktivierbar. Wie erstellst du die Ereignisse? Wenn diese unvollständig definiert sind, dann kommt es halt zu der entsprechenden Fehlermeldung.

Stelle heut Abend meine Script Funktion hier ein…es wundert mich, dass ein deaktivieren/aktivieren per Script funktioniert.
Ich versuche das noch einmal nachzustellen.
Gruß Michael

Ich meinte, dass sich am skriptbasiertern Erstellen von Ereignissen nichts geändert hat. Das die Webkonsole etwas strenger prüft mag die Erklärung sein. Ich vermute, dass die Ereignisse nicht korrekt definiert werden. Die Legacy Konsole hat es nicht gestört, die aktuelle Konsole meckert. :loveips:

Hallo,

hier mein Code zur Timer Behandlung:

Aufruf der Funktion:

      	   TimerDelay($_IPS['INSTANCE'],$_IPS['INSTANCE2'], $_IPS['DURATION'], $SC_Name);

die Funktion:

function TimerDelay($id, $id2, $time, $name){
    $sekunden=intval(substr($time, 0,-3));
    $msekunden=substr($time, -3, 3);
    $timerid = IPS_GetObjectIDByName($id." ".$id2." ".$name, $_IPS['SELF']);
	#echo "Timer: ".$timerid."
";
    if ($timerid ==0){
   	    $newtimer = IPS_CreateEvent(1);
	    IPS_SetParent($newtimer, $_IPS['SELF']);
   	    IPS_SetName($newtimer, $id." ".$id2." ".$name);
   	    IPS_Sleep(intval($msekunden));
   	    IPS_SetEventCyclic($newtimer, 0, 0, 0, 0, 1, $sekunden);
		IPS_SetEventCyclicDateFrom($newtimer, 0, 0, 0);
		IPS_SetEventCyclicDateTo($newtimer, 0, 0, 0);
		IPS_SetEventCyclicTimeFrom($newtimer, (int)date("H"), (int)date("i"), (int)date("s"));
		IPS_SetEventCyclicTimeTo($newtimer, 0, 0, 0);
   	    IPS_SetEventActive($newtimer, true);    //Ereignis aktivieren
    }
   else
   {
        IPS_Sleep(intval($msekunden));
   	    IPS_SetEventCyclic($timerid, 0, 0, 0, 0, 1, $sekunden);
		IPS_SetEventCyclicDateFrom($timerid, 0, 0, 0);
		IPS_SetEventCyclicDateTo($timerid, 0, 0, 0);
		IPS_SetEventCyclicTimeFrom($timerid, (int)date("H"), (int)date("i"), (int)date("s"));
		IPS_SetEventCyclicTimeTo($timerid, 0, 0, 0);
   	    IPS_SetEventActive($timerid, true);    //Ereignis aktivieren
   }
}

und reagieren (deaktivieren) auf das Timer Event:

	case "TimerEvent":
	IPS_SetEventActive($_IPS['EVENT'], false);    //Ereignis deaktivieren
	$timer = IPS_GetName($_IPS['EVENT']);
	$_IPS['INSTANCE'] = intval(substr($timer,0,5));
	$_IPS['INSTANCE2'] = intval(substr($timer,6,5));
	HM_WriteValueBoolean($_IPS['INSTANCE2'], "STATE" , False);
	HM_WriteValueBoolean($_IPS['INSTANCE'], "STATE" , False);
	break;

Das aktivieren/deaktivieren klappt per Script … habe nur jetzt beim Debuggen bemerkt, dass die Fehlermeldung beim manuellen Versuch kommt.

Vorschläge wie man es besser/anders macht sind gerne Willkommen :slight_smile:

Gruß Michael

Wenn du bei der Erstellung des Ereignisses bei IPS_SetEventCyclicDateFrom($newtimer, 0, 0, 0); stattdessen ein gültiges Datum einträgst (z.B. das heutige Datum oder auch einfach der 1.1.2000) dann meckert die Konsole nicht mehr.

OK
Sonst im Prinzip richtig?
Kann man die Funktion sinnvoll kürzer machen?

Ohne mich jetzt detailliert durchzuarbeiten: Könnte man das vielleicht sinnvoll durch IPS_SetScriptTimer ersetzen oder zumindest kürzen? Ich finde zum Beispiel deinen Trick die Millisekunden erst per IPS_Sleep abzufangen sehr geschickt. Den müsste man auch bei dem SkriptTimer drin lassen.

Wir erweitern die Konsole, sodass diese bei diesem „Standardwert“ stattdessen das aktuelle Datum einträgt.

paresy