Alexa und IKEA Lampe - Farbtemperatur richtig mappen?

Begonnen von bismosa, 19 August 2023, 14:57:11

Vorheriges Thema - Nächstes Thema

bismosa

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)):
KelvinMired
Warmes Weiß2200454,54
Warmweiß2700370
Weiß4000250
Tageslichtweiß5500181,8
Kaltweiß 7000142,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
1x nanoCUL 433MHz (SlowRF Intertechno) für Fenstersensoren
1x nanoCUL 868Mhz für MAX (9x HT 1xWT)
1x ZigBee CUL
Weiteres: Squeezebox server, Kindle Display, ESP8266, Löterfahrung, ...

Beta-User

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...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

bismosa

Hallo!

Ja, das habe ich auch schon versucht. Vielleicht klappt es ja nicht, da es andere Farbtemperaturen sind als bei Alexa angegeben?

Gruß
Bismosa
1x nanoCUL 433MHz (SlowRF Intertechno) für Fenstersensoren
1x nanoCUL 868Mhz für MAX (9x HT 1xWT)
1x ZigBee CUL
Weiteres: Squeezebox server, Kindle Display, ESP8266, Löterfahrung, ...

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=trueGehen 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
1x nanoCUL 433MHz (SlowRF Intertechno) für Fenstersensoren
1x nanoCUL 868Mhz für MAX (9x HT 1xWT)
1x ZigBee CUL
Weiteres: Squeezebox server, Kindle Display, ESP8266, Löterfahrung, ...