Hallo!
Ich habe mir mehrere IKEA Lampen (LED2101G4 mit einstellbarem Weißton) gekauft.
Ich nutze Zigbee2MQTT und habe mir dort eine Gruppe eingerichtet.
Mein FHEM-Device sieht so aus:
defmod MQTT2_zigbee_Wohnzimmerlampen MQTT2_DEVICE zigbee_Wohnzimmerlampen
attr MQTT2_zigbee_Wohnzimmerlampen IODev MQTT2_FHEM_Server
attr MQTT2_zigbee_Wohnzimmerlampen alexaName Wohnzimmerlampe
attr MQTT2_zigbee_Wohnzimmerlampen devStateIcon {zigbee2mqtt_devStateIcon255($name)}
attr MQTT2_zigbee_Wohnzimmerlampen devicetopic zigbee2mqtt/Wohnzimmerlampen
attr MQTT2_zigbee_Wohnzimmerlampen homebridgeMapping clear\
On=onoff.valueOn=on,valueOff=off,cmdOn=on,cmdOff=off\
Brightness=brightness::brightness,maxValue=100,max=100,factor=0.39371,delay=true\
ColorTemperature=color_temp,cmd=color_temp
attr MQTT2_zigbee_Wohnzimmerlampen icon light_control
attr MQTT2_zigbee_Wohnzimmerlampen model zigbee2mqtt_light_dimmer
attr MQTT2_zigbee_Wohnzimmerlampen readingList $DEVICETOPIC:.* { my $ret=json2nameValue($EVENT);; $ret->{state}=lc($ret->{state}) if defined $ret->{state};; return $ret }\
zigbee2mqtt/Wohnzimmerlampen/availability:.* { json2nameValue($EVENT) }
attr MQTT2_zigbee_Wohnzimmerlampen room MQTT2_DEVICE
attr MQTT2_zigbee_Wohnzimmerlampen 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,250,2,454 $DEVICETOPIC/set {"state":"on","$EVTPART0":"$EVTPART1"}
attr MQTT2_zigbee_Wohnzimmerlampen setStateList on off
attr MQTT2_zigbee_Wohnzimmerlampen webCmd toggle:on:off:brightness:color_temp
setstate MQTT2_zigbee_Wohnzimmerlampen off
setstate MQTT2_zigbee_Wohnzimmerlampen 2023-08-19 08:13:06 IODev MQTT2_FHEM_Server
setstate MQTT2_zigbee_Wohnzimmerlampen 2023-08-13 12:47:23 associatedWith MQTT2_zigbee_pi
setstate MQTT2_zigbee_Wohnzimmerlampen 2023-08-13 12:30:32 attrTemplateVersion 20221201
setstate MQTT2_zigbee_Wohnzimmerlampen 2023-08-19 14:39:18 brightness 30
setstate MQTT2_zigbee_Wohnzimmerlampen 2023-08-19 14:39:18 color_mode color_temp
setstate MQTT2_zigbee_Wohnzimmerlampen 2023-08-19 14:39:18 color_temp 370
setstate MQTT2_zigbee_Wohnzimmerlampen 2023-08-19 14:39:18 state off
Aus FHEM heraus kann ich nun auch die Gruppe problemlos steuern.
In Alexa funktioniert nur durch das homebridgeMapping das Schalten und die Helligkeit.
Nur Alexa mag noch nicht so ganz bei der Farbe mitspielen. Wenn ich einen Wert setze, werden mir die Farbtemperaturen in Kelvin in das Reading geschrieben.
Es werden mir die folgenden Stufen angezeigt (Wert in Kelvin)((Wert in Mired)):
| Kelvin | Mired |
Warmes Weiß | 2200 | 454,54 |
Warmweiß | 2700 | 370 |
Weiß | 4000 | 250 |
Tageslichtweiß | 5500 | 181,8 |
Kaltweiß | 7000 | 142,85 |
Ich habe jedoch nur die Möglichkeit die Farbtemperatur in einer Skala von 250-454 zu ändern.
Ich habe das Gefühl, das hier auch ein Bug in Z2M vorliegt, da ich dort die unterste und oberste Stufe nicht auswählen kann. Nur mit dem slider dort funktioniert es.
Die werte sollten eigentlich "Mired" sein. Aber das passt von den Werten hier nicht.
Hat jemand eine Idee, wie ich das Mappen könnte? Hatte schon überlegt, ob ich ein Userreading verwende. Da könnte ich mir feste Werte setzen. Jedoch klappt das nur in eine Richtung. Sonst baue ich ja eine "Dauerschleife".
Gruß
Bismosa
Hast du schon mal versucht, auch für color_temp min und max-Werte vorzugeben?
Kenne Alexa nicht, aber die Logik insbesondere bei RHASSPY analysiert für Farben und CT-Umrechnungen genau die Infos, die in FHEM für min- und max-Werte aus dem setter ableitbar sind, und da klappt das...
Hallo!
Ja, das habe ich auch schon versucht. Vielleicht klappt es ja nicht, da es andere Farbtemperaturen sind als bei Alexa angegeben?
Gruß
Bismosa
Hallo!
Kleine korrektur zu meiner Aussage oben:
Mit dem Mapping:
ColorTemperature=color_temp,cmd=color_temp,maxValue=454,minValue=250,min=250,max=454,factor=1,delay=true
Gehen zumindest 3 Farben...bei den anderen bleibt es dann auf minValue.
Ich habe es jetzt ein wenig anders (vorerst) gelöst...vielleicht gibt es ja noch eine bessere Variante?
Bei dem Lampen-device:
setList um "alexa_ct" erweitert:
attr MQTT2_zigbee_Wohnzimmerlampen 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,250,2,454 $DEVICETOPIC/set {"state":"on","$EVTPART0":"$EVTPART1"}\
alexa_ct:colorpicker,CT,2200,2,7000 $DEVICETOPIC/set {"state":"on","$EVTPART0":"$EVTPART1"}
homebridgeMapping angepasst:
attr MQTT2_zigbee_Wohnzimmerlampen homebridgeMapping clear\
On=onoff.valueOn=on,valueOff=off,cmdOn=on,cmdOff=off\
Brightness=brightness::brightness,maxValue=100,max=100,factor=0.39371,delay=true\
ColorTemperature=alexa_ct::alexa_ct,cmd=alexa_ct
Und dann noch ein DOIF für die Logik:
defmod di_Alexa_MQTT2_zigbee_Wohnzimmerlampen DOIF AlexaToCT{\
##Berechnung:\
##Wertebereich: 250-454;; Alexa: 2200-7000K;; 7000K=250 | 2200K=454\
##Wert = Wert_bei_2200K + (Wert_bei_7000K - Wert_bei_2200K) * (T - 2200K) / (7000K - 2200K)\
##7000K: Wert = 454 + (250 - 454) * (7000 - 2200) / (7000 - 2200) = 250\
##5500K: Wert = 454 + (250 - 454) * (5500 - 2200) / (7000 - 2200) ≈ 323.75\
##4000K: Wert = 454 + (250 - 454) * (4000 - 2200) / (7000 - 2200) ≈ 397.5\
##2700K: Wert = 454 + (250 - 454) * (2700 - 2200) / (7000 - 2200) ≈ 435\
##2200K: Diesen Wert kennen wir bereits als 454.\
\
my $setValue = [MQTT2_zigbee_Wohnzimmerlampen:alexa_ct];;\
if ($setValue =~ /^\Qset alexa_ct\E/){\
(my $Value = $setValue) =~ s/set alexa_ct //g;;\
my $Newvalue = 454 + (250 - 454) * ($Value - 2200) / (7000 - 2200);;\
my $NewvalueInt = int($Newvalue);;\
set_Reading("lastCT",$NewvalueInt,1);; \
fhem_set("MQTT2_zigbee_Wohnzimmerlampen color_temp $NewvalueInt");;\
fhem("setreading MQTT2_zigbee_Wohnzimmerlampen alexa_ct $Value");;\
}\
}\
CTToAlexa{\
##Farbtemperatur (T) = 2200K + (Wert - Wert_bei_2200K) * (7000K - 2200K) / (Wert_bei_7000K - Wert_bei_2200K)\
\
my $setValue = [MQTT2_zigbee_Wohnzimmerlampen:color_temp];;\
if ($setValue =~ /^\Qset color_temp\E/){\
(my $Value = $setValue) =~ s/set color_temp //g;;\
if ($Value == get_Reading("lastCT")){\
set_Reading("CTToalexa","$Value same",1);; \
return;;\
}\
my $Newvalue = 2200 + ($Value - 454) * (7000 - 2200) / (250 - 454);;\
my $NewvalueInt = int($Newvalue);;\
set_Reading("CTToalexa","$NewvalueInt",1);;\
fhem("setreading MQTT2_zigbee_Wohnzimmerlampen alexa_ct $NewvalueInt");;\
\
}\
\
}\
So richtig schön finde ich die Lösung noch nicht. Müsste ich ja für jede einzelne Lampe machen, bei der ich ein Farbwechsel mit Alexa machen möchte.
Gruß
Bismosa