Alexa Fhem Connector: Helligkeit UND Farbe eines zigbee2mqtt-Leuchtmittels

Begonnen von heikoh81, 17 März 2021, 17:33:04

Vorheriges Thema - Nächstes Thema

heikoh81

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

justme1968

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.

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

heikoh81

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

heikoh81

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?

heikoh81

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.

bjbrill

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.
Ubuntu-Server, Dect200, Jeelink, Unifi, ESP32, Alexa, Tasmota, zigbee2mqtt, OpenDTU.