Hallo zusammen,
um die Anwesenheit zu simulieren, hab ich mir folgendes Skript geschrieben. Es basiert auf dem Skript der zufälligen Gartenbeleuchtung, welches Steiner mal gepostet hat.
Was braucht man?
- Eine Boolean-Variable, die ich beim Aus-dem-Haus-gehen über den Touch auf True setze.
- Das Skript selbst hat zwei Timer. Einmal einen über obige Variable getriggert (OnChange), den zweiten um immer ein Licht unterschiedlich lange zu schalten.
Die zu schaltenden Lichter werden im Anfang des Skripts in einem Array deklariert. Fügt man mehrere hinzu, muss man die Anzahl in dem rnd-Befehl anpassen (könnte man auch noch automatisch über die Array-Länge machen…).
Hier das Skript:
<?
$instances = array(32881 /*[Erdgeschoss\Küche\Sockelbeleuchtung]*/, 55938, 10595 /*[Obergeschoss\Galerie\Bücherregal]*/);
if ($IPS_EVENT == 32272 /*[.System\Anwesenheit\Anwesenheitssimulation\]*/) {
switch ($IPS_VALUE) {
case true:
IPS_SetEventActive(47429 /*[.System\Anwesenheit\Anwesenheitssimulation\]*/, true);
IPS_SetEventCyclic(47429 /*[.System\Anwesenheit\Anwesenheitssimulation\]*/, 0, 0, 0, 0, 2, 1);
print_r("Abwesenheitssimulation aktiv");
break;
case false:
IPS_SetEventActive(47429 /*[.System\Anwesenheit\Anwesenheitssimulation\]*/, false);
$current = GetValue(40049 /*[.System\Anwesenheit\sys_V_int_dev_act]*/);
if (GetValue(IPS_GetStatusVariableID($instances[$current], "StatusVariable")) != false) {
FS20_SwitchMode ($instances[$current], false);
}
print_r("Abwesenheitssimulation inaktiv");
break;
}
}
if ($IPS_EVENT == 47429 /*[.System\Anwesenheit\Anwesenheitssimulation\]*/) {
$time = time();
$start_time = strtotime(GetValue(27745 /*[.System\Wetter\Sonnenuntergang]*/));
$end_time = strtotime("00:00")+60*60*24;
if (($time >= $start_time) and ($time <= $end_time)) {
$current = GetValue(40049 /*[.System\Anwesenheit\sys_V_int_dev_act]*/);
$last = GetValue(50262 /*[.System\Anwesenheit\sys_V_int_dev_old]*/);
$rnd = rand(0,2);
while (($rnd == $current) or ($rnd == $last)){
$rnd = rand(0,2);
}
FS20_SwitchMode ($instances[$rnd], true);
FS20_SwitchMode ($instances[$current], false);
$duration = rand(10,60);
IPS_SetEventCyclic(47429 /*[.System\Anwesenheit\Anwesenheitssimulation\]*/, 0, 0, 0, 0, 2, $duration);
SetValue(40049 /*[.System\Anwesenheit\sys_V_int_dev_act]*/, $rnd);
SetValue(50262 /*[.System\Anwesenheit\sys_V_int_dev_old]*/,$current);
} else {
if (GetValue(IPS_GetStatusVariableID($instances[GetValue(40049 /*[.System\Anwesenheit\sys_V_int_dev_act]*/)], "StatusVariable")) != false) {
FS20_SwitchMode ($instances[GetValue(40049 /*[.System\Anwesenheit\sys_V_int_dev_act]*/)], false);
}
}
}
?>
Sobald die Uhrzeit später als der Sonnenuntergang ist, startet die Anwesenheitssimulation und läuft in meinem Fall bis 01:00Uhr.
Kommt man vorher nach Hause, wird die gerade aktive Lampe ausgeschaltet.
Gruß und vielleicht kann´s der ein oder andere gebrauchen.
Gruß
dfhome