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?
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… Alle Klammern die zusammen gehören stehen auf diese Weise direkt untereinander. Man behält leichter den Überblick.
Wer triggert dein Script?
Nochmal schön formatiert…
Gruß,
Toni
Danke, hattest recht mit der Klammer…