Probleme mit IPS_SetEventLimit

Hallo allerseits…

Entweder verstehe ich etwas falsch, oder IPS_SetEventLimit funktioniert nicht wirklich?!

Beispiel-Script zum Nachstellen:

<?
$Sekunden = 10;
$Name = "Wohnzimmer_Stehlampe_vorne";

$time = time();
$eventtime = time() + $Sekunden;

$eid = @IPS_GetEventIDByName("Wohnzimmer_Stehlampe_vorne", $_IPS['SELF']);
if (is_numeric($eid) == false) {
	$eid = IPS_CreateEvent(1);
	IPS_SetName($eid, $Name);
}
IPS_SetParent($eid, $_IPS['SELF']);
//IPS_SetEventCyclic($eid, 0, 0, 0, 0, 1 ,$Sekunden);  // Variante 1
IPS_SetEventCyclicTimeBounds($eid, $eventtime, 0);     // Variante 2
IPS_SetEventLimit($eid, 1);
IPS_SetEventActive($eid, true);

?>

Dieses Skript legt einen Timer an (funktioniert) und dieser sollte nur einmal ausgeführt werden (funktioniert nicht).

Ändert man IPS_SetEventLimit auf 0 oder 2 oder eine höhere Zahl, dann läuft der Timer unendlich. Aber nichts mit nur 1x oder 2x. Im Script unter Ereignisse steht zwar die korrekte Zeit zum Ausführen, auch steht der Timer auf AKTIV, aber bei der nächsten Ausführung steht „Nie“.

Ist das bei euch auch so? Oder verstehe ich da was falsch?

Eigentlich will ich, dass das Skript einen Timer anlegt (wenn noch nicht vorhanden) und diesen Timer einmal ausführt. Wenn man das Skript erneut ausführt, dann soll der Timer erneut einmal aktiviert werden und das Skript einmal starten.

Ja, ich könnte im Skript den Timer (nach Aufruf durch den Timer) wieder auf inaktiv setzen, aber das hier ist nur ein SEHR kleiner Teil, von dem was ich da drum herum gebaut habe und ich muss es so lösen.

Grüße,
Chris

Ich kann Dir bestätigen, dass Dein Script bei mir das gleiche macht, wie bei Dir. Nur helfen kann ich leider nicht.

Warum sagt mir keiner, dass ich Mist gebaut hab? :smiley: Also halb…
IPS_SetEventLimit funktioniert „speziell“, sieht trotzdem nach einem Bug aus.

Aber es funktioniert, auch wenn nicht wie es in der Befehlsreferenz beschrieben ist und wie man es denken würde :smiley:

Dieses Beispiel-Skript wird einmal von Hand gestartet, dabei wird der Timer angelegt mit IPS_SetEventLimit auf 2!!! Dann wird das Skript einmal durch das Event aufgerufen und dann das Event deaktiviert:

<?
if ($_IPS['SENDER'] != 'TimerEvent') {
	$Sekunden = 10;
	$Name = "Wohnzimmer_Stehlampe_vorne";
    $eventtime = time() + $Sekunden;

	$eid = @IPS_GetEventIDByName("Wohnzimmer_Stehlampe_vorne", $_IPS['SELF']);
	if (is_numeric($eid) == false) {
		$eid = IPS_CreateEvent(1);
		IPS_SetName($eid, $Name);
	}
	IPS_SetParent($eid, $_IPS['SELF']);
	IPS_SetEventCyclic($eid, 0, 0, 0, 0, 1 ,$Sekunden);  // funktioniert mit Limit, aber immer 1x weniger als angegeben
	//IPS_SetEventCyclicTimeBounds($eid, $eventtime, 0);  // funktioniert mit Limit, aber immer 1x weniger als angegeben
	IPS_SetEventLimit($eid, 2);  // Event wird 1x aufgerufen und dann deaktiviert
	IPS_SetEventActive($eid, true);
}
?>

Weitere Tests haben ergeben:

IPS_SetEventLimit($eventID, 0); // Event wird unendlich oft aufgerufen
IPS_SetEventLimit($eventID, 1); // Event wird nie aufgerufen
IPS_SetEventLimit($eventID, 2); // Event wird 1x aufgerufen
IPS_SetEventLimit($eventID, 3); // Event wird 2x aufgerufen
IPS_SetEventLimit($eventID, 4); // Event wird 3x aufgerufen
usw. usw. usw.

Also mein Problem ist gelöst, aber vlt. kann paresy noch etwas dazu sagen, ob IPS_SetEventLimit wirklich so funktionieren soll. Denn in der Doku steht es anders >> IPS_SetEventLimit — IP-Symcon :: Automatisierungssoftware
…oder, ob ich einfach was falsch mache oder falsch denke :slight_smile:

EDIT: Was ebenfalls noch seltsam/unschön ist. Wenn man IPS_SetEventLimit verwendet, dann sieht man zwar im Skript unter „Ereignisse“ bei „Ausführung“ ein „Nie“ (wenn Limit erreicht ist), aber das Event hat nach wie vor einen Haken bei „Ereignis aktiv?“. Wäre es da nicht besser/schöner, wenn man das Event nicht nur auf „Nie“ setzen würde, sondern so richtig auf „inaktiv“ und damit ausgrauen?! So funktioniert es zwar wie von mir beschrieben, aber es ist doch etwas verwirrend, denn in der Baumansicht und beim Klicken auf das Event, könnte man meinen, dass das Event noch aktiv ist, obwohl es das eigentlich gar nicht mehr ist…

MfG,
Chris

Tatsache. Bugfix kommt in einem der nächsten Updates :slight_smile:

paresy

Ein Glück, ich bin nicht total doof :smiley: :cool:

Baust du in dem Fix/Update dann bitte nicht nur die richtige Anzahl ein, sondern auch, wenn das Limit erreicht ist, dass das Event ausgegraut wird?! Das wäre echt super, weil irritiert schon arg…

Danke und Grüße,
Chris

Ja, das gehörte für mich gleich mit zum Fehler :smiley:

paresy

Hatte das auch eher als Fehler eingestuft, aber man weiß ja nie, was sich jemand dabei vlt. gedacht hat :smiley:

Dann muss ich nur dran denken, wenn ich IPS aktualisiere, dass ich dann IPS_SetEventLimit ändere in meiner function, sonst gibts hier eine Light-Show :smiley: Aber du schreibst das ja bestimmt ins Changelog :cool:

MfG,
Chris