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