Timer rückstellen

Hallo,
habe dieses script für meine Flurlichtschaltung am laufen. Klappt auch super unter V2.
In der V2.1 wird der Timer nicht wieder gelöscht. Er läuft 60s und wird immer wieder gestartet, damit geht die Lampe nicht aus.
Hat jemand einen Tip.

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

 // weitere Befehle beim Erkennen einer Bewegung


  FS20_SwitchMode(61085 /*[Flur oben\Flur oben]*/, TRUE);

  }
}

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
FS20_SwitchMode(61085 /*[Flur oben\Flur oben]*/, false);

cu uwe

Irgendwie sind Dir beim Kopieren des Codes ein paar Klammern abhanden gekommen.
Ich hätte hier mal eine simplere Version für Dich anzubieten:

<?php
if ($IPS_SENDER == "TimerEvent")
{
    IPS_SetScriptTimer($IPS_SELF, 0);
    FS20_SwitchMode(61085 /*[Flur oben\Flur oben]*/, false);
}
else
{
    if ($IPS_VALUE)
    {
        IPS_SetScriptTimer($IPS_SELF, 60);
        FS20_SwitchMode(61085 /*[Flur oben\Flur oben]*/, TRUE);
    }
}
?>

In Zukunft bitte immer PHP-Tags um Code hier im Forum setzen.
[ php]CODE[/ php] (ohne Leerzeichen schreiben)

Hallo Horst,
danke für Deine Antwort, aber ich möchte das script schon behalten, es ist von Steiner. Hier nochmal das ganze script.


<?

 // (c) by IP-Symcon 2008
// lauffähig ab Version 2.0
// Trigger: "Bei Variablenänderung" > PIRI_Flur
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, "Piri_Flur", 0);

$FS20S4U_PB = GetValue(13584);
if ($FS20S4U_PB == True) return;

   if($IPS_VALUE == True)  {  //Timer starten
      $eid = CreateEventIDByName($vid, "Timer für Flur: ".$IPS_VARIABLE, 1);
      IPS_SetEventCyclic($eid, 0, 0, 0, 0, 1, 1*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

*/
  FS20_SwitchMode(61085 /*[Flur oben\Flur oben]*/, TRUE);

  }
}

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
FS20_SwitchMode(61085 /*[Flur oben\Flur oben]*/, false);

}

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;
}


?>


Wie gesagt läuft unter V2 super, unter V2.1 wird Timer nicht zurückgesetzt.
cu uwe

$FS20S4U_PB = GetValueBoolean(13584); 

Kann ich mir gar nicht vorstellen das dass unter V2 so lief.

Hallo Rainer,
ist vielleicht nicht mehr sauber, aber läuft. Ich habe wieder die V2 im Einsatz und hier läuft es super. Ich musste wieder auf V2 zurück da das DugTool bei mir unter V2.1 auch nicht funzt.

cu uwe

Die Anführungszeichen haben bei der ID nichts zusuchen, weder bei V2 noch V2.1

Hast recht ist mir noch garnicht aufgefallen. Ist auch nur eine Abfrage ob mein Flurschalter schon eingeschaltet ist. Mich wundert es nur das der Timer nicht mehr zurückgesetzt wird.

cu uwe

Naja, das wird ja auch nicht ausgewertet. Wie soll er da wissen ob er an oder aus ist. Folglich wird dein Timer immer gesetzt.

und warum klappt es in V2?

Ohne mir jetzt den ganzen Thread durchgelesen zu haben, kann es sein das es an einer geänderten Funktion liegt, da sind nämlich welche dabei:

Geänderte Funktionen

* IPS_SetEventScript (Nimmt nun den auszuführenden Text statt der ID des Skriptes)
* IPS_GetEvent (Index: TriggerVariable -&gt; TriggerVariableID)
* IPS_GetStatusVariableIDs -&gt; IPS_GetStatusVariableIdents

Hallo,
Ich bin immer noch nicht weitergekommen mit dem script unter V2.1.
Eigentlich habe ich gedacht das sich Steiner mal dazu aussert, aber leider keine Reaktion.
Haben andere dieses script so in der V2.1 am laufen ?

cu uwe