Ips Color Picker / Farbkreis / RGB Slider und das Aktionsskript

Hallo allerseits,

seit IPS 3 gibt es ja den schicken Color Picker oder auch RGB Slider mit Farbkreis.

Da ich gestern einige Stunden mit Suchen im Forum verbracht habe um herauszufinden wie man
das Dings benutzt möchte ich hier das wesentliche einfach mal für die Nachwelt zusammenfassen.

Estellen ist eigentlich einfach:

  1. Anlegen eines Aktionsscriptes für den Picker (dazu weiter unten mehr)
  2. Anlegen einer Variable vom Typ Integer mit dem Variablenprofil ~HexColor und unter „Eigene Aktion“ wählt man das
    eben erstellte Skript aus.
  3. An gewünschter Stelle im Webfront erstellt man einen Link auf die eben erstellte Integer Variable.

Nun kann der Color Picker im Webfront schon betrachtet werden.

Um da am ende Leben reinzubekommen muss im Aktionsscript nun mit den vom Picker gesendeten Daten etwas gemacht werden.

<?

SetValue($_IPS['VARIABLE'], $_IPS['VALUE']); // Speichert den vom Picker gesendeten Wert in der angelegten Variable

//Nun steht in der Vaiable ein HEX wert drin, z.b. FF321B diesen müssen wir nun in einzelne Werte für Rot / Grün / Blau zerlegen und genau das war der Part der für mich im Forum nicht einfach zu finden war

$r = (($_IPS['VALUE'] >> 16) & 0xFF);
$g = (($_IPS['VALUE'] >> 8) & 0xFF);
$b = (($_IPS['VALUE'] >> 0) & 0xFF);

//Nun haben wir tatsächlich einzelne Werte für RGB und können diese weiterverarbeiten, z.B. an einen Client Socket senden um wie bei mir den LW-12 WLAN RGB Stripe Controller anzusteuern


CSCK_SendText(19783 /*[LedController]*/  , "%c%c%c%c%c".chr(0x56).chr($r).chr($g).chr($b).chr(0xAA).CHR(13).chr(10));  //Setzt die RGB Farbwerte des LW-12



So für alle dies das nachmachen wollen soll dies eine Arbeitserleichterung sein.

Viel Spaß

Martin

Hallo Martin,

vielen Dank für diesen Tipp.

Nun stehe ich gerade auf dem Schlauch:
Wie müsste das denn „umgedreht“ aussehen? Also wenn ich die drei einzelnen RGB-Werte als Integer habe und ich damit direkt den Farbkreis beeinflussen möchte?

Joachim

Nachtrag:
Habe jetzt eine funktionierende Lösung gefunden:

$RGB = hexdec(str_pad(dechex($r), 2,'0', STR_PAD_LEFT).str_pad(dechex($g), 2,'0', STR_PAD_LEFT).str_pad(dechex($b), 2,'0', STR_PAD_LEFT));
SetValueInteger(45068 /*[Schlafzimmer\Farbe]*/, $RGB);

Geht möglicherweise auch einfacher…

ich empfehle dir mal mein hue modul anzuschauen, da sind viele converter enthalten, die man gut weiterverwenden kann.