[Timer] Präsenz

Das folgende IPSmagic-Skript - versteht nicht jeder, aber jeder kann es anwenden :rolleyes:
setzt die Variable „Präsenz“ für 5 (änderbar) Minuten auf „TRUE“.
Der Timer (function CreateEventIDByName) und die Variable (function CreateVariableByName) werden vom Skript automatisch angelegt.
Getriggert wird es „Bei Variablenaktualisierung“ einer Status-Variablen z.B. von einem Bewegungsmelders / PIRI.
Wird vor Ablauf der 5 Minuten ein neuer „TRUR-Impuls“ vom PIRI gemeldet, wird der TIMER erneut auf 5 Minuten gesetzt.
Also wie eine „Eieruhr“, die man immer wieder aufzieht.
Nach Ablauf der Zeit, kann z.B. die Heizung um 2 Grad abgesenkt werden oder das Licht, Monitor, Lötstation usw. ausgeschaltet werden …

MST

  • Skript entfernt, da für die V2.1 nicht mehr anwendbar

bewegung_ani.gif

Dieser Teil des Präsenz Scriptes:

if($IPS_VALUE == True) { //Timer starten
$eid = CreateEventIDByName($vid, "Timer für Variable: ".$IPS_VARIABLE, 1);
IPS_SetEventCyclic($eid, 0, 0, 0, 1, 5*60); // alle 5 Minuten
IPS_SetEventCyclicTimeBounds($eid, time(), 0);
IPS_SetEventActive($eid, true);
if(!GetValue($vid)) {
SetValue($vid, true);

Gibt bei mir folgende Fehlermeldung bei 4 Anwesenheitsscripten die ich in bestimmten Bereichen meines Hauses nach diesem Script mit copy / paste angelegt habe:

Warning: Wrong parameter count for ips_seteventcyclic () in line 21

Ich habe dieses Script von Dir ohne jegliche Modifikation übernommen und triggere es je mit einem PIRI und dessen Statusvariable.

Die Variable „Präsenz“ wurde mit einem zugehörigen Timerevent mit Daily after 0 Seconds unterhalb der triggernden Statusvariablen der 4 Piri automatisch angelegt.
Die Variable springt auch einmalig auf „TRUE“ bei PIRI Auslösung, fällt dann aber nicht mehr automatisch auf „False“ nach der gewünschten Triggerzeit zurück.

Das erstellte Timerevent bleibt auf 00:00:00 stehen und das Script wird jede Minute scheinbar ausgeführt, da der Fehler in der Messageview alle 60 Sekunden wiederkommt. Diese Fehlermeldung kommt aber nur dann, wenn ein PIRI wieder ausgelöst.

Wo ist mein Fehler…?
Ich kann doch nicht zu blöd für copy / paste und einbindung einer Variablen sein.

Gruss
B71

Hier die Lösung:

Es fehlt einfach seit der Version ein Parameter. Für hinter die 0, 0, 0 einfach noch ein , 0 ein. Dann wird es wieder gehen :slight_smile:

paresy

Danke…

habe jetzt echt an meinem Geist gezweifelt.
Läuft jetzt wie beschrieben… mann o mann… 3 Stunden Suche überall, inkl. Doku… :slight_smile:
Wieder vieles gelesen und gelernt…aber die Lösung hierfür hätte ich im Leben nicht gefunden…

Liebe Grüsse
B71

Ich muss hier auch nochmal nachhaken:
ich trigger auf die StatusVariable eines PIRI. Beim ersten Durchlauf läuft auch alles, aber danach wird nichts mehr geschaltet, da die StatusVariable des PIRI nicht auf False zurückgesetzt wird.
Die Funktion „SetStatusVariableValue“ funktioniert leider auch nicht, obwohl sie eine „1“ zurück gibt.

Jemand ne Idee? :confused:

… danach wird nichts mehr geschaltet, da die StatusVariable des PIRI nicht auf False zurückgesetzt wird

Bitte genau lesen: Getriggert wird es „Bei Variablenaktualisierung

MST

Grmbl… Danke, hatte Änderung drin. :slight_smile:

Hallo Gemeinde,

ich habe gerade einen stundenlangen „Conference Call“ Themen eher langweilig - deshalb mal wieder eine gelegenheit im Form zu schnüffeln.

zum Thema Präsenz:
Ich habe mich zwar noch nicht durch das script gearbeitet - aber habe in der Vergangenheit was ähnliches ‚zusammengeworfen‘.

Dabei war mir es wichtig, dass ein kurzes betreten des Raumes die Präsenz noch nicht triggert - sondern erst nach x-Minuten Anwesenheit. Aktuell notwendig ist das bei meinem Labor zu Hause - ich gehe oft kurz hinein um was zu holen - verlasse den Raum aber nach ca. 1 - 3 Minuten wieder und dazu muss die Temperatur nicht angehoben werden. Übersteigt die Anwesenheit 3 Minuten, wird die Zimmersolltemperatur für X Minuten um Y-Grad angehoben und gehalten, solange jemand im Raum ist.
Vielleicht lässt sich sowas noch in dem gezeigen Script ergänzen :cool:

Was haltet Ihr davon?

Gruss babba

Hallo
Ich habe versucht das Script mit einem Piri Bewegungsmelder zu steuern.
Da ich den Bewegungsmelder im Flur habe, soll er dies nur tun, wenn es draußen dunkel ist.

Habe also das Skript mit einem Befehl erweitert, das er zusätzlich den Status von meinem SunsetScript abholen soll und erst wenn SunriseSunset\DAYLIGHT == False ist, das Licht geschalten werden soll, ansonsten soll er nichts machen.
Ganz am anfag des Themas steht ja das das Skipt „Bei Variabelaktualisierung“ getriggert werden soll.
Im Script selbst steht allerdings // Trigger: „Bei Variablenänderung“ > PIRI_Status
Liegt es daran?
Oder habe ich jetzt irgendwas nicht verstanden.

Hier mal das Script „Präsenz“

<?
//Beschreibung unter (http://www.ip-symcon.de/forum/f53/timer-praesenz-5431/)
// (c) by IP-Symcon 2008
// lauffähig ab Version 2.0
// Trigger: "Bei Variablenänderung" > PIRI_Status



if($IPS_SENDER == "Execute")
{
   echo "Diese Skript kann so nicht ausgeführt werden.
";
   echo "Bitte triggern sie das Skript über eine Boolean Variable";
}

if($IPS_SENDER == "Variable")
{
   if(!is_bool($IPS_VALUE))
   {
      die("Skript kann nur über Boolean Variablen verarbeiten!");
   }
   $vid = CreateVariableByName($IPS_VARIABLE, "Präsenz", 0);
	$Tageslicht = 43584 /*[SunriseSunset\DAYLIGHT]*/;
   if(($IPS_VALUE == True) && ($Tageslicht == False))  {  //Timer starten
      $eid = CreateEventIDByName($vid, "Timer für Variable: ".$IPS_VARIABLE, 1);
      IPS_SetEventCyclic($eid, 0, 0, 0, 0, 1, 2*60); // alle 5 Minuten
      IPS_SetEventCyclicTimeBounds($eid, time(), 0);
      IPS_SetEventActive($eid, true);
      if(!GetValue($vid)) {
         SetValue($vid, true);
      }

 // weitere Befehle beim Erkennen einer Bewegung
 // z.B.  FS20_SwitchMode(.....

  FS20_SetIntensity(33626 /*[Alle Steckdosen und Fernbedienungen\Flur Stehlampe]*/, 16, 2);
  FS20_SetIntensity(20066 /*[Alle Steckdosen und Fernbedienungen\Flur Treppe]*/, 16, 2);
  }
}

if($IPS_SENDER == "TimerEvent"){  //Timer ausschalten
   IPS_SetEventActive($IPS_EVENT, false);

   //Übergeornete Variable herausfinden
   $event = IPS_GetObject($IPS_EVENT);

   //Variable setzen
   SetValue($event['ParentID'], false);

 // weitere Befehle nach Ablauf des Zeit
 // z.B.  FS20_SwitchMode(.....
//IPS_RunScript("48318");


  FS20_SetIntensity(33626 /*[Alle Steckdosen und Fernbedienungen\Flur Stehlampe]*/, 8, 30);
  FS20_SetIntensity(20066 /*[Alle Steckdosen und Fernbedienungen\Flur Treppe]*/, 16, 30);

}

function CreateVariableByName($id, $name, $type)
{
   global $IPS_SELF;
   $vid = @IPS_GetVariableIDByName($name, $id);
   if($vid===false) {
      $vid = IPS_CreateVariable($type);
      IPS_SetParent($vid, $id);
      IPS_SetName($vid, $name);
      IPS_SetInfo($vid, "This Variable was created by Script #$IPS_SELF");
   }
   return $vid;
}

function CreateEventIDByName($id, $name, $type)
{
   global $IPS_SELF;
   $eid = @IPS_GetEventIDByName($name, $id);
   if($eid===false) {
      $eid = IPS_CreateEvent($type);
      IPS_SetEventScript($eid, $IPS_SELF);
      IPS_SetParent($eid, $id);
      IPS_SetName($eid, $name);
      IPS_SetInfo($eid, "This Event was created by Script #$IPS_SELF");
   }
   return $eid;
}

?>

Wenn ich nun also
$Tageslicht = False benutze, schaltet er nicht obwohl Daylight = False.
Schreibe ich aber:
$Tageslicht = True schaltet er wie er soll, allerdings auch wenn Daylight = False ist.
Hier nochmal das Skript SUNRISE_SUNSET

   <?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : SUNRISE_SUNSET.ips.php
Trigger  :
Interval : 60 Sekunden
*/

/*
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

switch ($IPS_SENDER)
{
case "Execute": // ************** Initialisierung *****************************
$CatID = IPS_CreateCategory();         // Kategorie anlegen
IPS_SetName($CatID, "SunriseSunset");  // Kategorie benennen


$VarID = IPS_CreateVariable(1); IPS_SetName($VarID, "SUNRISE_OFFSET"); IPS_SetParent($VarID, $CatID);
$VarID = IPS_CreateVariable(1); IPS_SetName($VarID, "SUNSET_OFFSET");  IPS_SetParent($VarID, $CatID);
$VarID = IPS_CreateVariable(3); IPS_SetName($VarID, "SUNRISE");        IPS_SetParent($VarID, $CatID);
$VarID = IPS_CreateVariable(3); IPS_SetName($VarID, "SUNSET");         IPS_SetParent($VarID, $CatID);
$VarID = IPS_CreateVariable(0); IPS_SetName($VarID, "DAYLIGHT");       IPS_SetParent($VarID, $CatID);
$VarID = IPS_CreateVariable(3); IPS_SetName($VarID, "TIME");           IPS_SetParent($VarID, $CatID);
$VarID = IPS_CreateVariable(3); IPS_SetName($VarID, "WEEKDAY");        IPS_SetParent($VarID, $CatID);
$VarID = IPS_CreateVariable(1); IPS_SetName($VarID, "DAY");            IPS_SetParent($VarID, $CatID);
$VarID = IPS_CreateVariable(3); IPS_SetName($VarID, "MONTH");          IPS_SetParent($VarID, $CatID);
$VarID = IPS_CreateVariable(1); IPS_SetName($VarID, "YEAR");           IPS_SetParent($VarID, $CatID);
$VarID = IPS_CreateVariable(3); IPS_SetName($VarID, "TIME_STRING");    IPS_SetParent($VarID, $CatID);

break;
}
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
*/

// Sonnenauf Sonnenuntergang berechnen
// Getriggert wird alle 60 sek.

$latitude = 53.33;
$longitude = 9.59;

$day_offset = (GetValue(13019 /*[SunriseSunset\SUNRISE_OFFSET]*/ )+(date("I")*60))/60+1;
$night_offset = (GetValue(51121 /*[SunriseSunset\SUNSET_OFFSET]*/ )+(date("I")*60))/60+1;

$var_sunrise = date(date_sunrise(time(), SUNFUNCS_RET_STRING, $latitude, $longitude, 90, $day_offset));
$var_sunset = date(date_sunset(time(), SUNFUNCS_RET_STRING, $latitude, $longitude, 90, $night_offset));

$VarID = IPS_GetVariableID("SUNRISE");
SetValue($VarID, $var_sunrise);
$VarID = IPS_GetVariableID("SUNSET");
SetValue($VarID, $var_sunset);

//DAYLIGHT festlegen
if (date("H:i") == $var_sunrise) {
   SetValue(43584 /*[SunriseSunset\DAYLIGHT]*/ , true);
   }
if (date("H:i") == $var_sunset) {
   SetValue(43584 /*[SunriseSunset\DAYLIGHT]*/ , false);
   }

//Zeit ausgeben
SetValue(14498 /*[SunriseSunset\TIME]*/ , date("H:i"));

// Wochentag in deutsch ausgeben
$Tag = Date("w");
$Tag1 = array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
//$Tag1 = array("So","Mo","Di","Mi","Do","Fr","Sa");
SetValue(48630 /*[SunriseSunset\WEEKDAY]*/ , $Tag1[$Tag]);

// Tag
SetValue(31930 /*[SunriseSunset\DAY]*/ , (INT)date("j"));

//Monat in deutsch ausgeben
$Monat = Date("n");
$Monat1 = array("","Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
SetValue(31336 /*[SunriseSunset\MONTH]*/ , $Monat1[$Monat]);

//Jahr ausgeben
SetValue(54070 /*[SunriseSunset\YEAR]*/ , (INT)date("Y"));

//Timestring schreiben
//SetValue(19224 /*[SunriseSunset\Latitudet]*/ ,$Tag1[$Tag]." ".date("j").".".$Monat1[$Monat]." ".date("Y")."  ".date("H:i"));
SetValue(50565 /*[SunriseSunset\TIME_STRING]*/ ,date("j").".".$Monat1[$Monat]." ".date("Y"));

SetValue(19224 /*[SunriseSunset\Latitudet]*/ , $latitude);
SetValue(21312 /*[SunriseSunset\Longitude]*/ , $longitude);
?>

Kann mir einer erkären wieso er (egal ob Daylight = True oder False)
bei eigabe von $Tageslicht == True immer schaltet (egal ob Tag oder Nacht und bei der Eigabe von
$Tageslicht == False NIE schaltet (auch hier egal ob Tag oder Nacht Also Daylight == False oder True ist)

Hoffe ich habe es nicht zu kompliziert geschrieben, weiss aber nicht wie ich es anders formulieren soll.

Danke im vorraus


   $Tageslicht = 43584 /*[SunriseSunset\DAYLIGHT]*/;
   if(($IPS_VALUE == True) && ($Tageslicht == False))  {  //Timer starten 

Da fehlt wohl noch ein getvalue…

Das könnte natürlich sein Peinlich
Danke dir.

Ich glaube jetzt fun ktioniert es.
Habe aber nochmal eine frage wie ihr folgendes realisiert.

Ich habe den Bewegungsmelder wie schon gesagt im Flur an der Haustür stehen.
Dieser sollte jetzt nur angehen wenn es dunkel wird (Sinrise/Sunset) ansonsten soll er gar nichts tun.

Nun haben wir allerdings das Problem, das wenn wir z.B. abends nochmal weg wollen (Also am Bewegungsmelder vorbei gehen) schaltet dieser das Licht ja wieder ein und nicht wieder aus.
Also schreibe ich das Script um und sage ihm, das er nach 2 Min. wieder ausschalten soll.

Nun eine andere Situation:
Wenn wir Abends ganz normal zuhause sind ist auch im Flur das Licht immer zu 50 % an ist. Das ist ja auch so gewollt.

Wenn ich mir aber nun vorstelle, das es an der Tür klingelt und ich am Bewegungsmelder vorbei gehe um an die Tür zu kommen, schaltet er das Licht wieder auf 100% ein.
DANN ABER nach 2 Min. ganz aus.
Das möchte ich ja nicht, wenn ich ganz normal zu hause bin.

Weiss zwar auch nicht wie ich dem Bewegungsmelder sagen soll:
Wir gehen jetzt weg. Kannst gleich wieder aus gehen,

oder:

Schalte gleich wieder auf normalen Betrieb um, es war nur jemand an der Tür und wir sind zuhause!

Habt ihr einen Vorschlag, wie ich beide Situationen nutzen kann?
Oder habt ihr vielleicht ein fertiges Script für solch eine Situation?
Hier nochmal das Skipt, welches ich einsetzte:

<?
//Beschreibung unter (http://www.ip-symcon.de/forum/f53/timer-praesenz-5431/)
// (c) by IP-Symcon 2008
// lauffähig ab Version 2.0
// Trigger: "Bei Variablenaktualisierung" > PIRI_Status

$Tageslicht = 43584 /*[SunriseSunset\DAYLIGHT]*/;
GetValueBoolean(43584 /*[SunriseSunset\DAYLIGHT]*/);

if($IPS_SENDER == "Execute")
{
   echo "Dieses Skript kann so nicht ausgeführt werden.
";
   echo "Bitte triggern sie das Skript über eine Boolean Variable";
}

if(($IPS_SENDER == "Variable") && (GetValueBoolean("$Tageslicht") == False))
{
   if(!is_bool($IPS_VALUE))
   {
      die("Skript kann nur über Boolean Variablen verarbeiten!");
   }
   $vid = CreateVariableByName($IPS_VARIABLE, "Präsenz", 0);
   if($IPS_VALUE == True) {  //Timer starten
      $eid = CreateEventIDByName($vid, "Timer für Variable: ".$IPS_VARIABLE, 1);
      IPS_SetEventCyclic($eid, 0, 0, 0, 0, 1, 2*60); // alle 2 Minuten
      IPS_SetEventCyclicTimeBounds($eid, time(), 0);
      IPS_SetEventActive($eid, true);
      if(!GetValue($vid)) {
         SetValue($vid, true);
      }

 // weitere Befehle beim Erkennen einer Bewegung
 // z.B.  FS20_SwitchMode(.....

  FS20_SetIntensity(33626 /*[Alle Steckdosen und Fernbedienungen\Flur Stehlampe]*/, 16, 2);
  FS20_SetIntensity(20066 /*[Alle Steckdosen und Fernbedienungen\Flur Treppe]*/, 16, 2);
  }
}

if($IPS_SENDER == "TimerEvent"){  //Timer ausschalten
   IPS_SetEventActive($IPS_EVENT, false);

   //Übergeornete Variable herausfinden
   $event = IPS_GetObject($IPS_EVENT);

   //Variable setzen
   SetValue($event['ParentID'], false);

 // weitere Befehle nach Ablauf des Zeit
 // z.B.  FS20_SwitchMode(.....
 //IPS_RunScript("48318");
 //  FS20_SetIntensity(33626 /*[Alle Steckdosen und Fernbedienungen\Flur Stehlampe]*/, 8, 30);
 //  FS20_SetIntensity(20066 /*[Alle Steckdosen und Fernbedienungen\Flur Treppe]*/, 16, 30);
}

function CreateVariableByName($id, $name, $type)
{
   global $IPS_SELF;
   $vid = @IPS_GetVariableIDByName($name, $id);
   if($vid===false) {
      $vid = IPS_CreateVariable($type);
      IPS_SetParent($vid, $id);
      IPS_SetName($vid, $name);
      IPS_SetInfo($vid, "This Variable was created by Script #$IPS_SELF");
   }
   return $vid;
}

function CreateEventIDByName($id, $name, $type)
{
   global $IPS_SELF;
   $eid = @IPS_GetEventIDByName($name, $id);
   if($eid===false) {
      $eid = IPS_CreateEvent($type);
      IPS_SetEventScript($eid, $IPS_SELF);
      IPS_SetParent($eid, $id);
      IPS_SetName($eid, $name);
      IPS_SetInfo($eid, "This Event was created by Script #$IPS_SELF");
   }
   return $eid;
}

?>

Hat sich erledigt!
If{}else{}
Natürlich muß ich nur den Staus der Variablen abfragen um dann dem Bewegungsmelder zu sagen:
Wenn die Normale Hausbeleuchtung an ist dann schalte auf 100% nach erkennung einer Bewegung und nach der angegebenen Zeit schalte das licht wieder zurück auf den alten Wert.
Ansonsten schalte nach der angegebenen Zeit wieder aus.
Gruß
Xanon

Ich habe dieses script von Steiner auch schon eine ganze Zeit im einsatz und funzt auch super. Nach der Umstellung auf V2.1 gibt es ein Problem. Der Timer wird nicht mehr zurückgesetzt. Hat dies noch jemand und wenn ja gibt es eine Lösung?

cu uwe

Habe den gleichen Fehler unter 2.1. Habe mit Variablen überprüft: Im Script kommt nie der TimerEvent an. Also dieser Zweig wird nie durchlaufen.

Gruss
Emil

Gleiche Problem hier.
Ist mir nur bisher nicht aufgefallen, da ich bei FS20 und Homematic immer die Anschaltdauer mitsende.
Gibt es schon eine Lösung?

Hallo an alle,

ich glaube an dem Befehl:IPS_SetEventScript wurde was geändert. Deswegen habe ich mal das Script angepasst. Eine Änderung ist , das es nun „RunScript“ und nicht mehr „TimerEvent“ ist.

<?
//Beschreibung unter (http://www.ip-symcon.de/forum/f53/timer-praesenz-5431/)
// (c) by IP-Symcon 2008
// lauffähig ab Version 2.0
// angepasst für Version 2.1 oder später
// Trigger: "Bei Variablenänderung" > PIRI_Status



if($IPS_SENDER == "Execute")
{
   echo "Diese Skript kann so nicht ausgeführt werden.
";
   echo "Bitte triggern sie das Skript über eine Boolean Variable";
}

if($IPS_SENDER == "Variable")
{
   if(!is_bool($IPS_VALUE))
   {
      die("Skript kann nur über Boolean Variablen verarbeiten!");
   }
   $vid = CreateVariableByName($IPS_VARIABLE, "Präsenz", 0);

   if($IPS_VALUE == True)  {  //Timer starten
      $eid = CreateEventIDByName($vid, "Timer für Variable: ".$IPS_VARIABLE, 1);
      IPS_SetEventCyclic($eid, 0, 0, 0, 0, 1, 5*60); // alle 5 Minuten
      IPS_SetEventCyclicTimeBounds($eid, time(), 0);
      IPS_SetEventActive($eid, true);
      if(!GetValue($vid)) {
         SetValue($vid, true);
      }

 // weitere Befehle beim Erkennen einer Bewegung
 // z.B.  FS20_SwitchMode(.....

  }
}

if($IPS_SENDER == "RunScript"){  //ACHTUNG muß nun Run Script heißen!!!!

 // weitere Befehle nach Ablauf des Zeit
 // z.B.  FS20_SwitchMode(.....

}

function CreateVariableByName($id, $name, $type)
{
   global $IPS_SELF;
   $vid = @IPS_GetVariableIDByName($name, $id);
   if($vid===false) {
      $vid = IPS_CreateVariable($type);
      IPS_SetParent($vid, $id);
      IPS_SetName($vid, $name);
      IPS_SetInfo($vid, "This Variable was created by Script #$IPS_SELF");
   }
   return $vid;
}

function CreateEventIDByName($id, $name, $type)
{
   global $IPS_SELF;
   $eid = @IPS_GetEventIDByName($name, $id);
   if($eid===false) {
      $eid = IPS_CreateEvent($type);
      IPS_SetEventScript($eid, "IPS_RunScript($IPS_SELF);IPS_SetEventActive($eid, false);SetValue($id,false);");
      IPS_SetParent($eid, $id);
      IPS_SetName($eid, $name);
      IPS_SetInfo($eid, "This Event was created by Script #$IPS_SELF");
   }
   return $eid;
}
?>

Gruß

Das Skript funktioniert einfach nicht mehr unter der V2.1, da der SetEventScript Befehl dort anders funktioniert. Das kann man auch nicht einfach beheben, sondern muss das Skript komplett anders schreiben, sodass jede der Variablen ein eigenes Skript bekommt.

Ich habe das Skript im ersten Post entfernt, da es nicht mehr Sinvoll ist.

paresy

das ist aber schade, ich verwende noch die „alte“ version und wäre genau jetzt darauf angewiesen gewesen :frowning:

svrroot

Hallo an alle,

mit den von mir gemachten Änderungen ist das Script weiterhin funktionsfähig. Es müssen 3 Änderungen im Script gemacht werden.
1.diesen Orginalteil:


if($IPS_SENDER == "TimerEvent"){  //Timer ausschalten
   IPS_SetEventActive($IPS_EVENT, false);

   //Übergeornete Variable herausfinden
   $event = IPS_GetObject($IPS_EVENT);

   //Variable setzen
   SetValue($event['ParentID'], false); 

durch diese Zeile ersetzen:

if($IPS_SENDER == "RunScript"){  //ACHTUNG muß nun Run Script heißen!!!!

  1. den SetEventScript-Befehl den neuen Bedingungen anpassen.
    dazu den orginal Befehl:
      IPS_SetEventScript($eid, $IPS_SELF);

durch diesen Ausdruck ersetzen:

      IPS_SetEventScript($eid, "IPS_RunScript($IPS_SELF);IPS_SetEventActive($eid, false);SetValue($id,false);");

3.Es muß der Timer, der an der Präsenz Variablen ist, einmal gelöscht werden. Damit dieser automatisch, mit den Änderungen, neu angelegt wird.
Das komplette Script gibt es 2 Beiträge weiter „oben“.

Gruß