Seit Ewigkeiten nervt es mich, dass die RGBW-Stripes wenig Unnterstützung finden, weil man die Farben nicht so mischen kann, wie man will. Das W bleibt in der Regel außen vor. Und so habe ich das in Logiken umgesetzt gehabt, war aber auch nicht so happy damit. Nun habe ich versucht das Ganze in User-Funktionen zu packen. Die sind wesentlich flexibler einsetzbar. Wer will kann gerne mal testen. ich plane das noch zu erweitern. Es gibt auch Umwandlunsgmöglichkeiten von RGBtoHSV usw.
/functions/cc.py
Umsetzung in den Items:
Anmerkung: Der Listenwert (HSV oder RGB) ist natürlich für die Funktion nicht notwendig. Es ist aber eine Ausgabe als Liste oder als Einzelwerte möglich. Und auch das on_change ist natürlich nicht zwingend notwendig, wenn man das direkt ins richtige Item einbaut. Das war hier nur zu Testzwecken so gemacht.
/functions/cc.py
Code:
# # Author: Ronny Schulz # import colorsys import logging _logger = logging.getLogger(__name__) _VERSION = '0.0.1' _DESCRIPTION = 'Color Converter' # RGB to HSV color converter def RGBtoHSV(r, g, b): myHSV = colorsys.rgb_to_hsv(r/255, b/255, g/255) return [round(myHSB[0]*255), round(myHSB[1]*255), round(myHSB[2]*255)] def RGBtoHSV_H(r, g, b): myHSV = colorsys.rgb_to_hsv(r/255, b/255, g/255) return round(myHSB[0]*255) def RGBtoHSV_S(r, g, b): myHSV = colorsys.rgb_to_hsv(r/255, b/255, g/255) return round(myHSB[1]*255) def RGBtoHSV_V(r, g, b): myHSV = colorsys.rgb_to_hsv(r/255, b/255, g/255) return round(myHSB[2]*255) # HSV to RGB color converter def HSVtoRGB(h, s, v): myRGB = colorsys.hsv_to_rgb(h/360, s/100, v/100) return [round(myRGB[0]*255), round(myRGB[1]*255), round(myRGB[2]*255)] def HSVtoRGB_R(h, s, v): myRGB = colorsys.hsv_to_rgb(h/360, s/100, v/100) return round(myRGB[0]*255) def HSVtoRGB_G(h, s, v): myRGB = colorsys.hsv_to_rgb(h/360, s/100, v/100) return round(myRGB[1]*255) def HSVtoRGB_B(h, s, v): myRGB = colorsys.hsv_to_rgb(h/360, s/100, v/100) return round(myRGB[2]*255) # HSV to RGBW color converter def HSVtoRGBW(h, s, v): myRGB = colorsys.hsv_to_rgb(h/360, s/100, v/100) myRGBr = myRGB[0] myRGBg = myRGB[1] myRGBb = myRGB[2] myRGBw = abs(s-100)/100*v/100 mincol = min(myRGBr, myRGBg, myRGBb) minwhite = min(mincol, myRGBw) myRGBr -= minwhite myRGBg -= minwhite myRGBb -= minwhite return [round(myRGBr*255), round(myRGBg*255), round(myRGBb*255), round(myRGBw*255)] def HSVtoRGBW_R(h, s, v): myRGB = colorsys.hsv_to_rgb(h/360, s/100, v/100) myRGBr = myRGB[0] myRGBg = myRGB[1] myRGBb = myRGB[2] myRGBw = abs(s-100)/100*v/100 mincol = min(myRGBr, myRGBg, myRGBb) minwhite = min(mincol, myRGBw) myRGBr -= minwhite myRGBg -= minwhite myRGBb -= minwhite return round(myRGBr*255) def HSVtoRGBW_G(h, s, v): myRGB = colorsys.hsv_to_rgb(h/360, s/100, v/100) myRGBr = myRGB[0] myRGBg = myRGB[1] myRGBb = myRGB[2] myRGBw = abs(s-100)/100*v/100 mincol = min(myRGBr, myRGBg, myRGBb) minwhite = min(mincol, myRGBw) myRGBr -= minwhite myRGBg -= minwhite myRGBb -= minwhite return round(myRGBg*255) def HSVtoRGBW_B(h, s, v): myRGB = colorsys.hsv_to_rgb(h/360, s/100, v/100) myRGBr = myRGB[0] myRGBg = myRGB[1] myRGBb = myRGB[2] myRGBw = abs(s-100)/100*v/100 mincol = min(myRGBr, myRGBg, myRGBb) minwhite = min(mincol, myRGBw) myRGBr -= minwhite myRGBg -= minwhite myRGBb -= minwhite return round(myRGBb*255) def HSVtoRGBW_W(h, s, v): myRGB = colorsys.hsv_to_rgb(h/360, s/100, v/100) myRGBr = myRGB[0] myRGBg = myRGB[1] myRGBb = myRGB[2] myRGBw = abs(s-100)/100*v/100 mincol = min(myRGBr, myRGBg, myRGBb) minwhite = min(mincol, myRGBw) myRGBr -= minwhite myRGBg -= minwhite myRGBb -= minwhite return round(myRGBw*255)
Anmerkung: Der Listenwert (HSV oder RGB) ist natürlich für die Funktion nicht notwendig. Es ist aber eine Ausgabe als Liste oder als Einzelwerte möglich. Und auch das on_change ist natürlich nicht zwingend notwendig, wenn man das direkt ins richtige Item einbaut. Das war hier nur zu Testzwecken so gemacht.
Code:
Farbtest_HSVtoRGBW: HSV: type: list eval: "[sh..H(), sh..S(), sh..V()]" eval_trigger: - .H - .S - .V H: type: num initial_value: 0 visu_acl: rw S: type: num initial_value: 0 visu_acl: rw V: type: num initial_value: 0 visu_acl: rw RGBW: type: list eval: uf.cc.HSVtoRGBW(sh...H(), sh...S(), sh...V()) eval_trigger: - ..H - ..S - ..V R: type: num initial_value: 0 eval: uf.cc.HSVtoRGBW_R(sh....H(), sh....S(), sh....V()) eval_trigger: - ...H - ...S - ...V on_change: EG.Diele.DALI.Decke.R.Dimmwert = value G: type: num initial_value: 0 eval: uf.cc.HSVtoRGBW_G(sh....H(), sh....S(), sh....V()) eval_trigger: - ...H - ...S - ...V on_change: EG.Diele.DALI.Decke.G.Dimmwert = value B: type: num initial_value: 0 eval: uf.cc.HSVtoRGBW_B(sh....H(), sh....S(), sh....V()) eval_trigger: - ...H - ...S - ...V on_change: EG.Diele.DALI.Decke.B.Dimmwert = value WW: type: num initial_value: 0 eval: uf.cc.HSVtoRGBW_W(sh....H(), sh....S(), sh....V()) eval_trigger: - ...H - ...S - ...V on_change: EG.Diele.DALI.Decke.WW.Dimmwert = value
Kommentar