Anmerkung: Dank justme1968 wird vergleichbare Funkionalität demnächst "im Standard" verfügbar sein (s.u.): Color::xyY2rgb und Color::xyY2hex
Ich bin sicher nicht der Erste, der das gebastelt hat, aber ich war zu faul zum Suchen ;)
Zigbee RGB-Lampen liefern über zigbee2mqtt und (in meinem Fall) MQTT2_SERVER) häufig ein color_x und color_y reading statt eines RGB Wertes. Dadurch wird z.B. der colorpicker nicht korrekt dargestellt. Eine Umwandlung der colorx/y-Werte in RGB (hex) macht folgende sub in 99_myUtils:
########################################################################################################
# converts zigbee2mqtt color_x and color_y values to RGB (hex)
# stolen from https://stackoverflow.com/questions/22894498/philips-hue-convert-xy-from-api-to-hex-or-rgb
########################################################################################################
sub cieToRgb($$$) {
my ( $x, $y, $b ) = @_;
my $z = 1.0 - $x - $y;
my $Y = ( $b / 254 );
my $X = ( $Y / $y ) * $x;
my $Z = ( $Y / $y ) * $z;
#Convert to RGB using Wide RGB D65 conversion
my $red = $X * 1.656492 - $Y * 0.354851 - $Z * 0.255038;
my $green = -$X * 0.707196 + $Y * 1.655397 + $Z * 0.036152;
my $blue = $X * 0.051713 - $Y * 0.121364 + $Z * 1.011530;
#If red, green or blue is larger than 1.0 set it back to the maximum of 1.0
if ( $red > $blue && $red > $green && $red > 1.0 ) {
$green = $green / $red;
$blue = $blue / $red;
$red = 1.0;
}
elsif ( $green > $blue && $green > $red && $green > 1.0 ) {
$red = $red / $green;
$blue = $blue / $green;
$green = 1.0;
}
elsif ( $blue > $red && $blue > $green && $blue > 1.0 ) {
$red = $red / $blue;
$green = $green / $blue;
$blue = 1.0;
}
#Reverse gamma correction
$red = $red <= 0.0031308 ? 12.92 * $red : ( 1.0 + 0.055 ) * $red**( 1.0 / 2.4 ) - 0.055;
$green = $green <= 0.0031308 ? 12.92 * $green : ( 1.0 + 0.055 ) * $green**( 1.0 / 2.4 ) - 0.055;
$blue = $blue <= 0.0031308 ? 12.92 * $blue : ( 1.0 + 0.055 ) * $blue**( 1.0 / 2.4 ) - 0.055;
#Convert normalized decimal to decimal
$red = ceil( $red * 255 );
$green = ceil( $green * 255 );
$blue = ceil( $blue * 255 );
my $hex = sprintf( "%X%X%X", $red, $green, $blue );
return ($hex);
}
ein userreading:
attr meineLampe userReadings color {cieToRgb(ReadingsVal($name,"color_x",0),ReadingsVal($name,"color_y",0),ReadingsVal($name,"brightness",254))}
und noch quick & dirty ein devStateIcon
attr meineLampe devStateIcon {return ".*:light_light_dim_100@#".ReadingsVal($name,"color","FFFFF").":toggle"}
magst du mal probieren ob es auch mit xyYtorgb aus 31_HUEDevice und den dort verwendet farbraum eckdaten einigermaßen passt?
dann würde ich es zentral in Color.pm (https://wiki.fhem.de/wiki/Color (https://wiki.fhem.de/wiki/Color)) einbauen.
Hallo KernSani
wie sieht dann die Definition deiner Lampe aus.
habe meine Lampe so definiert:
defmod 0x00158d0003248906 XiaomiMQTTDevice 404000/404005/404012 0x00158d0003248906
attr 0x00158d0003248906 IODev mqtt
attr 0x00158d0003248906 devStateIcon {return ".*:light_light_dim_100@#".ReadingsVal($name,"color","FFFFF").":toggle"}
attr 0x00158d0003248906 rgb rgb
attr 0x00158d0003248906 room XiaomiMQTTDevice
attr 0x00158d0003248906 stateFormat state
attr 0x00158d0003248906 userReadings color {cieToRgb(ReadingsVal($name,"color-x",0),ReadingsVal($name,"color-y",0),ReadingsVal($name,"brightness",254))}
attr 0x00158d0003248906 webCmd toggle:on:off:brightness:color:color_temp
attr 0x00158d0003248906 widgetOverride brightness:colorpicker,BRI,0,15,255 color:colorpicker,RGB color_temp:colorpicker,CT,250,1,454
Gruß rippi
Zitat von: justme1968 am 01 Februar 2019, 09:24:14
magst du mal probieren ob es auch mit xyYtorgb aus 31_HUEDevice und den dort verwendet farbraum eckdaten einigermaßen passt?
dann würde ich es zentral in Color.pm (https://wiki.fhem.de/wiki/Color (https://wiki.fhem.de/wiki/Color)) einbauen.
Hmm, die Logik ist die selbe, aber die Faktoren sind unterschiedlich. Zudem macht zigbee2mqtt noch eine "Gamma-Korrektur", die mein geklautes Coding wieder rückgängig macht... Passt also nicht ganz :-(
Zitat von: rippi46 am 01 Februar 2019, 09:46:32
Hallo KernSani
wie sieht dann die Definition deiner Lampe aus.
habe meine Lampe so definiert:
defmod 0x00158d0003248906 XiaomiMQTTDevice 404000/404005/404012 0x00158d0003248906
attr 0x00158d0003248906 IODev mqtt
attr 0x00158d0003248906 devStateIcon {return ".*:light_light_dim_100@#".ReadingsVal($name,"color","FFFFF").":toggle"}
attr 0x00158d0003248906 rgb rgb
attr 0x00158d0003248906 room XiaomiMQTTDevice
attr 0x00158d0003248906 stateFormat state
attr 0x00158d0003248906 userReadings color {cieToRgb(ReadingsVal($name,"color-x",0),ReadingsVal($name,"color-y",0),ReadingsVal($name,"brightness",254))}
attr 0x00158d0003248906 webCmd toggle:on:off:brightness:color:color_temp
attr 0x00158d0003248906 widgetOverride brightness:colorpicker,BRI,0,15,255 color:colorpicker,RGB color_temp:colorpicker,CT,250,1,454
Gruß rippi
Meine sind Aldi TINT GU10s basierend auf AttrTemplate zigbee_colorbulb:
defmod EG_WoZi_Led11_Licht MQTT2_DEVICE zigbee_0xd0cf5efffe411115
attr EG_WoZi_Led11_Licht userattr floor floor_map room_map structexclude
attr EG_WoZi_Led11_Licht IODev MQTT2_FHEM_Server
attr EG_WoZi_Led11_Licht devStateIcon {return ".*:light_light_dim_100@#".ReadingsVal($name,"color","FFFFF").":toggle"}
attr EG_WoZi_Led11_Licht icon light_control
attr EG_WoZi_Led11_Licht model L_02b_zigbee2mqtt_colorbulb
attr EG_WoZi_Led11_Licht readingList zigbee2mqtt/0xd0cf5efffe411115:.* { json2nameValue($EVENT) }
attr EG_WoZi_Led11_Licht room Devices->MQTT
attr EG_WoZi_Led11_Licht setList on:noArg zigbee2mqtt/0xd0cf5efffe411115/set {"state":"on"}\
off:noArg zigbee2mqtt/0xd0cf5efffe411115/set {"state":"off"}\
brightness:colorpicker,BRI,0,15,255 zigbee2mqtt/0xd0cf5efffe411115/set {"state":"on","$EVTPART0":"$EVTPART1"}\
color_temp:colorpicker,CT,250,1,454 zigbee2mqtt/0xd0cf5efffe411115/set {"$EVTPART0":"$EVTPART1"}\
color:colorpicker,RGB {"zigbee2mqtt/0xd0cf5efffe411115/set ".zigbee2mqtt_RGB2JSON($EVTPART1)}\
preset1:noArg zigbee2mqtt/0xd0cf5efffe411115/set {"state":"on","color_temp":"310","brightness":"254"}
attr EG_WoZi_Led11_Licht stateFormat {lc ReadingsVal("$name","state",0)}
attr EG_WoZi_Led11_Licht structexclude .*:.*
attr EG_WoZi_Led11_Licht userReadings color {cieToRgb(ReadingsVal($name,"color_x",0),ReadingsVal($name,"color_y",0),ReadingsVal($name,"brightness",254))}
attr EG_WoZi_Led11_Licht webCmd toggle:on:off:brightness:color_temp:color
Wieso fragst du? Funktioniert es bei dir nicht korrekt? Hast du die entsprechenden readings?
hast du mal das ergebnis verglichen oder nur die faktoren angeschaut?
so wirklich genau ist es ohne die exakten daten des jeweiligen lampe sowieso nicht.
philips veröffentlich sogar zwei sätze parameter. je nach farbunfang der leuchtmittel. leider funktioniert aber deren veröffentlichte formeln überhaupt nicht.
Zitat von: justme1968 am 01 Februar 2019, 11:26:47
hast du mal das ergebnis verglichen oder nur die faktoren angeschaut?
so wirklich genau ist es ohne die exakten daten des jeweiligen lampe sowieso nicht.
philips veröffentlich sogar zwei sätze parameter. je nach farbunfang der leuchtmittel. leider funktioniert aber deren veröffentlichte formeln überhaupt nicht.
Ich habe nur Coding verglichen... Ich versuche heute abend mal mit der sub aus dm HUE_DEVICE
Zitat von: KernSani am 01 Februar 2019, 11:28:37
Ich habe nur Coding verglichen... Ich versuche heute abend mal mit der sub aus dm HUE_DEVICE
Hab's doch schnell gemacht... Teils mssive Abweichungen, vor allem bei der Helligkeit. Welchen Wertebereich hat Y (dritter Parameter) bei dir?
0-1
Zitat von: justme1968 am 01 Februar 2019, 11:46:11
0-1
Arg... hatte einen Typo im sprintf um in Hex zu wandeln, daher hat's nicht gepasst... Näherungsweise passt die HUE_DEVICE-Konvertierung. Schön fände ich eine xyYtoHex in der Color.pm :)
ab morgen gibt es Color::xyY2rgb und Color::xyY2hex
@KernSani meine readings waren color-x bzw color-y anstatt color_x und color_y und hatte dadurch "Division by null"
@Andre: Hab's mir gerade mal aus dem SVN gezogen, zwei Dinge:
1.) In Zeile 389 sollte my $f = main::maxNum($X,$Y,$Z);
stehen
2.) Irgendwie hopst mein Colorpicker jetzt doch ziemlich durch die Gegend... Hast du noch irgendwas anderes verändert? (Ich kann nichts finden)
Grüße,
Oli
1. habs repariert.
2. nein. jedenfalls nicht absichtlich.
Hallo!
Ich habe mich an eure Anleitung aus diesem Eintrag einigermaßen gehalten! Ich hatte einen kleinen Erfolg da meine IKEA LED jetzt anstelle von Weiss Blau violett leuchtet! dimmen geht nicht mehr bzw wenn ich auf 10 dumme leuchtet sie schwach blau und wenn ich auf 255 hoch dumme auch so schwach blau!
ein List meiner LED!
Internals:
DEF LED1624G9 0xccccccfffe9e80a9 Stehlampe2_oben
FRIENDLYNAME Stehlampe2_oben
FUUID 5ddbc299-f33f-f967-6c44-638a88f94be09d37
IODev Mosquitto
MODEL LED1624G9
NAME Stehlampe2_oben
NOTIFYDEV LED1624G9 0xccccccfffe9e80a9 Stehlampe2_oben
NR 241
SID 0xccccccfffe9e80a9
STATE ON
TYPE XiaomiMQTTDevice
READINGS:
2019-11-28 22:41:55 brightness 135
2019-11-28 22:41:55 color E1B669
2019-11-28 21:49:27 color-x 0.458
2019-11-28 21:49:27 color-y 0.41
2019-11-28 22:41:55 color_mode 1
2019-11-28 22:41:55 device-datecode unknown
2019-11-28 22:41:55 device-friendlyname Stehlampe2_oben
2019-11-28 22:41:55 device-hwversion unknown
2019-11-28 22:41:55 device-ieeeaddr 0xccccccfffe9e80a9
2019-11-28 22:41:55 device-manufid 4476
2019-11-28 22:41:55 device-manufname IKEA of Sweden
2019-11-28 22:41:55 device-modelid TRADFRI bulb E27 CWS opal 600lm
2019-11-28 22:41:55 device-nwkaddr 28472
2019-11-28 22:41:55 device-powersource Mains (single phase)
2019-11-28 22:41:55 device-status offline
2019-11-28 22:41:55 device-swbuildid unknown
2019-11-28 22:41:55 device-type Router
2019-11-28 22:41:55 linkquality 26
2019-11-28 22:41:55 state ON
2019-11-28 22:41:55 transmission-state incoming publish received
message_ids:
subscribe:
zigbee2mqtt/Stehlampe2_oben
xiaomi/0xccccccfffe9e80a9/#
subscribeExpr:
^zigbee2mqtt\/Stehlampe2_oben$
^xiaomi\/0xccccccfffe9e80a9.*$
subscribeQos:
xiaomi/0xccccccfffe9e80a9/# 0
zigbee2mqtt/Stehlampe2_oben 0
Attributes:
IODev Mosquitto
devStateIcon {return ".*:light_light_dim_100@#".ReadingsVal($name,"color","FFFFF").":toggle"}
room XiaomiMQTTDevice
stateFormat state
userReadings color {cieToRgb(ReadingsVal($name,"color-x",0),ReadingsVal($name,"color-y",0),ReadingsVal($name,"brightness",254))}
webCmd toggle:on:off:brightness:color:color_temp
widgetOverride brightness:colorpicker,BRI,0,1,255 color:colorpicker,RGB color_temp:colorpicker,CT,250,1,454
ich habe das 99_myutilities 1 zu 1 übernommen!
was könnte der Fehler sein? bzw wie komm ich zur Lösung das ich alle färben meiner LED heraus hohlen kann?
danke in Vorraus!
Hallo,
Ich habe meine Hue Bulb genau wie beschrieben definiert, aber beim Colorpicker bekomme ich nur Blau, egal was ich darin auswähle.
Woran könnte das liegen?
Internals:
CFGFN
DEF 9290012573A 0x0017880100b29eea HueLampZigBee
FRIENDLYNAME HueLampZigBee
FUUID 5e1f0487-f33f-b82c-9d30-2409572a3decf94a
IODev mqtt
MODEL 9290012573A
NAME HueLampZigBee
NOTIFYDEV 9290012573A 0x0017880100b29eea HueLampZigBee
NR 18788
SID 0x0017880100b29eea
STATE ON
TYPE XiaomiMQTTDevice
READINGS:
2020-01-15 13:44:01 brightness 255
2020-01-15 13:44:01 color FFBB52
2020-01-15 13:43:54 color-x 0.505624025055233
2020-01-15 13:43:54 color-y 0.415207746862562
2020-01-15 13:43:54 color_temp 454
2020-01-15 13:44:01 state ON
2020-01-15 13:44:01 transmission-state incoming publish received
message_ids:
subscribe:
zigbee2mqtt/HueLampZigBee
xiaomi/0x0017880100b29eea/#
subscribeExpr:
^zigbee2mqtt\/HueLampZigBee$
^xiaomi\/0x0017880100b29eea.*$
subscribeQos:
xiaomi/0x0017880100b29eea/# 0
zigbee2mqtt/HueLampZigBee 0
Attributes:
IODev mqtt
devStateIcon {return ".*:light_light_dim_100@#".ReadingsVal($name,"color","FFFFF").":toggle"}
room XiaomiMQTTDevice
stateFormat state
userReadings color {cieToRgb(ReadingsVal($name,"color-x",0),ReadingsVal($name,"color-y",0),ReadingsVal($name,"brightness",254))}
webCmd toggle:on:off:brightness:color:color_temp
widgetOverride brightness:colorpicker,BRI,0,15,255 color:colorpicker,RGB color_temp:colorpicker,CT,250,1,454
Mfg Steffen
Hey dank euch für die Mühe, das hat mich jetzt echt weiter gebracht.
Habe auch eine GL-C-008 und hab das Ding echt schon verflucht. Habe ihn aber jetzt am laufen per MQTT_Server über eine cc2531.
Hab ihn auch mit attrTemplate zigbee2mqtt_light_rgbcct_rgb und zigbee2mqtt_light_rgbcct_hex probiert und es funktionieren bei mir beiden module.
Soweit so gut.
Jetzt habe ich nur noch ein Problem mit dem Homebridgemapping und zwar würde ich es gerne über Homebridge per iPhone Steuern.
Vom der Homebridge bekomme ich Werte für ON/OFF brightness und color_temp das funktioniert auch. Problem ist eigentlich nur die Farbe.
Die Farbe kommt aus der Homebridge als Wert in "Hue" der GL-C-008 hätte aber gerne den Farbwert als im Format hex. Jetzt habe ich schon mit dem Colormodul rumgerechnet aber ich komme nicht weiter.
Habe auch schon ein Dummy angelegt, welches von der Homebridge beschrieben wird, dann von Hue in hex umgerechnet und versucht es auf das Device zu schieben, jedoch ohne Erfolg.
Komisch ist auch das ich als Reading den Farbwert in color_x und color_y vom GL-C-008 zurückbekomme.
Also habe ich eine Wert in HUE muss ihn in HEX schicken und bekomme ihn als COLOR_XY zurück.
defmod MQTT2_zigbee_0x00124b001f7a9af3 MQTT2_DEVICE zigbee_0x00124b001f7a9af3
attr MQTT2_zigbee_0x00124b001f7a9af3 IODev MQTT2_SERVER
attr MQTT2_zigbee_0x00124b001f7a9af3 devStateIcon {zigbee2mqtt_devStateIcon255($name)}
attr MQTT2_zigbee_0x00124b001f7a9af3 genericDeviceType light
attr MQTT2_zigbee_0x00124b001f7a9af3 homebridgeMapping
clear
On=state,valueOn=ON,valueOff=OFF,cmdOn=ON,cmdOff=OFF
Brightness=brightness::brightness,maxValue=100,factor=0.39216,delay=true
Hue=hue,cmd=hue,minStep=10
Saturation=sat,cmd=sat,minStep=10
StatusActive=state,valueOn=opened,valueOff=disconnected
attr MQTT2_zigbee_0x00124b001f7a9af3 model zigbee2mqtt_light_rgbcct_rgb
attr MQTT2_zigbee_0x00124b001f7a9af3 readingList zigbee2mqtt/0x00124b001f7a9af3:.* { json2nameValue($EVENT) }
attr MQTT2_zigbee_0x00124b001f7a9af3 room Homekit,MQTT2_DEVICE
attr MQTT2_zigbee_0x00124b001f7a9af3 setList on:noArg zigbee2mqtt/0x00124b001f7a9af3/set {"state":"ON"}\
off:noArg zigbee2mqtt/0x00124b001f7a9af3/set {"state":"OFF"}\
brightness:colorpicker,BRI,0,5,255 zigbee2mqtt/0x00124b001f7a9af3/set {"state":"on","$EVTPART0":"$EVTPART1"}\
color_temp:colorpicker,CT,154,2,500 zigbee2mqtt/0x00124b001f7a9af3/set {"$EVTPART0":"$EVTPART1"}\
color:colorpicker,RGB {"zigbee2mqtt/0x00124b001f7a9af3/set ".zigbee2mqtt_RGB2JSON($EVTPART1)}
attr MQTT2_zigbee_0x00124b001f7a9af3 stateFormat {lc ReadingsVal($name,"state",0)}
attr MQTT2_zigbee_0x00124b001f7a9af3 webCmd on:off:brightness:color_temp:color
setstate MQTT2_zigbee_0x00124b001f7a9af3 on
setstate MQTT2_zigbee_0x00124b001f7a9af3 2020-04-08 22:47:14 associatedWith MQTT2_GeneralBridge
setstate MQTT2_zigbee_0x00124b001f7a9af3 2020-04-14 20:28:51 brightness 100
setstate MQTT2_zigbee_0x00124b001f7a9af3 2020-04-14 20:28:51 color_temp 2500
setstate MQTT2_zigbee_0x00124b001f7a9af3 2020-04-14 20:28:51 color_x 0.1378
setstate MQTT2_zigbee_0x00124b001f7a9af3 2020-04-14 20:28:51 color_y 0.0788
setstate MQTT2_zigbee_0x00124b001f7a9af3 2020-04-09 00:27:26 hue 120
setstate MQTT2_zigbee_0x00124b001f7a9af3 2020-04-14 20:28:51 state ON
Gibt es eine Lösung dafür? Ich versuche verzweifelt eine Osram AA69697 / Classic A60 RGBW, die via zigbee2mqtt angebunden ist, per homebridgemapping zu steuern.
An/aus, Helligkeit und Farbtemperatur (ColorTemperature) sind kein Problem, bei Farbe (Hue) beiße ich mir die Zähne aus.
Über die FHEM Oberfläche lässt sich die Farbe setzen, in der Home App bekomme ich nicht mal die Farbauswahl angezeigt.
Als Readings habe ich ebenfalls color_x und color_y.
Hier der Teil, der funktioniert:
defmod MQTT2_zigbee_0x8418260000ca3599 MQTT2_DEVICE zigbee_0x8418260000ca3599
attr MQTT2_zigbee_0x8418260000ca3599 IODev myBroker
attr MQTT2_zigbee_0x8418260000ca3599 devStateIcon {zigbee2mqtt_devStateIcon255($name)}
attr MQTT2_zigbee_0x8418260000ca3599 devicetopic zigbee2mqtt/0x8418260000ca3599
attr MQTT2_zigbee_0x8418260000ca3599 genericDeviceType light
attr MQTT2_zigbee_0x8418260000ca3599 homebridgeMapping On=state_,valueOff=off,cmdOff=off,cmdOn=on\
Brightness=brightness::brightness,maxValue=100,factor=0.39216,delay=true\
ColorTemperature=color_temp,minValue=140,maxValue=500,factor=1.0,minStep=1,cmd=color_temp
attr MQTT2_zigbee_0x8418260000ca3599 model zigbee2mqtt_light_rgbcct_hex
attr MQTT2_zigbee_0x8418260000ca3599 readingList $DEVICETOPIC:.* { json2nameValue($EVENT) }\
zigbee2mqtt/0x8418260000ca3599/availability:.* availability
attr MQTT2_zigbee_0x8418260000ca3599 room Homekit,MQTT
attr MQTT2_zigbee_0x8418260000ca3599 setList on:noArg $DEVICETOPIC/set {"state":"ON"}\
off:noArg $DEVICETOPIC/set {"state":"OFF"}\
brightness:colorpicker,BRI,0,5,255 $DEVICETOPIC/set {"state":"on","$EVTPART0":"$EVTPART1"}\
color_temp:colorpicker,CT,140,2,500 $DEVICETOPIC/set {"$EVTPART0":"$EVTPART1"}
attr MQTT2_zigbee_0x8418260000ca3599 stateFormat {lc ReadingsVal($name,"state",0)}
attr MQTT2_zigbee_0x8418260000ca3599 userReadings state_ {if(ReadingsVal("MQTT2_zigbee_0x8418260000ca3599","availability","") eq "offline") {return "off"} elsif(ReadingsVal("MQTT2_zigbee_0x8418260000ca3599","state","") eq "ON") {return "on"} elsif(ReadingsVal("MQTT2_zigbee_0x8418260000ca3599","state","") eq "OFF") {return "off"} elsif(ReadingsVal("MQTT2_zigbee_0x8418260000ca3599","state","") eq "on") {return "on"} elsif(ReadingsVal("MQTT2_zigbee_0x8418260000ca3599","state","") eq "off") {return "off"}}
attr MQTT2_zigbee_0x8418260000ca3599 verbose 0
attr MQTT2_zigbee_0x8418260000ca3599 webCmd toggle:on:off:brightness:color_temp
siehe hier: https://forum.fhem.de/index.php/topic,115677.msg1099510.html#msg1099510 bzw. die lösung hier: https://forum.fhem.de/index.php/topic,70738.msg695300.html#msg695300
Vielen Dank und sorry für das Cross-Posting hier und auf Github!
In der verlinkten Lösung wird die Umrechnung beschrieben, aber wie sieht das homebridgemapping aus?
Wenn ich
Hue=hue,maxValue=360,factor=1.0,minStep=1,cmd=hue
eintrage, erscheint in der Home App nicht einmal die Farbauswahl, sondern der Slider für den Schalter ist rot eingefärbt.
Hättest Du da noch einen Tipp?
Etwa so?
define myhue set MQTT2_zigbee_0x8418260000ca3599_.* hue .* AS {
my $R = (-1.023 * $EVTPART2) + (3*1023);
my $WW = (-0.12775 * $EVTPART2) + (1406.25);
my $RGB = ( 0.25575* $EVTPART2 ) - 767.25 ;
if ($R > 1023) {$R = 1023};
if ($WW > 1023) {$WW = 1023};
if ($RGB > 1023) {$RGB = 1023};
if ($R < 0) {$R = $RGB};
if ($WW < 0) {$WW = 0};
if ($RGB < 0) {$RGB = 0};
$R = int($R);
$WW = int($WW);
$RGB = int($RGB);
fhem("set $EVTPART0 raw $R,$RGB,$RGB,$WW,$WW");
}
Hue=hue,maxValue=360,factor=1.0,minStep=1,cmd=myhue
Ich habe etwas weiter getüftelt und bin jetzt hier:
userReadings hex:color_y.* {Color::xyY2hex(ReadingsVal($name,"color_x",0),ReadingsVal($name,"color_y",0),ReadingsVal($name,"brightness",254))}, @hsv {Color::hex2hsv(ReadingsVal($name,"hex",""))}
homebridgemapping Hue=$hsv[0],maxValue=360,factor=360.0,minStep=1,cmd=hex
Der erste Teil "hex" bildet nun den Hex Farbwert in FHEM ab. Der zweite Teil sollte diesen in einen HSV Wert für Homekit umrechnen. Wenn ich das richtig verstehe, gibt die Funktion hex2hsv ein Array zurück.
1. In den Readings wird immer nur der hsv Wert 1 angezeigt und nicht das ganze Array. Warum?
2. Für das homebridgemapping müsste mir erste Arraywert reichen, der sich zwischen 0 und 1 bewegen sollte. Leider tut sich da aber immer noch nichts.
Wo liegt/liegen der/die Denkfehler?
Zitat von: wires.io am 02 Dezember 2020, 15:00:39
Über die FHEM Oberfläche lässt sich die Farbe setzen, in der Home App bekomme ich nicht mal die Farbauswahl angezeigt.
Neue Erkenntnis: Der "Farbauswahlkreis" wird in der Home App nur angezeigt, wenn im homebridgemapping Saturation gesetzt ist.
Hier der aktuelle Stand, wo die Farbeinstellung nun funktioniert.
Sehr strange: Die Readings color_saturation und color_hue sind erst zur "Laufzeit" aufgetaucht, nachdem ich in der Home App rumgefummelt habe.
defmod MQTT2_zigbee_0x8418260000cae7ab MQTT2_DEVICE zigbee_0x8418260000cae7ab
attr MQTT2_zigbee_0x8418260000cae7ab IODev myBroker
attr MQTT2_zigbee_0x8418260000cae7ab devStateIcon {zigbee2mqtt_devStateIcon255($name)}
attr MQTT2_zigbee_0x8418260000cae7ab devicetopic zigbee2mqtt/0x8418260000cae7ab
attr MQTT2_zigbee_0x8418260000cae7ab genericDeviceType light
attr MQTT2_zigbee_0x8418260000cae7ab homebridgeMapping clear\
On=state_,valueOff=off,cmdOff=off,cmdOn=on\
Brightness=brightness::brightness,maxValue=100,factor=0.39216,delay=true\
ColorTemperature=color_temp,minValue=140,maxValue=500,factor=1.0,minStep=1,cmd=color_temp\
Saturation=saturation::color_saturation\
Hue=hue::color_hue
attr MQTT2_zigbee_0x8418260000cae7ab readingList $DEVICETOPIC:.* { json2nameValue($EVENT) }\
zigbee2mqtt/0x8418260000cae7ab/availability:.* availability
attr MQTT2_zigbee_0x8418260000cae7ab room Homekit,MQTT2_DEVICE
attr MQTT2_zigbee_0x8418260000cae7ab setList on:noArg $DEVICETOPIC/set {"state":"ON"}\
off:noArg $DEVICETOPIC/set {"state":"OFF"}\
brightness:colorpicker,BRI,0,5,255 $DEVICETOPIC/set {"state":"on","$EVTPART0":$EVTPART1}\
color_temp:colorpicker,CT,140,2,500 $DEVICETOPIC/set {"$EVTPART0":$EVTPART1}\
hex:colorpicker,HEX,0,15,255 $DEVICETOPIC/set {"color":{"$EVTPART0":"#$EVTPART1"}}\
hue $DEVICETOPIC/set {"color":{"$EVTPART0":$EVTPART1}}\
saturation $DEVICETOPIC/set {"color":{"$EVTPART0":$EVTPART1}}\
attr MQTT2_zigbee_0x8418260000cae7ab stateFormat {lc ReadingsVal($name,"state",0)}
attr MQTT2_zigbee_0x8418260000cae7ab userReadings state_ {if(ReadingsVal($name,"availability","") eq "offline") {return "off"} elsif(ReadingsVal($name,"state","") eq "ON") {return "on"} elsif(ReadingsVal($name,"state","") eq "OFF") {return "off"} elsif(ReadingsVal($name,"state","") eq "on") {return "on"} elsif(ReadingsVal($name,"state","") eq "off") {return "off"}}, hex:color_y.* {Color::xyY2hex(ReadingsVal($name,"color_x",0),ReadingsVal($name,"color_y",0),ReadingsVal($name,"brightness",254))}, rgb:color_y.* {Color::xyY2rgb(ReadingsVal($name,"color_x",0),ReadingsVal($name,"color_y",0),ReadingsVal($name,"brightness",254))}, hue {my ($hue,$sat,$val) = Color::hex2hsv(ReadingsVal($name,"hex",""));; $hue}, sat {my ($hue,$sat,$val) = Color::hex2hsv(ReadingsVal($name,"hex",""));; $sat}, val {my ($hue,$sat,$val) = Color::hex2hsv(ReadingsVal($name,"hex",""));; $val}
attr MQTT2_zigbee_0x8418260000cae7ab verbose 0
attr MQTT2_zigbee_0x8418260000cae7ab webCmd toggle:on:off:brightness:color_temp:hex
setstate MQTT2_zigbee_0x8418260000cae7ab off
setstate MQTT2_zigbee_0x8418260000cae7ab 2020-12-03 11:15:51 associatedWith MQTT2_zigbee
setstate MQTT2_zigbee_0x8418260000cae7ab 2020-12-03 11:14:57 attrTemplateVersion 20200904
setstate MQTT2_zigbee_0x8418260000cae7ab 2020-12-17 13:03:27 availability online
setstate MQTT2_zigbee_0x8418260000cae7ab 2020-12-17 13:03:49 brightness 254
setstate MQTT2_zigbee_0x8418260000cae7ab 2020-12-17 13:03:49 color_hue 0.6361111111111111
setstate MQTT2_zigbee_0x8418260000cae7ab 2020-12-17 13:03:49 color_saturation 0.6
setstate MQTT2_zigbee_0x8418260000cae7ab 2020-12-17 13:03:49 color_temp 370
setstate MQTT2_zigbee_0x8418260000cae7ab 2020-12-17 13:03:49 color_x 0.3805
setstate MQTT2_zigbee_0x8418260000cae7ab 2020-12-17 13:03:49 color_y 0.3769
setstate MQTT2_zigbee_0x8418260000cae7ab 2020-12-17 13:03:49 hex FFEC9D
setstate MQTT2_zigbee_0x8418260000cae7ab 2020-12-17 13:03:49 hue 0.133333333333333
setstate MQTT2_zigbee_0x8418260000cae7ab 2020-12-17 13:03:49 linkquality 18
setstate MQTT2_zigbee_0x8418260000cae7ab 2020-12-17 13:03:49 rgb 0.617600968190623
setstate MQTT2_zigbee_0x8418260000cae7ab 2020-12-17 13:03:49 sat 0.384313725490196
setstate MQTT2_zigbee_0x8418260000cae7ab 2020-12-17 13:03:49 state OFF
setstate MQTT2_zigbee_0x8418260000cae7ab 2020-12-17 13:03:49 state_ off
setstate MQTT2_zigbee_0x8418260000cae7ab 2020-12-17 13:03:49 update_available false
setstate MQTT2_zigbee_0x8418260000cae7ab 2020-12-17 13:03:49 val 1
Hmm, lese hier schon eine Weile mit und hatte immer den Eindruck, das geht in die falsche Richtung, weil erst mal an dem Homebridgemapping rumgeschraubt wurde und dann noch kompliziert rumgerechnet, aber das sieht jetzt schon besser aus ;) .
Vielleicht grundsätzlich: wenn irgend möglich, sollte man als erstes versuchen, den Hin- und Rückweg für die Dinge passend zu machen, die sowieso schon "da" sind, bevor man rechnet.
Ergo sollte man erst mal dafür sorgen, dass das, was zurückkommt, dann auch "gute" Readingnamen bekommt. Geht hier wohl mit jsonMap, das muss man aber aktivieren:
attr MQTT2_zigbee_0x8418260000cae7ab readingList $DEVICETOPIC:.* { json2nameValue($EVENT,'',$JSONMAP) }\
[...]
attr MQTT2_zigbee_0x8418260000cae7ab jsonMap color_hue:hue color_saturation:saturation
Kann natürlich sein, dass dann die Wertebereiche nicht passen, da wäre dann aber die Frage, auf welcher Seite man es fixt. M.E. einfacher ist die Sendeseite bzw. dann nur das HomebridgeMapping.
In der setList könnte man dann auch passende widgets hinterlegen.
Ob dann der hex-Setter noch Sinn macht, wäre die Frage?
Auf userReadings "state_" müßte man eigentlich verzichten können, es sollte möglich sein, "state" zu setzen und das auf "availability:.offline" zu triggern?
Falls die Voraussetzungen etwas "entschlackt" werden können (mAW.: es ohne Anpassung der Color.pm geht), kann ich das (samt homebridgeMapping) gerne dann in attrTemplate für alle verwursteln...
Habe mein Posting oben leicht geändert. Die Farbeinstellung funktioniert dank Anpassung des homebrigdemapping nun. Habe dabei minValue, maxValue und factor rausgenommen. Ich schaue mir Deine Vorschläge an und optimiere / entschlacke.
Habe nun anhand einer anderen LED etwas entschlackt.
Das hier habe ich noch nicht umgesetzt:
Zitat von: Beta-User am 17 Dezember 2020, 13:42:51
Auf userReadings "state_" müßte man eigentlich verzichten können, es sollte möglich sein, "state" zu setzen und das auf "availability:.offline" zu triggern?
Der state soll ja nicht nur von der availability abhängen, sondern auch davon, ob per Home App ein- bzw. ausgeschaltet wird. availability soll nur greifen, wenn per Wandschalter physikalisch ausgeschaltet wird. Deshalb der Umweg über die userReadings. Geht das eleganter?
Schon über einen userReadings-Eintrag, aber eben _direkt nach "state"_ (mit sehr eingeschränktem trigger; das ganze darf nur reagieren, wenn das "ofline" kommt).