Hallo zusammen,
irgendwann musste der Tag mal kommen wo ich mich mit den LEDs an der Decke befassen musste.
Die können Lichtfarbe und Farbe in einem breiten Spektrum für einen natürlichen Farbverlauf über den Tag (Konzepte wie HCL z.B.). Kurzum die sinnvollste Variante ist diese LEDs mit Farbkoordinaten xyY anzusprechen. Da in Symcon für Lichtfarbe das Profil der Wahl wohl ~TWColor und für Farbe eine 24bit RGB Codierung ist, muss das alles entsprechend umgerechnet werden. Als Beispiel mal unten die Konvertierung für die Lichtfarbe. Damit man es dann über MDT Glastaster oder sowas ansteuern kann muss hier noch HSV in xyY umgerechnet werden. Meine Frage ist im Grunde nur, gibt es für solche Themen ggf. schon Module oder ein paar gereiftere Scripte? Ich hatte darüber mal mit einem Lichtplaner gesprochen, der verkauft sogar Raspis für die Hutschiene (jenseits von 1000€) die quasi nur sowas umrechnen, damit man eine vernünftige Lichtsteuerung im Haus zustande bringt.
<?php
// IDs der verwendeten Variablen/Kommunikationsobjekte – bitte an Deine Gegebenheiten anpassen:
$ftID = 27864; // ID der Farbtemperatur-Int-Variable (~TWColor, 1000K bis 12000K)
$xID = 50241; // ID des KNX-Objekts für den X-Wert (2 Byte, Pulse)
$yID = 36969; // ID des KNX-Objekts für den Y-Wert (2 Byte, Pulse)
// 1. Farbtemperatur auslesen (im Bereich 1000K bis 12000K)
$ft_input = GetValue($ftID);
// 2. Umrechnung: Streckung des Profils so, dass 1000K -> 1800K und 12000K -> 16000K
$ft_spot = 1800 + ($ft_input - 1000) * (16000 - 1800) / (12000 - 1000);
// 3. Umrechnung von Kelvin in xy-Koordinaten (CIE 1931) – es wird ein Näherungswert berechnet
list($x_val, $y_val) = kelvinToXY($ft_spot);
// 4. Skalierung der xy-Werte auf den Bereich 0 bis 65535
// Annahme: Die von kelvinToXY() zurückgegebenen Werte liegen im Bereich 0 bis 1.
$x_int = round($x_val * 65535);
$y_int = round($y_val * 65535);
// 5. Die berechneten Werte an die KNX-Objekte schreiben
KNX_WriteDPT7($xID, $x_int);
KNX_WriteDPT7($yID, $y_int);
/**
* Funktion zur Umrechnung von Farbtemperatur (Kelvin) in CIE 1931 xy-Koordinaten.
* Dies ist ein Näherungsalgorithmus, der im Bereich von ca. 1800K bis 16000K brauchbare Werte liefert.
*/
function kelvinToXY($T) {
// Berechnung des x-Wertes
if ($T < 4000) {
$x = -0.2661239e9 / pow($T, 3) - 0.2343580e6 / pow($T, 2) + 0.8776956e3 / $T + 0.179910;
} else {
$x = -3.0258469e9 / pow($T, 3) + 2.1070379e6 / pow($T, 2) + 0.2226347e3 / $T + 0.240390;
}
// Berechnung des y-Wertes
if ($T < 4000) {
$y = -1.1063814 * pow($x, 3) - 1.34811020 * pow($x, 2) + 2.18555832 * $x - 0.20219683;
} else {
$y = 3.0817580 * pow($x, 3) - 5.87338670 * pow($x, 2) + 3.75112997 * $x - 0.37001483;
}
return array($x, $y);
}
?>