Frage zu ScriptTimer

Hallo zusammen,

bei mir gibt es ein Script „Gute Nacht“. Dieses schaltet in allen Räumen != Schlafzimmer die Lichter aus und wird beim ins Bett gehen ausgeführt. Das heißt, ich habe mittels Abfrage von $IPS_SENDER herausgefunden, ob das Script per Fernbedienung oder per TimerEvent gestartet wurde und dann entsprechend beim ersten Durchgang einen ScriptTimer gesetzt, welcher beim zweiten Durchgang die Lampe ausgeschaltet hat und den ScriptTimer auf 0 gesetzt hat.

Nun sollen 2 Lampen eingeschaltet bleiben. Eine soll nach 3 Minuten ausgehen, die andere nach 10 Minuten.

Ich könnte das Script so lassen und beim zweiten Durchgang zweiten Durchgang, also nach 3 Minuten, den Timer noch mal setzen und ihn auf 10 Minuten stellen. Aber wie unterscheide ich dann im Script, welcher Timer derjenige war, der ausgelöst hat und entsprechend die eine oder die andere Lampe auszuschalten?

Wäre für kurze Hilfe dankbar!

Gruß,
Christoph

Mach´s über eine kleine Zwischenvariable, die die einzelnen Schritte unterscheidet. Dann läuft alles über den selben Timer. So mach ich auch manche Sachen.

Hier hast du ein Beispiel für ein schrittweises Abarbeiten von Befehlen. Im Array könnten genau so gut Id’s stehen, die du schalten möchtest und die gewünschten Schaltzustände. Nur so als Anregung.

klick mich

mfg
Smudo

Du kannst auch mit IPS_GetScriptTimer() den aktuell eingestellten Zeitwert abfragen und ihn dann als Grundlage deiner IF-Abfragen verwenden. Das geht natürlich nur dann, wenn du immer unterschiedliche Timer-Zeiten hast.

Ich hab momentan leider kein IPS zur Hand, sonst würde ich dir schnell ein Beispiel-Script posten. Kann das aber im laufe des Wochenendes machen … :wink:

… so, wie versprochen, hier ein Beispiel:

 if($IPS_SENDER == "TimerEvent")
 {
    if(IPS_GetScriptTimer($IPS_SELF) == 5)
    {
   //Befehle (letzter Durchlauf), nach 75 Sekunden (weitere 5 Sekunden)
   IPS_SetScriptTimer($IPS_SELF,0);
  }
  elseif(IPS_GetScriptTimer($IPS_SELF) == 10)
  {
   //Befehle (3. Durchlauf), nach 70 Sekunden (weitere 10 Sekunden)
   IPS_SetScriptTimer($IPS_SELF,5);
  }
  else
  {
   //Befehle (2. Durchlauf), nach 60 Sekunden
   IPS_SetScriptTimer($IPS_SELF,10);
  }
 }
 else
 {
  //Befehle, die DIREKT nach Aufruf ausgeführt werden sollen (unmittelbar)
  IPS_SetScriptTimer($IPS_SELF,60);
 }

Hallo zusammen,

vielen Dank für Eure Hilfe! Ich habe es jetzt mit einer Integer Variable „Zähler“ gelöst, welche entsprechend bei jedem Scriptaufruf hochgezählt wird und beim letzten Aufruf wieder auf 0 gesetzt wird. Das hat für mich den Vorteil, dass ich die Zeiten der ScriptTimer im nächsten Schritt per Webfront konfigurierbar machen kann.

Wünsche ein schönes Wochenende!

Gruß,
Christoph