Ausführung eine Zeit lang verhindern

Hallo

Ich habe mit einen Script zusammengebastelt, welcher die erneute Ausführung zwei Stunden lang verhindern soll.

<?

$Array = IPS_GetScript($_IPS['SELF']);

$Zeitstempel = time()-$Array['ScriptExecuted'];

$Pause = 7200; // "Auszeit" in Sekunden

if ($Zeitstempel > $Pause) {

      $Helligkeit = GetValue(55784);

      if($Helligkeit>=20000)

      {

        IPS_RunScript(57996);

        IPS_RunScript(29426);

      }

}

?>

Das tut es eigentlich auch, jedoch nicht wie ich mir das vorstelle.
Ich möchte nicht, dass das Script nach jedem Aufruf für zwei Stunden lang blockiert wird, sondern nur dann, wenn die Bedingungen (bei mir Lichtsensor >20000Lux) erfüllt gewesen ist und die Ansteuerung tatsächlich stattgefunden hat.

Kann mir jemand einen Tip eben, wie ich die Verzögerung richtig einordne?

Vielen Dank
Stefan

Merk dir die Zeit in einer Variable wann das Skript ausgeführt wurde und vergleiche das im Skript mit der aktuellen Zeit. Ist die Differenz kleiner als 2 Stunden mache nichts, anderenfalls mach was du machen willst.
Wobei ich sehe das machst du schon. Ein Weg könnte noch sein, dir den Zeitpunkt der Erfüllung der Bedingung (Licht>20000) und ob ausgelöst wurde oder nicht. Andererseits musst du dann aber sicherstellen, dass der Status der Ausführung wieder zurückgesetzt wird.

Morgen Stefan,

also ich würde das mit einer Hilfsvariablen lösen. Einfach in die If eine Variable (Letzte Ausführung) setzen und diesen Zeitstempel in das Script einbauen.

lg
hagi

Wenn die Scripte 57996 und 29426 nur aus diesem Skript heraus gestartet werden, könntest Du auch hier noch mal abfragen, wann sie das letzte Mal gestartet worden sind.

Alternativ den Ausführungszeitpunkt in eine Variable schreiben.

Oder bei Auslösung das Event deaktivieren, welches das o.g. Skript startet und gleichzeitig einen Timer vom 2 STunden auf ein Skript setzen, welches dieses wieder aktiviert.

Es gibt viele Möglichkeiten.

Danke für die vielen Inputs.
Zur Info: Bei dem Script geht es um die Ansteuerung der Sonnenrollos bei grosser Helligkeit.

Ich konnte es, wie mehrfach vorgeschlagen, mit einer Variablen lösen.
Hier der Script, vielleicht hilft der mal jemandem weiter…

<?

$Array = IPS_GetScript($_IPS['SELF']);
$Zeitstempel = getvalue(57155); //ID der Variable für die Zeit und das Datum
$time = date("ymdHis");  //aktuelle Zeit und das Datum
$Pause = 7200; // "Sperrzeit" in Sekunden

if ($time > ($Zeitstempel + $Pause)) 
      {
        IPS_RunScript(57996);
        IPS_RunScript(29426);

        $id_current_time = 57155; //ID der Variable für die Zeit und das Datum
        SetValue($id_current_time, date("ymdHis"));
}

?>

Die Bedingung mit der Helligkeit von 20000Lux habe ich rausgenommen und zusammen mit dem Script und einer weiteren Bedingung (Schalter Schiebetür geschlossen) in einen Ablaufplan integriert.

So wird effektiv, und nur nach vormalig erfolgreicher Ausführung, zwei Stunden keine Ansteuerung mehr durchgeführt.
Hintergrund ist, dass sonst die Rollos immer nach Unter- und dann wieder überschreiten der definierten Helligkeit einen Tanz vollführen, da diese sich die gespeicherte Position leider nicht merken können.

Viele Grüsse
Stefan