Hallo,
nachdem ich mich den einen oderen anderen Tag damit beschäftigt habe, meine derzeitige Lichtsteuerung in IPS abzubilden und mir dieses auch soweit gelungen ist, habe dennoch eine Frage.
Zunächst das Script:
<?
/*IPS_SENDER sichtbar machen*/
setvaluestring(39887 /*[Flur-/Treppenhauslicht\Velleman USB\Taster DG\ipssender]*/,$IPS_SENDER);
/*Ist das Licht an?*/
$status =GetValueBoolean(29853 /*[Flur-/Treppenhauslicht\Velleman USB\Licht DG]*/);
if ($status)
/* Licht ist bereits eingeschaltet und es wird erneut getastet */
{
SetValueBoolean(29853 /*[Flur-/Treppenhauslicht\Velleman USB\Licht DG]*/,false);
SetValueBoolean(42015 /*[Flur-/Treppenhauslicht\Velleman USB\Taster DG\Dauerlicht]*/,false);
VELLEUSB_WriteDigitalChannel(30407 /*[Flur-/Treppenhauslicht\Velleman USB]*/,3,false);
exit;
/*Nun soll da Script beendet werden. Licht ist aus.*/
}
else
{
/* Licht ist derzeit ausgeschaltet und es wird getastet */
SetValueBoolean(29853 /*[Flur-/Treppenhauslicht\Velleman USB\Licht DG]*/,true);
VELLEUSB_WriteDigitalChannel(30407 /*[Flur-/Treppenhauslicht\Velleman USB]*/,3,true);
/*Es soll eine Sekunde gewartet werden, um zu prüfen, ob der Taster >= 1 sec. gedrückt wurde*/
sleep (1);
$dauerlicht = GetValueBoolean(32091 /*[Flur-/Treppenhauslicht\Velleman USB\Taster DG]*/);
if (!$dauerlicht)
{
/*nach 9 sec. soll das Licht wieder ausgehen und alles soll auf "Null"*/
sleep(9);
SetValueBoolean(29853 /*[Flur-/Treppenhauslicht\Velleman USB\Licht DG]*/,false);
VELLEUSB_WriteDigitalChannel(30407 /*[Flur-/Treppenhauslicht\Velleman USB]*/,3,false);
SetValueBoolean(42015 /*[Flur-/Treppenhauslicht\Velleman USB\Taster DG\Dauerlicht]*/,false);
}
else
{
SetValueBoolean(42015 /*[Flur-/Treppenhauslicht\Velleman USB\Taster DG\Dauerlicht]*/,true);
/*Dauerlicht: Licht bleibt bis zum nächsten Tasten an*/
}
}
?>
Habe versucht, es gescheit zu kommentieren. Beim Tasten wird das Licht ausgeschaltet, wenn es beim Start des Scripts eingeschaltet war und gut. Andernfalls wird eingeschaltet. Es wird 1 sek. gewartet, dann geprüft, ob der Taster noch gedrückt ist. Wenn ja, dann wird nur noch die Variabele Dauerlicht gesetzt. Wenn nein, dann soll sich das Licht nach 9 sek. (später mal 3 min) ausschalten. Nur die Funktion sleep(9) stört mich ein wenig. Oder muß ich mir da keine Sorgen wegen der Performance machen, wenn ich nach diesem Schema mehrere Scripte am Laufen habe?
Ich habe im Forum auch etwas von $IPS_SetScriptTimer gelesen. Da wird dann im Objektbaum ein Timer-Ereignis erstellt. Ist das richtig? Ist das eine bessere, saubere Variante? Könnt ihr das erklären? In meinen Fall hat $IPS_SENDER den Wert „Variable“. Das Script lasse ich ausführen, wenn der Wert der Taster-Variable (Eingang am Board) den Wert „True“ bekommt.
Nun ist es derzeit so, daß bei aktivem Licht und erneutem Tasten das Licht auch aus geht, aber im Objektbaum vor dem Script ein rotes Ausrufezeichen erscheint, was auf Scriptfehler hinweist, richtig? Was habe ich da falsch gemacht? Das hat doch irgendwas mit der sleep-Funktion zu tun, oder? Wird das Script dabei evtl. zweimal ausgeführt?
Wie löse ich diese Sachen sauber?
Danke für Vorschläge.
Andreas.
PS: Habe dabei ein Velleman-Board benutzt.