Hallo swissroot,
Nur noch eine Frage zu deinem Helligkeitsscript. Hast Du dies auf eine eigene Variable gelegt oder im „Farbkreis“ integriert?
Bei mir sieht es so aus:
// Speichert des HEX-Wert vom Color-Picker
$Farbe = $_IPS['VALUE'];
SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
// HEX-Wert in einzelne Werte für Rot / Grün / Blau zerlegen
$r = (($Farbe >> 16) & 0xFF);
$g = (($Farbe >> 8) & 0xFF);
$b = (($Farbe >> 0) & 0xFF);
// Farbsättigung
$fs=255;
/* Berechnung der Helligkeit
Die hier angewendete Formel wird vom W3C für die Bestimmung von Farbhelligkeiten
empfohlen, die auf Bildschirmen dargestellt werden.
http://www.w3.org/TR/2006/WD-WCAG20-20060427/appendixA.html#luminosity-contrastdef
The luminosity of a color is defined as
0.2126 * ((R / FS) ^ 2.2) + 0.7152 * ((G / FS) ^ 2.2) + 0.0722 * ((B / FS) ^ 2.2).
R, G, and B are the red, green, and blue RGB values of the color.
FS is the maximum possible full scale RGB value for R, G, and B (255 for eight bit color channels).
The "^" character is the exponentiation operator.
Infos auch hier
http://www.kurztutorial.info/programme/helligkeit-farbe-berechnen/rgb-bright-rechner.htm
*/
$Helligkeit= 0.2126 * pow(($r/$fs), 2.2) + 0.7152 * pow(($g/$fs), 2.2) + 0.0722 * pow(($b/$fs), 2.2);
// Umwandeln der RGB Werte
$hsv = RGBtoHSV($r, $g, $b);
// Schreiben der Homematic Werte in den entsprechenden Controller des
//gewählten Color Pickers
switch ($_IPS['VARIABLE']) {
case 10568: // Flur
HM_WriteValueInteger(26243 /*[Flur\Licht\Flur LED Farbe]*/, "COLOR", $hsv);
HM_WriteValueFloat(15722 /*[Flur\Licht\Flur LED Dimmer]*/, "LEVEL", $Helligkeit);
break;
case 34765: // Essen Deckenlampe
HM_WriteValueInteger(16296 /*[Essen\Licht\Essen Deckenlampe Farbe]*/, "COLOR", $hsv);
HM_WriteValueFloat(46635 /*[Essen\Licht\Essen Deckenlampe Dimmer]*/, "LEVEL", $Helligkeit);
break;
case 15288: // Essen LED
HM_WriteValueInteger(51425 /*[Essen\Licht\Essen LED Farbe]*/, "COLOR", $hsv);
HM_WriteValueFloat(46791 /*[Essen\Licht\Essen LED Dimmer]*/, "LEVEL", $Helligkeit);
break;
case 17932: // Essen Vitrine
HM_WriteValueInteger(46448 /*[Essen\Licht\Essen Vitrine Farbe]*/, "COLOR", $hsv);
HM_WriteValueFloat(21876 /*[Essen\Licht\Essen Vitrine Dimmer]*/, "LEVEL", $Helligkeit);
break;
case 55776: // Kueche RGBW
HM_WriteValueInteger(57420 /*[Kueche\Licht\Kueche RGBW Farbe]*/, "COLOR", $hsv);
HM_WriteValueFloat(48235 /*[Kueche\Licht\Kueche RGBW Dimmer]*/, "LEVEL", $Helligkeit);
break;
}
Eine weitere Variable wird dabei nicht angelegt. Farbe und Helligkeit werden dann als Paar an die Controller gesendet.
jetzt wo ich natürlich einen DummAktor gebaut habe und nicht mehr den HM Aktor nehme ändert sich die Farbe im Gui nicht wenn ich direkt über HM schalte
Ja, das ist natürlich so und gilt z. B. auch für meine direkten Farbtasten, wo dann keine Rückmeldung an den Color Picker geht. Wenn man das wollte, müsste man den Wert für den Color Picker zurück rechnen oder sich irgendwo speichern und dann an die Hex RGBW Variable des Color Picker senden. Ich habe das eben mal einfach durch Änderung der Variablen in der Konsole gemacht und die Änderung wird dann am Color Picker auf angezeigt.
Betreffend Sonnenaufgang bin ich im Forum auf dies gestossen
Ok, das ist in sofern anders, als dass nicht der Controller selbst programmiert wird. Dass man mittels Scripttimer und den entsprechenden hsv-Werten sich einen Farbwechsel machen kann liegt ja auf der Hand.
Gruß
Hans
Nachtrag: Die Rückmeldung bei Betätigung der Farbtasten habe ich jetzt integriert, da man ja nur den entsprechenden Integerwert an die RGBW Variable senden muss (rot=16711680, grün=65280, blau=255, gelb=16776960 und weiß= 16777215). Da hast du mich ja auf die richtige Idee gebracht