Binär-Uhr mit Hue (oder stylish geschrieben "Binary-Clock")

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