Hallo allerseits!
Ich wollte meine LEDs bei bestimmten Ereignissen (z.B. es klingelt an der Tür) in verschiedenen Farben blinken lassen und danach den alten Zustand (AN in bestimmter Farbe oder AUS) wiederherstellen. Doch das mit dem letzten Zustand war gar nicht so einfach, wie ich erst dachte.
Nachdem ich nirgends im Forum etwas passendes finden konnte, habe ich mich an die Arbeit gemacht und dabei kam folgendes Skript heraus:
<?
// Aktuellen Zustand vom RGBW-868 auslesen, um den Zustand nach dem Ereignis wieder zu setzen
$ledaktuell_rgb = GetValue(43321 /*[Hardware & Skripte\RGB-Steuerung\Wohnzimmer hinten\RGBW-868\Color]*/);
$ledaktuell_white = GetValue(35007 /*[Hardware & Skripte\RGB-Steuerung\Wohnzimmer hinten\RGBW-868\White]*/);
// LED 3 x rot aufblitzen lassen
PJ_SetRGBW(22214 /*[Hardware & Skripte\RGB-Steuerung\Wohnzimmer hinten\RGBW-868]*/, 0, 0, 0, 0);
IPS_Sleep(500);
PJ_SetRGBW(22214 /*[Hardware & Skripte\RGB-Steuerung\Wohnzimmer hinten\RGBW-868]*/, 255, 0, 0, 0);
IPS_Sleep(500);
PJ_SetRGBW(22214 /*[Hardware & Skripte\RGB-Steuerung\Wohnzimmer hinten\RGBW-868]*/, 0, 0, 0, 0);
IPS_Sleep(500);
PJ_SetRGBW(22214 /*[Hardware & Skripte\RGB-Steuerung\Wohnzimmer hinten\RGBW-868]*/, 255, 0, 0, 0);
IPS_Sleep(500);
PJ_SetRGBW(22214 /*[Hardware & Skripte\RGB-Steuerung\Wohnzimmer hinten\RGBW-868]*/, 0, 0, 0, 0);
IPS_Sleep(500);
PJ_SetRGBW(22214 /*[Hardware & Skripte\RGB-Steuerung\Wohnzimmer hinten\RGBW-868]*/, 255, 0, 0, 0);
// Letzten Zustand vom RGBW-868 wiederherstellen (erst mit Dezimal zu Hex, dann Hex zu RGB via Funktion)
$hex_letzterzustand = dechex($ledaktuell_rgb);
$rgb_letzterzustand = hex2rgb($hex_letzterzustand);
// Werte aus dem Array was aus der Funktion kommt zurück in die einzelnen Farbvariablen speichern
$rotalt = $rgb_letzterzustand[0];
$gruenalt = $rgb_letzterzustand[1];
$blaualt = $rgb_letzterzustand[2];
$weissalt = $ledaktuell_white;
// Einzelne Farbvariablen an den RGBW-868 senden, um den Zustand vor dem Ereignis wiederherzustellen
PJ_SetRGBW(22214 /*[Hardware & Skripte\RGB-Steuerung\Wohnzimmer hinten\RGBW-868]*/, $rotalt, $gruenalt, $blaualt, $weissalt);
// Die Funktion um die HEX Werte, aus dem alten LED-Zustand, wieder in RGB-Farben "umzurechnen"
function hex2rgb( $colour ) {
if ( $colour[0] == '#' ) {
$colour = substr( $colour, 1 );
}
if ( strlen( $colour ) == 6 ) {
list( $r, $g, $b ) = array( $colour[0] . $colour[1], $colour[2] . $colour[3], $colour[4] . $colour[5] );
} elseif ( strlen( $colour ) == 2 ) {
list( $r, $g, $b ) = array( "00", "00", $colour[0] . $colour[1] );
} elseif ( strlen( $colour ) == 3 ) {
list( $r, $g, $b ) = array( $colour[0] . $colour[0], $colour[1] . $colour[1], $colour[2] . $colour[2] );
} elseif ( strlen( $colour ) == 4 ) {
list( $r, $g, $b ) = array( "00", $colour[0] . $colour[1], $colour[2] . $colour[3] );
} else {
return false;
}
$r = hexdec( $r );
$g = hexdec( $g );
$b = hexdec( $b );
return array( '0' => $r, '1' => $g, '2' => $b );
}
?>
Dieses Skript muss man jetzt nur von einer Variable triggern lassen, dann blinken die LED 3x auf und der letzte Zustand wird wiederhergestellt. Also z.B. bei einem Bewegungsmelder, einem Taster oder einem Schalter auf Variablenänderung/-aktualisierung.
Natürlich könnt ihr das auch für andere LED Geschichten verwenden oder noch erweitern. Hauptsächlich geht es um die Möglichkeit den letzten Zustand auszulesen und nach einem Ereignis wiederherzustellen.
Grüße,
Chris