Prima, ich dampfe dass dann gerade mal zusammen:
Die drei Alternativen:
1 - EIS2 | DimSteuerung | Standard | [0…15] Instanz:
Wert erhöhen: 9
Stop: 8
Wert reduzieren: 1
2 - EIS2 | DimSteuerung | Erweitert| [-7…+7] Instanz:
Wert erhöhen: 7
Stop: 0
Wert reduzieren: -7
3 - 3.007 - Dimming Control Instanz:
Wert erhöhen: Schrittunterteilung 1, Bewegung und Erhöhen/Erniedrigen 1 (true)
Stop: Schrittunterteilung 0, Bewegung und Erhöhen/Erniedrigen 1(true) oder 0 (false)
Wert reduzieren: Schrittunterteilung 1, Bewegung und Erhöhen/Erniedrigen 0 (false)
HSV/HSL: Ein Gelbton wurde am Glastaster gesetzt. Die Umrechnung nach HSV2RGB lieferte einen Gelbton, die Umrechnung HSL2RGB weiß. -> HSV wird bevorzugt
HSV2RGB
// taken and based on http://www.beliefmedia.com/convert-rgb-hsv-hsl-php
//$value1 = 0; $value2 = 189; $value3 = 85;
$r = $value1; //Red
$g = $value2; //Green
$b = $value3; //Blue
$r = ($r / 255);
$g = ($g / 255);
$b = ($b / 255);
$maxrgb = max($r, $g, $b);
$minrgb = min($r, $g, $b);
$chroma = $maxrgb - $minrgb;
$computedv = 100 * $maxrgb;
if ($chroma == 0)
return array(
0,
0,
$computedv
);
$computeds = 100 * ($chroma / $maxrgb);
switch ($minrgb) {
case $r:
$h = 3 - (($g - $b) / $chroma);
break;
case $b:
$h = 1 - (($r - $g) / $chroma);
break;
default:
/* $g == $minrgb */
$h = 5 - (($b - $r) / $chroma);
break;
}
$computedh = 60 * $h;
$result1 = round($computedh, 0); //Hue
$result2 = round($computeds, 0); //Saturation
$result3 = round($computedv, 0); //Value
//echo "h: ".$result1."
s: ".$result2."
v: ".$result3;
HSV2RGB:
// taken and based on http://www.beliefmedia.com/convert-rgb-hsv-hsl-php
//$value1 = 147; $value2 = 100; $value3 = 74;
$hue = $value1; //Hue
$sat = $value2; //Saturation
$val = $value3; //Value
$h = $hue;
$s = $sat;
$v = $val;
if ($hue < 0)
$hue = 0;
if ($hue > 360)
$hue = 360;
if ($sat < 0)
$sat = 0;
if ($sat > 100)
$sat = 100;
if ($val < 0)
$val = 0;
if ($val > 100)
$val = 100;
$dS = $sat / 100.0;
$dV = $val / 100.0;
$dC = $dV * $dS;
$dH = $hue / 60.0;
$dT = $dH;
while ($dT >= 2.0)
$dT -= 2.0;
$dX = $dC * (1 - abs($dT - 1));
switch (floor($dH)) {
case 0:
$dR = $dC;
$dG = $dX;
$dB = 0.0;
break;
case 1:
$dR = $dX;
$dG = $dC;
$dB = 0.0;
break;
case 2:
$dR = 0.0;
$dG = $dC;
$dB = $dX;
break;
case 3:
$dR = 0.0;
$dG = $dX;
$dB = $dC;
break;
case 4:
$dR = $dX;
$dG = 0.0;
$dB = $dC;
break;
case 5:
$dR = $dC;
$dG = 0.0;
$dB = $dX;
break;
default:
$dR = 0.0;
$dG = 0.0;
$dB = 0.0;
break;
}
$dM = $dV - $dC;
$dR += $dM;
$dG += $dM;
$dB += $dM;
$dR *= 255;
$dG *= 255;
$dB *= 255;
$result1 = round($dR); //Red
$result2 = round($dG); //Green
$result3 = round($dB); //Blue
//echo "R: " . $result1 . "
G: " . $result2 . "
B: " . $result3;
Bei Tastendruck sollte sich der entsprechende Wert (aus einer Ist-Statusvariable) kontinuierlich erhöhen/reduzieren bis das STOP Wert gesendet wird. Bestenfalls wird der geänderte Wert zyklisch an den RGB Controller weitergegeben… Wo ich das gerade schreibe, wird mir klar, dass RGB2HSV gar nicht notwendig ist. Für H, S und V wird sowieso eine Variable gebraucht. Die kann ich einmal setzen und so auch an die KNX Statusvariable schicken. Ausgangspunkt für die HSV2RGB berechnung sind immer die drei Statusvariablen die
- nach RGB gerechnet
- der inkrementierte absolut Wert an die KNS Statusvariable geschickt wird.
Offen: Wie verhält sich das RGB Gateway? Wie wird der Stripe darüber ein/aus geschaltet? Vom Taster gibts dazu einen separate Ein/Aus GA/Variable.
Was den Workflow angeht, bin ich jetzt allerdings raus. Ich bastel mir meine Sachen noch mit der Hand am Arm zusammen und will mich erst mal nicht in den Workflow einarbeiten.
Findet sich jemand der der dabei Hilfestellung leisten kann?