IPS_SetEventCyclic Verständnisfrage

Hallo zusammen,

ich möchte, das mein Skript je nach Zustand xy einen Timer erstellt, welcher das Skript dann automatisch in 15Minuten wieder abfragt. Ich kriege das auch Programmiert, ABER, das neue Event startet nicht in 15 Minuten sondern einer „willkürlichen Restzeit“, erst wenn diese abgelaufen ist und die Voraussetzungen entsprechend sind, startet das nächste Event in „echten“ 15 Minuten.


$Fertig = GetValueBoolean(24466 /*\Tr fertig]*/);

if (($Tr == false) && ($Fertig == false))
	{
	SetValueBoolean(24466, true);

	$eid = IPS_CreateEvent(1);
	IPS_SetEventCyclic($eid, 0, 0, 0, 2, 2 ,15);
	IPS_SetParent($eid, $_IPS['SELF']);
	IPS_SetEventActive($eid, true);
	SetValueInteger(36336, $eid);
	}

elseif (($IPS_EVENT == '18605') && ($Fertig == true))
	{
   if (IPS_EventExists($EreignisID))
   {
	IPS_DeleteEvent($EreignisID);
	}
	$eid = IPS_CreateEvent(1);
	IPS_SetEventCyclic($eid, 0, 0, 0, 2, 2 ,15);
	IPS_SetParent($eid, $_IPS['SELF']);
	IPS_SetEventActive($eid, true);
	SetValueInteger(36336, $eid);
	}

elseif(($IPS_EVENT == $EreignisID) && ($Tr == false) && ($Fertig == true))
	{
	IPS_DeleteEvent($EreignisID);
	$Event = 'Tr ist fertig!!!';
	$text = 'xy';
	}

Auf gut deutsch: Wenn Tr das erste mal ‚false‘ ist, setzt es den „Merker“ $Fertig auf true. Danach soll 15 Minuten lang Tr == false und $Fertig == true.

IPS_SetScriptTimer ist die beste Abkürzung :smiley:

Ansonsten kannst du dir mal IPS_SetEventCyclicTimeBounds anschauen… Aber ne, SetScriptTimer ist wirklich einfach einfacher :wink:

paresy

Hast du dir schon

IPS_SetScriptTimer($_IPS['SELF'], 15*60);

oder http://www.ip-symcon.de/service/dokumentation/vorgehensweisen/wie-kann-ich/ angesehen?

Das ist glaube ich das, was du suchst.

gruß

Burkhard

Hallo und sorry, das ich mich erst jetzt melde.

Ich habe mich mal mit IPS_SetScriptTimer beschäftigt.
Soweit so gut:

Wenn folgendes Skript ausgelöst wird, wird zwar der alte Timer gelöscht und ein neuer erzeugt, dieser funktioniert aber nicht (er ist zwar aktiv, steht auch auf dem richtigen Tag und richtiger Uhrzeit aber nix da.
Im Skript steht rechts bei Skriptereignisse:
Next: -1941417:-43:-02 <== diese „Zahl“ wird sekündlich dekrementiert.)



$EreignisID = GetValueInteger(50347 /*[Merker\Allgemein\Time_ID]*/);
$Ort = GetValueBoolean(48136 /*[Geräte\Sensoren\Türschalter\STATE]*/);
$Tag = GetValueInteger(59379 /*[Merker\Allgemein\Abholtag]*/);
$Feiertag = GetValueInteger(51132 /*[Merker\Allgemein\Feiertag]*/);

	elseif (($IPS_EVENT == "20239") && ($Feiertag == 0) && ($Ort == true) && ($Tag > 30)) // "Taster lang betätigt" 
	{
	$Feiertag = $Feiertag + 1;
	IPS_DeleteEvent($EreignisID);
	$eid = IPS_CreateEvent(1);
	IPS_SetEventCyclic($eid, 3, 0, 8, 0, 0 ,0);
	IPS_SetEventCyclicTimeBounds($eid, mktime(17, 45, 0), 0);
	IPS_SetParent($eid, $_IPS['SELF']);
	HM_WriteValueBoolean(50993 /*[Geräte\Aktoren\Leistung\Akt_Garage_K2]*/, "STATE", false);
	SetValueInteger(50347 /*[Merker\Allgemein\Time_ID]*/, $eid);
	SetValueInteger(51132 /*[Merker\Allgemein\Feiertag]*/, $Feiertag);
	SetValueInteger(59379 /*[Merker\Allgemein\Abholtag]*/, 8);
	IPS_SetEventActive($eid, true);
	}