Hallo zusammen,
ich möchte via Alexa FHEM Connector eine zigbee-Lightify-RGBW-Leuchte steuern (Helligkeit UND Farbe).
Die Leuchte ist per MQTT und zigbee2mqtt angebunden.
Es funktioniert soweit, allerdings habe ich das Problem, dass ich
- entweder die Helligkeit korrekt steuern kann (setList pct:slider,1,1,255)
- oder die Farbe, dann lässt sich aber die Helligkeit nicht mehr verändern (setList pct:slider,1,1,255 RGB:colorpicker,RGB)
Ich habe einen Dummy zwischengeschaltet, von welchem die Sprachbefehle dann per DOIF auf die Leuchte übertragen werden.
Am Dummy kann man beobachten, was passiert.
- Alexa, stelle Licht Couch auf rot:
-> Alexa Licht Couch state RGB 0000ff
- Alexa, stelle Licht Couch auf 50 Prozent:
-> Alexa Licht Couch state RGB 000080
Das Prolem ist, dass als state nicht "pct 50" zurückgemeldet wird, sondern ein anderer RGB-Wert.
Auf dem ColorPicker kann man sehen, dass der ColorTone-Regler bei diesem Befehl in die Mitte wandert. Die 50% werden also schon irgendwie verarbeitet, nur nicht so, wie ich es für das zigbee2mqtt-Leuchtmittel bräuchte.
Wenn ich setList pct:slider,1,1,255 einstelle, erhält der Dummy als state in obigem Beispiel "pct 50", was dann vom Leuchtmittel korrekt umgesetzt wird.
Ein weiteres Problem:
zigbee2mqtt erwartet für brightness Werte zwischen 1-255; per Sprache kann ich aber nur 1-100 sagen.
Bei Werten >100 erhalte ich die Meldung, dass dieser Wert nicht zulässig ist.
Ich bräuchte also irgendeine Möglichkeit, den übergebenen pct-Wert *2,55 zu mulitplizieren, damit die brightness korrekt umgesetzt wird.
Meine Frage ist nun, wie ich den Alexa-Dummy korrekt mit attr versorgen muss, damit ich sowohl die Farbe als auch die Helligkeit per Sprache steuern kann
Dies ist der Alexa FHEM Connector-Dummy:
list AlexaLichtCouch
Internals:
FUUID 5e077140-f33f-2a61-c7e9-077df894d5d127e1
NAME AlexaLichtCouch
NR 3990
STATE off
TYPE dummy
READINGS:
2021-03-17 13:47:01 state off
Attributes:
alexaName Licht Couch
group Alexa
room Homematic
setList pct:slider,1,1,255 RGB:colorpicker,RGB
sortby 2100
webCmd toggle:on:off:pct:RGB
Für das zigbee2mqtt-Leuchtmittel habe ich als Template eingestellt: zigbee2mqtt_light_rgbcct_rgb
Die setListe des Templates habe ich um folgende Zeilen ergänzt, damit der von Alexa zurückgegebene state RGB 0000ff überhaupt umgesetzt werden kann.
RGB:colorpicker,RGB {"$DEVICETOPIC/set ".zigbee2mqtt_RGB2JSON($EVTPART1)}
pct:colorpicker,BRI,0,1,100 $DEVICETOPIC/set {"state":"on","brightness":"$EVTPART1"}
list MQTT2_zigbee_Lightify_Wohnkugel_01:
Internals:
CFGFN
CID zigbee_Lightify_Wohnkugel_01
DEF zigbee_Lightify_Wohnkugel_01
DEVICETOPIC zigbee2mqtt/Lightify_Wohnkugel_01
FUUID 6050b718-f33f-2a61-9cff-fbbf8091b48503fb
IODev mqtt2serverfhem
LASTInputDev mqtt2serverfhem
MSGCNT 357
NAME MQTT2_zigbee_Lightify_Wohnkugel_01
NR 43676
STATE on
TYPE MQTT2_DEVICE
mqtt2serverfhem_MSGCNT 357
mqtt2serverfhem_TIME 2021-03-17 17:16:59
READINGS:
2021-03-16 14:48:09 associatedWith MQTT2_zigbee_pi
2021-03-17 12:59:31 attrTemplateVersion 20200904
2021-03-17 17:16:59 brightness 230
2021-03-17 17:16:59 color_temp 129
2021-03-17 17:16:59 color_x 0.1355
2021-03-17 17:16:59 color_y 0.0399
2021-03-17 17:16:59 hex 0204F9
2021-03-17 17:16:59 linkquality 15
2021-03-17 17:16:59 state ON
2021-03-17 17:16:59 update_available false
2021-03-17 17:16:59 update_state idle
Attributes:
IODev mqtt2serverfhem
devStateIcon {zigbee2mqtt_devStateIcon255($name)}
devicetopic zigbee2mqtt/Lightify_Wohnkugel_01
homebridgeMapping Brightness=brightness::brightness,maxValue=100,factor=0.39216,delay=true
icon hue_filled_white_and_color_e27_b22
model zigbee2mqtt_light_rgbcct_rgb
readingList $DEVICETOPIC:.* { json2nameValue($EVENT) }
room MQTT2_DEVICE
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,154,2,500 $DEVICETOPIC/set {"$EVTPART0":"$EVTPART1"}
color:colorpicker,RGB {"$DEVICETOPIC/set ".zigbee2mqtt_RGB2JSON($EVTPART1)}
RGB:colorpicker,RGB {"$DEVICETOPIC/set ".zigbee2mqtt_RGB2JSON($EVTPART1)}
pct:colorpicker,BRI,0,1,100 $DEVICETOPIC/set {"state":"on","brightness":"$EVTPART1"}
stateFormat {lc ReadingsVal($name,"state",0)}
userReadings hex:color_y.* {Color::xyY2hex(ReadingsVal($name,"color_x",0),ReadingsVal($name,"color_y",0),ReadingsVal($name,"brightness",254))}
webCmd toggle:on:off:brightness:color_temp:color
Dieses DOIF überträgt die Werte des Dummys auf das eigentliche Leuchtmittel (wobei das ja ganz einfach gestrickt ist)
list di_AlexaLichtCouch:
([AlexaLichtCouch:"on"])
##cmd_1
(IF ([AlexaLichtCouch_ChkBox] eq "on") (set MQTT2_zigbee_Lightify_Wohnkugel_01 on))
DOELSEIF ([AlexaLichtCouch:"off"])
##cmd_2
(IF ([AlexaLichtCouch_ChkBox] eq "on") (set MQTT2_zigbee_Lightify_Wohnkugel_01 off))
DOELSEIF ([AlexaLichtCouch] ne "on" and [?AlexaLichtCouch] ne "off")
##cmd_3
(IF ([AlexaLichtCouch_ChkBox] eq "on") (set MQTT2_zigbee_Lightify_Wohnkugel_01 [AlexaLichtCouch]))
DOELSE ()
##cmd_4
Vielen Dank für eure Hilfe,
viele Grüße,
Heiko
man kann sich das leben deutlich einfacher machen wenn man nicht versucht alles mögliche in state zu quetschen sonder eigene readings verwendet. dasfür gibt es im dummy readlingList. eigene und richtig benannte readings machen auch die alexa konfiguration einfacher oder sogar überflüssig.
Ich mache es gern mit readings, wenn ich wüsste, wie.
Aus diesen beiden Dokumenten und deinem Hinweis folgere ich, dass der FHEM Connector die readings auswertet (wusste ich bisher nicht).
https://wiki.fhem.de/wiki/FHEM_Connector_f%C3%BCr_Amazon_Alexa
https://wiki.fhem.de/wiki/Alexa_und_Mappings
Zur Vereinfachung habe ich den Zwischenschritt über den Dummy jetzt mal rausgenommen und direkt die attr des zigbee2MQTT-Devices auf
alexaName = Licht Couch
genericDeviceType = light
gesetzt.
(gespeichert, AlexaFhem neu gestartet, Gerätesuche durchgeführt)
Mit diesen Einstellungen kann ich aber wieder nur die Helligkeit regeln.
"Alexa, stelle Licht Couch auf blau" --> "Licht Couch unterstützt das nicht"
Liegt es vielleicht daran, dass die Readings von zigbee2mqtt color_x & color_y sind statt nur color?
Ich habe einfach das Template für das zigbee-Device verwendet, das fhem mir anbietet.
list MQTT2_zigbee_Lightify_Wohnkugel_01
Internals:
CFGFN
CID zigbee_Lightify_Wohnkugel_01
DEF zigbee_Lightify_Wohnkugel_01
DEVICETOPIC zigbee2mqtt/Lightify_Wohnkugel_01
FUUID 6050b718-f33f-2a61-9cff-fbbf8091b48503fb
IODev mqtt2serverfhem
LASTInputDev mqtt2serverfhem
MSGCNT 701
NAME MQTT2_zigbee_Lightify_Wohnkugel_01
NR 43676
STATE on
TYPE MQTT2_DEVICE
mqtt2serverfhem_MSGCNT 701
mqtt2serverfhem_TIME 2021-03-19 11:51:50
READINGS:
2021-03-16 14:48:09 associatedWith MQTT2_zigbee_pi
2021-03-17 12:59:31 attrTemplateVersion 20200904
2021-03-19 11:51:50 brightness 254
2021-03-19 11:51:50 color_temp 37
2021-03-19 11:51:50 color_x 0.7006
2021-03-19 11:51:50 color_y 0.2993
2021-03-19 11:51:50 hex F01202
2021-03-19 11:51:50 linkquality 76
2021-03-19 11:51:50 state ON
2021-03-19 11:51:50 update_available false
2021-03-19 11:51:50 update_state idle
Attributes:
IODev mqtt2serverfhem
alexaName Licht Couch
devStateIcon {zigbee2mqtt_devStateIcon255($name)}
devicetopic zigbee2mqtt/Lightify_Wohnkugel_01
genericDeviceType light
homebridgeMapping Brightness=brightness::brightness,maxValue=100,factor=0.39216,delay=true
icon hue_filled_white_and_color_e27_b22
model zigbee2mqtt_light_rgbcct_rgb
readingList $DEVICETOPIC:.* { json2nameValue($EVENT) }
room MQTT2_DEVICE
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,154,2,500 $DEVICETOPIC/set {"$EVTPART0":"$EVTPART1"}
color:colorpicker,RGB {"$DEVICETOPIC/set ".zigbee2mqtt_RGB2JSON($EVTPART1)}
stateFormat {lc ReadingsVal($name,"state",0)}
userReadings hex:color_y.* {Color::xyY2hex(ReadingsVal($name,"color_x",0),ReadingsVal($name,"color_y",0),ReadingsVal($name,"brightness",254))}
webCmd toggle:on:off:brightness:color_temp:color
Viele Grüße,
Heiko
Der Schlüssel meines Problems wird vermutlich im homebridgeMapping liegen?
Wenn ich dieses wie folgt setze, werden zwar die Farbbefehle angenommen, aber immer noch nicht umgesetzt.
Viel kann nicht mehr fehlen:
attr homebridgeMapping:
Brightness=brightness::brightness,maxValue=100,factor=0.39216,delay=true Hue=rgb,cmd=color
Update:
Bei diesem homebridgeMapping kann ich die Helligkeit steuern, aber nicht die Farbe.
Im Log sehe ich aber, dass eigentlich der korrekte fhem-Befehl erzeugt wird - allerdings wird die Farbe als "hue-Wert" übergeben.
Damit kann man zigbee2mqtt-Device nichts anfangen, und im Wiki steht, dass dies als template noch nicht umgesetzt wurde.
"Alexa, stelle Licht Couch auf rot":
MQTT2_DEVICE set MQTT2_zigbee_Lightify_Wohnkugel_01 color 0
MQTT2_DEVICE set MQTT2_zigbee_Lightify_Wohnkugel_01 brightness 254.99796001631987
"Alexa, stelle Licht Couch auf blau":
MQTT2_DEVICE set MQTT2_zigbee_Lightify_Wohnkugel_01 color 240
MQTT2_DEVICE set MQTT2_zigbee_Lightify_Wohnkugel_01 brightness 254.99796001631987
Was ich jetzt noch bräuchte, wäre eine Umwandlung von Hue in Hex oder RGB.
Im Wiki habe ich gefunden, dass es Umwandlungsfunktionen gibt, z.B. Color::hsv2rgb (hue habe ich nicht gefunden).
Aber an welcher Stelle müsste ich dies einbauen, dass die von Alexa gemeldeten Hue-Werte in RGB übergeben werden?
So funktioniert es jetzt, gemäß https://forum.fhem.de/index.php?topic=117172.30:
defmod huergb cmdalias set [\w\.]+ huergb \d+ AS {fhem "set $EVTPART0 hue ". round($EVTPART2*182.0416,0) .";; set $EVTPART0 color ".Color::hsv2hex($EVTPART2/360, ReadingsVal("$EVTPART0","sat",255)/255, ReadingsVal("$EVTPART0","bri",255)/255)}
attr homebridgeMapping
Brightness=brightness::brightness,maxValue=100,factor=0.39216,delay=true Hue=color,cmd=huergb
Pink wird zwar zu rot, aber das geht aufgrund Umrechnung vermutlich nicht besser.
Moin heiko81,
ich hab gerade das selbe Problem, wie du vor einem Jahr.
Bei mir ist es eine Hue Lampe / Farbe.
Über das Template: zigbee2mqtt_light:_cct
funktioniert die Steuerung über Alexa: Helligkeit & Farbtemperatur super.
Über das Template: zigbee2mqtt_light_rgbcct_rgb
funktioniert die Steuerung über Alexa überhaupt nicht. (Über Fhem/Web ohne Probleme)
Ich habe jetzt mal deine Attribute übernommen:
Jetzt funktioniert die Farbauswahl, On/off und Helligkeit....
aber jetzt geht die Farbtemperatur nicht mehr :o .
Hast du vielleicht noch eine config, wo alles funktioniert?
Meine Momentanen Readings:
IODev
MQTT2_FHEM_Server
2022-02-07 15:44:08
associatedWith
MQTT2_zigbee_bridge
2022-02-05 21:52:15
attrTemplateVersion
20211018
2022-02-07 15:48:44
brightness
127.49898000815993
2022-02-07 16:05:31
color_hue
0
2022-02-07 16:05:31
color_mode
xy
2022-02-07 16:05:31
color_saturation
100
2022-02-07 16:05:31
color_temp
160
2022-02-07 16:05:31
color_x
0.7006
2022-02-07 16:05:31
color_y
0.2993
2022-02-07 16:05:31
ct
454
2022-02-07 15:45:34
hex
F01202
2022-02-07 16:05:31
linkquality
255
2022-02-07 16:05:31
state
ON
2022-02-07 16:05:31
update_available
false
2022-02-07 16:05:31
update_state
idle
Meine momentanen Attribute:
alexaName
Kugel_1
alias
Kugel 1
devStateIcon
{zigbee2mqtt_devStateIcon255($name)}
devicetopic
zigbee2mqtt/Kugel_1
genericDeviceType
light
homebridgeMapping
Brightness=brightness::brightness,maxValue=100,factor=0.39216,delay=true Hue=color,cmd=huergb
icon
hue_filled_white_and_color_e27_b22
jsonMap
color_temp:ct color_temp_startup:ct_startup
model
zigbee2mqtt_light_rgbcct_rgb
readingList
$DEVICETOPIC:.* { json2nameValue($EVENT) }
room
MQTT2_DEVICE
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,154,2,500 $DEVICETOPIC/set {"$EVTPART0":"$EVTPART1"}
color:colorpicker,RGB {"$DEVICETOPIC/set ".zigbee2mqtt_RGB2JSON($EVTPART1)}
stateFormat
{lc ReadingsVal($name,"state",0)}
userReadings
hex:color_y.* {Color::xyY2hex(ReadingsVal($name,"color_x",0),ReadingsVal($name,"color_y",0),ReadingsVal($name,"brightness",254))}
webCmd
toggle:on:off:brightness:color_temp:color
Schöne Grüße aus dem Norden.