Script Timer - erster Durchlauf erst nach Timer-Wert

Hallo,
bitte um eine neuerlich Hilfestellung!

Wie unterbinde ich die Eigenschaft des Timer Event das nach dem setzen mit IPS_SetScriptTimer das Script sofort ausgeführt wird und danach die übergebene Zeit abgewartet wird?

Ähm… Woher hast du diese Eigenschaft?

poste mal dein Script, bitte.

Toni

angenommen …

Mein Script soll einfach einen Zähler erhöhen und den nächsten Schritt ausführen. Im Script unten sollte im Schritt 1 der Timer auf 20sec gesetzt werden.
Beim darauffolgenden Durchlauf ist Schritt 2 aktiv und beendet die Szene.
Nur werden die 20sec nicht abgewartet!


$count=GetValueInteger("Counter_Wecker1_Szene1");
if ($IPS_SENDER == "TimerEvent")
{
IPS_SetScriptTimer($IPS_SELF,0);
 Switch($count)
   {
      case(1): // Schritt 1
      // Nur ausführen wenn kein anderer Wecker aktiv ist und später einschaltet!
      if (($Wecker1_T2>$Wecker1_T1 and GetValueBoolean("$Wecker1_daily_aktive")) or ($Wecker2_T2>$Wecker1_T1 and GetValueBoolean("$Wecker2_daily_aktive")) or ($Wecker2_T1>$Wecker1_T1 and GetValueBoolean("$Wecker2_daily_aktive"))){
      if(GetValueBoolean("$Wecker1_SZ")){
         EIB_DriveMove(ID_Jal_SZ,true );
         }
      if(GetValueBoolean("$Wecker1_WZ")){
         EIB_DriveMove(ID_Jal_WZ,true );
         }
      }
      IPS_SetScriptTimer($IPS_SELF,20);
      SetValueInteger("Counter_Wecker1_Szene1",2); // Szenenzähler erhöhen
      break;
      
      case(2): // Schritt 2 nach 20sec
       if(GetValueBoolean("$Wecker1_SZ")){
         IPS_RunScript("Zeitansage");
         }
       if(GetValueBoolean("$Wecker1_WZ")){
          IPS_RunScript("Zeitansage");
         }
      }
      IPS_SetScriptTimer($IPS_SELF,0);
      SetValueInteger("Counter_Wecker1_Szene1",0);  //ENDE
      break;
   }

Kontrolliere deine Klammerung.

Die Klammer vor

IPS_SetScriptTimer($IPS_SELF, 0);

gehört bestimmt hinter das letzte break.

Anfänger tun sich mit dieser Art der Klammerung oft etwas schwer. Versuchs mal so:

if ($IPS_SENDER == "TimerEvent")
{
  IPS_SetScriptTimer($IPS_SELF, 0);
  Switch ($count)
  {
    case 1: // Schritt 1
      // Nur ausführen wenn kein anderer Wecker aktiv ist und später einschaltet!
      if ( ($Wecker1_T2>$Wecker1_T1 and GetValueBoolean($Wecker1_daily_aktive)) or
           ($Wecker2_T2>$Wecker1_T1 and GetValueBoolean($Wecker2_daily_aktive)) or
           ($Wecker2_T1>$Wecker1_T1 and GetValueBoolean($Wecker2_daily_aktive)) )
      {
        if (GetValueBoolean($Wecker1_SZ))
        {
           EIB_DriveMove(ID_Jal_SZ, true);
        }
        if (GetValueBoolean($Wecker1_WZ))
        {
           EIB_DriveMove(ID_Jal_WZ, true);
        }
      }
      IPS_SetScriptTimer($IPS_SELF, 20);
      SetValueInteger("Counter_Wecker1_Szene1", 2); // Szenenzähler erhöhen
    break;  // Beendet Schritt 1, steht unter Case 1

    case 2: // Schritt 2 nach 20sec
      if (GetValueBoolean($Wecker1_SZ))
      {
        IPS_RunScript("Zeitansage");
      }
      if (GetValueBoolean($Wecker1_WZ))
      {
        IPS_RunScript("Zeitansage");
      }

      IPS_SetScriptTimer($IPS_SELF, 0);
      SetValueInteger("Counter_Wecker1_Szene1", 0);  //ENDE
    break;  // Beendet Schritt 2, steht unter Case 2
  }  // Diese Klammer beendet Switch und steht direkt unter der öffnenden Klammer
}

Und einrücken nicht vergessen… :wink: Alle Klammern die zusammen gehören stehen auf diese Weise direkt untereinander. Man behält leichter den Überblick.

Wer triggert dein Script?

Edit:

Nochmal schön formatiert…

Gruß,

Toni

Danke, hattest recht mit der Klammer…