Licht-Szenen per Zufall

In den Sommermonaten steuere ich unsere Garten-Beleuchtung mit u.g. Skript.
Mit Hilfe der PHP-Funktion RAND wird eine Zufallszahl erzeugt, die je nach Wert einen bestimmten Aktor (Lichtquelle) schaltet.
Damit dieser nicht zweimal hintereinander und der letzte Aktor erneut geschaltet wird, wurden die Variablen „aktueller Aktor“ und „letzter Aktor“ eingefügt.
Das Skript wird z.B. alle 10 Minuten ausgeführt (siehe auch IPS_SetEventActive) und lässt sich beliebig modifizieren …

MST

<?
$id_laube = 31399 /*[3 Hof Garten\Laube]*/;
$id_garten = 59839 /*[3 Hof Garten\Pergola]*/;
$id_blumen = 25404 /*[3 Hof Garten\Blumenbeet]*/;
$id_birnen = 12599 /*[3 Hof Garten\HM Birnenbaum Beleuchtung]*/;
//$id_pergola = usw.

$current = GetValue(45073 /*[3 Hof Garten\Gartenbeleuchtung\aktueller Aktor]*/);
$last = GetValue(20890 /*[3 Hof Garten\Gartenbeleuchtung\letzter Aktor]*/);
echo "letzter Aktor: $last
";
echo "aktueller Aktor: $current
";

//zum neuen Aktor wechseln und letzen vermeiden
$rnd = rand(1,4);
while (($rnd == $current) or ($rnd == $last)){
      $rnd = rand(1,4);
}
$aktor =  $rnd;
echo "neuer Aktor: $aktor
";

// neuen Einschalten
switch($rnd) {
 case 1:
  	HM_WriteValueBoolean($id_laube , "STATE" , True);
  break;
 case 2:
	HM_WriteValueBoolean($id_garten , "STATE" , True);
  break;
 case 3:
	HM_WriteValueBoolean($id_blumen , "STATE" , True);
  break;
 case 4:
	HM_WriteValueBoolean($id_birnen , "STATE" , True);
  break;
}

// letzten Ausschalten
switch($current) {
 case 1:
  	HM_WriteValueBoolean($id_laube , "STATE" , False);
  break;
 case 2:
	HM_WriteValueBoolean($id_garten , "STATE" , False);
  break;
 case 3:
	HM_WriteValueBoolean($id_blumen , "STATE" , False);
  break;
 case 4:
	HM_WriteValueBoolean($id_birnen , "STATE" , False);
  break;
}

// und den letzten Aktor merken
SetValue(45073 /*[3 Hof Garten\Gartenbeleuchtung\aktueller Aktor]*/, $rnd);
SetValue(20890 /*[3 Hof Garten\Gartenbeleuchtung\letzter Aktor]*/,$current);
?>

Würde es folgendes Skript nicht auch tun? :wink:
Wäre kürzer und auch dynamisch erweiterbar…


<?
$ids[]=31399; //3 Hof Garten\Laube
$ids[]=59839; //3 Hof Garten\Pergola
$ids[]=25404; //3 Hof Garten\Blumenbeet
$ids[]=12599; //3 Hof Garten\HM Birnenbaum Beleuchtung

$current=GetValue(45073);
$last=GetValue(20890);
while(($rnd==$current) or ($rnd==$last)) $rnd=rand(0,count($ids)-1);
echo "neuer Aktor: ".$rnd."
";

//neuen einschalten
HM_WriteValueBoolean($ids[$rnd],"STATE",True);
//letzten Ausschalten
HM_WriteValueBoolean($ids[$current],"STATE",False);

//letzten Aktor merken
SetValue(45073,$rnd);
SetValue(20890,$current);
?>

LG,
Flo