Hallo Zusammen,
bei uns im Garten hängen vier Leuchten an der Wand, da kam mir spontan die Idee ein Binär-Uhr zu „bauen“, also vier HUE-Birnen rein und etwas tippen …
Das Script ist vielleicht nicht besonders schön, aber es funktioniert:
<?
/*
Diese Script macht aus 4 HUE-Leuchten eine Binär-Uhr.
Beispiel:
Stunden (Beispiele)
BIT4 BIT3 BIT2 BIT1
ein aus ein ein 11h
ein aus aus aus 8h
Minuten /bei Bedarf unten ändern
BIT4 BIT3 BIT2 BIT1
ein ein ein ein = 0-14 min
ein aus ein ein = 15-29 min
ein ein aus ein = 30-44 min
ein ein ein aus = 45-59 min
Folgende Funktionen sind integriert:
1) Auslesen des IST-Zustand der Lampen
2) Auslesen der Zeit und umwandeln in binär
3) Alle Lampen aus
4) N-mal auf-und ab-dimmen
5) Anzeige der Stunden
6) Pause
7) Anzeige der Minuten
8) Wiederherstellung des alten Zustand
*/
// Maximale Laufzeit des Script erhöhen
set_time_limit (50);
// Variablen, (bei Bedarf Debug-Variblen anlegen)
$ClockBrightness = GetValue(39623 /*[Spielwiese\Binary-Clock\Clock.Brightness]*/);
$Debug = true;
$OnOff = GetValue(33837 /*[Spielwiese\Binary-Clock\Binary Clock Switch]*/);
// Debug Variablen
$IDDebugVarClockDez = 21338 /*[Spielwiese\Binary-Clock\DebugVarClockDez]*/;
$IDDebugVarClockBin = 11899 /*[Spielwiese\Binary-Clock\DebugVarClockBin]*/;
$IDDebugVarTime = 55124;
$IDDebugVarBits = 56395 /*[Spielwiese\Binary-Clock\DebugVarBits]*/;
$IDDebugBulbBitsState = 39423 /*[Spielwiese\Binary-Clock\BulbBitState]*/;
// Lampen festlegen
$BulbBit1 = 37555 /*[3. Hardware\HUE\Bulbs\Gartenmauet Nr. 4]*/ ;
$BulbBit2 = 33506 /*[3. Hardware\HUE\Bulbs\Gartenmauer Nr. 3]*/ ;
$BulbBit3 = 17280 /*[3. Hardware\HUE\Bulbs\Gartenmauer Nr. 2]*/ ;
$BulbBit4 = 54169 /*[3. Hardware\HUE\Bulbs\Gartenmauer Nr. 1]*/ ;
if($OnOff == true)
{
// hier beginnt der Lauf
// get time
$TimeDezH = (date("g")); // stunden 12er
$TimeDezM = (date("i")); // minuten
//$TimeDezH = 03; // Spielwiese
//$TimeDezM = 55; // Spielwiese
IF ($Debug==true) SetValue($IDDebugVarClockDez,"$TimeDezH - $TimeDezM");
// convert to bin
$TimeBinH = sprintf( "%04d", decbin( $TimeDezH )); // Stunden umrechnen
if ($TimeDezM >= 0) $TimeBinM="1111"; // 0.-14. min, Muster für die Minuten erzeugen
if ($TimeDezM >= 15) $TimeBinM="1011"; // 15.-29. min
if ($TimeDezM >= 30) $TimeBinM="1101"; // 30.-44. min
if ($TimeDezM >= 45) $TimeBinM="1110"; // 45.-59. min, last match wins
IF ($Debug==true) SetValue($IDDebugVarClockBin,"$TimeBinH - $TimeBinM");
// cut strings
$Bit1H = substr($TimeBinH, -1,1); // erste Stelle Stunde
$Bit2H = substr($TimeBinH, -2,1); //
$Bit3H = substr($TimeBinH, -3,1); //
$Bit4H = substr($TimeBinH, -4,1); // vierte Stelle Stunden
$Bit1M = substr($TimeBinM, -1,1); // erste Stelle Minuten
$Bit2M = substr($TimeBinM, -2,1); //
$Bit3M = substr($TimeBinM, -3,1); //
$Bit4M = substr($TimeBinM, -4,1); // vierte Stelle Minuten
if ($Debug==true) SetValue($IDDebugVarBits,"Bits: 4H $Bit4H, 3H $Bit3H, 2H $Bit2H, 1H $Bit1H, 4M $Bit4M, 3M $Bit3M, 2M $Bit2M, 1M $Bit1M ");
// auslesen des ist-Zustand der Lampen
$BulbBit1StateBrightness = HUE_GetBrightness($BulbBit1);
$BulbBit1State = (boolean) HUE_GetState($BulbBit1);
$BulbBit2StateBrightness = HUE_GetBrightness($BulbBit2);
$BulbBit2State = (boolean) HUE_GetState($BulbBit2);
$BulbBit3StateBrightness = HUE_GetBrightness($BulbBit3);
$BulbBit3State = (boolean) HUE_GetState($BulbBit3);
$BulbBit4StateBrightness = HUE_GetBrightness($BulbBit4);
$BulbBit4State = (boolean) HUE_GetState($BulbBit4);
if ($Debug==true) SetValue($IDDebugBulbBitsState,"Bulb: 4 $BulbBit4StateBrightness,$BulbBit4State; 3 $BulbBit3StateBrightness,$BulbBit3State; 2 $BulbBit2StateBrightness,$BulbBit2State; 1 $BulbBit1StateBrightness,$BulbBit1State");
// lampen alle aus
for ($i = 1; $i <= 4; $i++) {
$tempid = "BulbBit".$i;
//HUE_SetBrightness($$tempid, 0); // Versuch: $BulbBit[$i], ging aber nicht :-(
HUE_SetState($$tempid, false);
}
// x mal Blinken zum Beginn
for ($h = 1; $h <= 2; $h++) {
ips_sleep(750);
for ($i = 1; $i <= 4; $i++) {
$tempid = "BulbBit".$i;
HUE_SetBrightness($$tempid, $ClockBrightness);
ips_sleep(300);
}
ips_sleep(500);
for ($i = 1; $i <= 4; $i++) {
$tempid = "BulbBit".$i;
HUE_SetState($$tempid, false);
HUE_SetBrightness($$tempid, 0);
ips_sleep(300);
}
}
ips_sleep(2000);
// stunden anzeigen
for ($i = 1; $i <= 4; $i++) {
$tempid = "BulbBit".$i;
$tempbit = "Bit".$i."H";
HUE_SetBrightness($$tempid, $ClockBrightness);
HUE_SetState($$tempid, $$tempbit);
}
ips_sleep(5000);
// ausschalten
for ($i = 1; $i <= 4; $i++) {
$tempid = "BulbBit".$i;
HUE_SetState($$tempid, false);
}
ips_sleep(1000);
// minuten anzeigen
for ($i = 1; $i <= 4; $i++) {
$tempid = "BulbBit".$i;
$tempbit = "Bit".$i."M";
HUE_SetBrightness($$tempid, $ClockBrightness);
HUE_SetState($$tempid, $$tempbit);
}
ips_sleep(5000); // kurz warten zum testen
// alten Zustand wieder herstellen
for ($i = 1; $i <= 4; $i++) {
$tempid = "BulbBit".$i;
$tempstate = "BulbBit".$i."State";
$tempbrigh = "BulbBit".$i."StateBrightness";
HUE_SetBrightness($$tempid, $$tempbrigh); // Erfolgloser Versuch mit $BulbBit[$i], ging aber nicht :-(
HUE_SetState($$tempid, $$tempstate);
}
}
?>
So sieht es im Baum aus:
Viel Spaß und schöne Grüße aus OBC
kea