IKEA Taster (E1524/E1810) zum Dimmen und Ein-/Ausschalten von LED (Zigbee2MQTT)

Begonnen von Torxgewinde, 10 Februar 2023, 21:43:03

Vorheriges Thema - Nächstes Thema

Torxgewinde

Hallo,
Da die neuste Firmware der IKEA Taster scheinbar in Kombination mit Zigbee2MQTT nur noch bis zu sieben "Bindings" anbietet, ist die Steuerung bei einer größeren Anzahl von Lampen nun alternativ über FHEM zu erledigen. Wenn man da nicht ein wenig optimiert, stottert es erheblich. Was hilft:

In Zigbee2MQTT eine Gruppe erstellen in der die zu steuernden Leuchten sind. Die Gruppe heiße hier einfach "Lampe.NO.Gruppe". Testweise kann man von der Kommandozeile mal alles in der Gruppe einschalten mit dem Befehl:
mosquitto_pub -t "zigbee2mqtt/Lampe.NO.Gruppe/set" -h server.lan -u "Nutzername" -P "passwort123" -m '{"brightness":254,"state":"ON"}'

Dann legt man ein DOIF für die Fernbedienung an:
defmod Taster.NO.1.device MQTT2_DEVICE
attr Taster.NO.1.device IODev Mosquitto
attr Taster.NO.1.device alias Fernbedienung
attr Taster.NO.1.device devicetopic zigbee2mqtt/Taster.NO.1
attr Taster.NO.1.device group Beleuchtung
attr Taster.NO.1.device icon tradfri_remote
attr Taster.NO.1.device readingList $DEVICETOPIC:.* { my $ret=json2nameValue($EVENT);; $ret->{state}=lc($ret->{action}) if (defined($ret->{action}));; return $ret }\
$DEVICETOPIC/availability:.* { { availability=>json2nameValue($EVENT)->{state} } }


Drückt man auf die Fernbedienung, sollte der Status dem Tastendruck entsprechen. Es können die Werte arrow_left_click, arrow_left_hold, arrow_left_release, arrow_right_click, arrow_right_hold, arrow_right_release, brightness_down_click, brightness_down_hold, brightness_down_release, brightness_up_click, brightness_up_hold, brightness_up_release, toggle angenommen werden.

Und mit einem DOIF device kann man dann die Steuerung übernehmen:
defmod NO.Deckenlicht.control DOIF ## State: 1\
([Taster.NO.1.device:"^toggle$"] and (([$SELF:Helligkeit] <= 100 and [$SELF:Helligkeit] >= 20) or ([$SELF:Helligkeit] == 0)) or [Taster.NO.1.device:"^toggle_hold$"])\
(set Mosquitto publish zigbee2mqtt/Lampe.NO.Gruppe/set {"brightness":254,"state":"ON"})\
(setreading $SELF Helligkeit 254)\
\
## State: 2\
DOELSEIF ([Taster.NO.1.device:"^toggle$"] and [$SELF:Helligkeit] >= 100)\
(set Mosquitto publish zigbee2mqtt/Lampe.NO.Gruppe/set {"brightness":5,"state":"ON"})\
(setreading $SELF Helligkeit 5)\
\
## State: 3 \
DOELSEIF ([Taster.NO.1.device:"^toggle$"] and ([$SELF:Helligkeit] < 20) and ([$SELF:Helligkeit] > 0)) \
(set Mosquitto publish zigbee2mqtt/Lampe.NO.Gruppe/set {"brightness":0,"state":"OFF"})\
(setreading $SELF Helligkeit 0)\
\
## State: 4\
DOELSEIF ([Taster.NO.1.device:"^brightness_up_click$"])\
{\
my $val = minNum([$SELF:Helligkeit]+5, 254);;\
fhem("set Mosquitto publish zigbee2mqtt/Lampe.NO.Gruppe/set {\"brightness\":$val,\"state\":\"ON\"}");;\
fhem("setreading $SELF Helligkeit $val");;\
}\
\
## State: 5\
DOELSEIF ([Taster.NO.1.device:"^brightness_up_hold$"])\
{\
my $val = minNum([$SELF:Helligkeit]+30, 254);;\
fhem("set Mosquitto publish zigbee2mqtt/Lampe.NO.Gruppe/set {\"brightness\":$val,\"state\":\"ON\",\"transition\":0.5}");;\
fhem("setreading $SELF Helligkeit $val");;\
}\
\
## State: 6\
DOELSEIF ([Taster.NO.1.device:"^brightness_down_click$"])\
{\
my $val = maxNum([$SELF:Helligkeit]-5, 5);;\
fhem("set Mosquitto publish zigbee2mqtt/Lampe.NO.Gruppe/set {\"brightness\":$val,\"state\":\"ON\"}");;\
fhem("setreading $SELF Helligkeit $val");;\
}\
\
## State: 7\
DOELSEIF ([Taster.NO.1.device:"^brightness_down_hold$"])\
{\
my $val = maxNum([$SELF:Helligkeit]-30, 5);;\
fhem("set Mosquitto publish zigbee2mqtt/Lampe.NO.Gruppe/set {\"brightness\":$val,\"state\":\"ON\",\"transition\":0.5}");;\
fhem("setreading $SELF Helligkeit $val");;\
}\
\
##State:\
DOELSE\
()
attr NO.Deckenlicht.control alias Deckenlicht Steuerung
attr NO.Deckenlicht.control do always
attr NO.Deckenlicht.control group Beleuchtung
attr NO.Deckenlicht.control repeatcmd 0:0:0:0:0.5:0:0.5:0


Mit dem repeatcmd sorgt man dafür, dass bei gedrückter Dimup und Dimdown Taste alle 0.5 Sekunden erneut der Code ausgeführt wird. Jetzt ist der kleine Kniff, dass man im JSON die Transitionzeit auch auf 0.5s oder ein wenig kleiner einstellt, damit das Dimmen einigermaßen sanft aussieht.

Das Device "Mosquitto" ist vom Typ MQTT2_CLIENT und published/sendet die MQTT Befehle raus.

HTH, und viel Erfolg!