Hallo Chris
einen Switch duration befehl gibts glaube ich nicht.
Mit sleep kannst Du hier nicht viel machen, nach 30s macht IPS dem Script ein Ende. Zum glück. Einmal ne schleife falsch geschrieben und Du weißt warum ![:smiley: :smiley:](https://community.symcon.de/images/emoji/win10/smiley.png?v=9)
Ausserdem gehen bei IPS „nur“ 10 Scripte gleichzeitig, was auch vollkommen langt.
Wie RWN schon geschrieben hat mach das ganze mit IPS_SetScriptTimer.
Hier hab ich zum beispiel mein Flurlichtscript mit 1x Taster Moeller 28195, 2xPiri(einmal Moeller 23304, einmal FS20 21052 und als aktor einmal Moeller 34952.
$modus = getvalue(36394 /*[EG\Treppenhaus\Schalter\Modus]*/);
if($IPS_SENDER == "Variable")
{
//print $IPS_VARIABLE;
switch ($IPS_VARIABLE)
{
Case '23304' : //Piri Möller hell
if ($modus == 2)
return;
MXC_SwitchMode(34952 /*[EG\Treppenhaus\Aktor]*/,true);
IPS_SetScriptTimer($IPS_SELF,80);
break;
Case '21052' : //Piri FS20 hell
if ($modus == 2)
return;
MXC_SwitchMode(34952 /*[EG\Treppenhaus\Aktor]*/,true);
IPS_SetScriptTimer($IPS_SELF,80);
break;
case '28195': //lichtschalter
//MXC_SwitchMode(12617 /*[EG\WF\Licht]*/,!getvalue(15340 /*[EG\WF\Licht\Status]*/));
IPS_SetScriptTimer($IPS_SELF,80);
$v = IPS_GetScript(36355 /*[EG\Treppenhaus\Licht]*/);
$v = $v['LastExecute'];
$v = intval((time()-$v));
if ($v<3) // überprüfen ob letzter Tastbefehl vor max. 3s war
if ($modus<2)
setvalue(36394 /*[EG\Treppenhaus\Schalter\Modus]*/,$modus+1);
else
{
setvalue(36394 /*[EG\Treppenhaus\Schalter\Modus]*/,0);
MXC_SwitchMode(34952 /*[EG\Treppenhaus\Aktor]*/,true);
IPS_SetScriptTimer($IPS_SELF,600);
}
else
{
setvalue(36394 /*[EG\Treppenhaus\Schalter\Modus]*/,0);
IPS_SetScriptTimer($IPS_SELF,200);
}
break;
}
}
if($IPS_SENDER == "TimerEvent")
{
setvalue(36394 /*[EG\Treppenhaus\Schalter\Modus]*/,0);
MXC_SwitchMode(34952 /*[EG\Treppenhaus\Aktor]*/,false);
IPS_SetScriptTimer($IPS_SELF, 0);
}
Wenn das Script durch ne Taster oder Piri getriggert wird
if($IPS_SENDER == "Variable")
dann schalte er das Licht ein und setzt den Timer für das Script, wenn das Script durch den Timer getriggert wird
if($IPS_SENDER == "TimerEvent")
dann schaltet er das Licht wieder aus und setzt den Timer auf Null bzw. schaltet ihn aus.
Zusätzlich hab ich einmal die Variable Modus 36394 drin, die dient dazu das Licht für 10 min
IPS_SetScriptTimer($IPS_SELF,600);
einzuschalten, einfach indem ich den Taster öfters als 2 mal immer innerhalb von 3s betätige.
Getriggert wird das Script durch den Taster und die beiden PIRIs.
Hoffe das hilft schonmal, wenn nicht einfach nachfragen.
Gruß Jannis