Wie ScriptTimer abbrechen und neu starten?

Hallo,
im Skript setze ich einen ScriptTimer: IPS_SetScriptTimer($_IPS[‚SELF‘], 600);
Wenn die 10 min abgelaufen sind, wird der ScriptTimer gelöscht.


if ($_IPS['SENDER'] == "TimerEvent")
	{
		IPS_SetScriptTimer($_IPS['SELF'], 0);		// Timer beenden
	}

Dieser PHP-Code funktioniert.
Jetzt will ich aber eventuell den ScriptTimer vorzeitig, also vor Ablauf der 10 min beenden, um den ScriptTimer anschließend wieder zu starten aber mit einer Zeit von 900 s.

Wie kann ich den ScriptTimer abbrechen und neu starten?

Einfach auf den neuen Wert setzen. Das sollte den Timer neu aufziehen.

Gruß

Burkhard

Hallo Burkhard,
Danke für deine Hilfe.

Das funktioniert nicht.
Ich habe 2 min vor Ablauf der 10 min den folgenden Code ausgeführt:

IPS_SetScriptTimer($_IPS['SELF'], 900);

Jetzt müsste der SkriptTimer noch 17 min laufen. Er wurde aber genau nach Ablauf der ersten 10 min beendet.

Ok, das überrascht mich. Habe ich aber auch noch nie ausprobiert.:o

Dann setze ihn vielleicht erst auf 0 und dann auf 900.

M.E. mußt Du das Timer-Ereignis und nicht das Skript neu programmieren.

Bei mir läuft in einem Skript, das zum Zeitpunkt $NTrig neu gestartet werden soll, folgende Routine ab:

//...
//4. //Scheduler neu timen
//$EventID = Trigger_Scheduler /* [Geräte\Events\Scheduler\Timer Scheduler] */;
//$ScriptID = Skript_Termine /* [Geräte\Events\Scheduler] */;


$EventID = IPS_GetObjectIDByIdent ( "TRG", $_IPS['SELF'] );
$ScriptID = $_IPS['SELF'];

IPS_SetEventCyclic($EventID, 0, 0, 0, 0, 0, 0);

//IPS_SetEventCyclicTimeBounds($EventID, $NTrig, 0);      // wird ersetzt durch
IPS_SetEventCyclicTimeFrom($EventID, (int)date("H", $NTrig), (int)date("i", $NTrig), (int)date("s", $NTrig));
IPS_SetEventCyclicTimeTo($EventID, 0, 0, 0);

IPS_SetEventActive($EventID, true);

//...

Viele Grüsse
Harald

Das muss mit IPS_SetScriptTimer funktionieren, den gibt es genau einmal und er wird beim Neusetzen überschrieben.

Also in deinem Beispiel dann 15 Minuten und nicht 17!

Hi!

Vor Jahren ist mir das Problem mit dem Script-Timer-Intervall auch schon aufgefallen - seitdem mache ich es auch immer so wie T30 - nicht den Intervall neu setzen (weil das nicht funktioniert hat), sondern die Timer auf einen bestimmten Zeitpunkt setzen (also z.B. 10 Sekunden in der Zukunft).

…aber hab das gerade nochmal getestet - wenn ich ein Script mit folgendem Inhalt alle paar Sekunden neu ausführe, dann wird der Timer immer wieder auf „jetzt + 10 Sekunden“ verlängert.

IPS_SetScriptTimer($_IPS['SELF'], 10);

if ($_IPS['SENDER'] === 'TimerEvent') {
	IPS_LogMessage('Timer-Test', '----------------------');
}

Bei folgendem Ablauf:
> Skript manuell ausführen
> 8 Sekunden warten
> Skript manuell ausführen
…dauert es ab der ersten Skript-Ausführung 18 Sekunden, und der zweiten Skript-Ausführung 10 Sekunden, bis im Meldungen-Fenster die Ausgabe erscheint.

Und auch das Timer stoppen mit „IPS_SetScriptTimer($_IPS[‚SELF‘], 0);“ stört nicht. Auch hier sind es immer 10 Sekunden ab der letzten Skript-Ausführung.

Man lernt nie aus, kannte das auch nur mit dem bestimmten Zeitpunkt in der Zukunft setzen :smiley:
…vlt. gab es da auch mal einen Bug?!

Viele Grüße,
Chris

Hallo,
Danke für eure Hilfe. Es ist richtig, dass man mit dem Befehl

IPS_SetScriptTimer($scriptId, 600);

die Laufzeit des ScriptTimers neu setzen kann. Es funktioniert.
Ich hatte einen Fehler in meinem Skript, welcher dazu führte, dass die Zeit nicht richtig gesetzt wurde.

Alexander