Hallo zusammen,
ich versuche einen Tradfri E1743 On/Off Taster dazu zu bewegen eine Tasmota RGBW Lampe zu dimmen.
Der übliche Weg das über ein 'pairing' zwischen Taster und Lampe zu lösen fällt hier dabei aus.
Beide Geräte sind als MQTT2 Geräte im FHEM verfügbar.
Die Idee ist es einen notify zu nutzen, der die Click Events des Tradfri Tasters abfängt und
je nach gedrückter Taste einen DimUp oder DimDown Befehl an die Tasmota Lampe überträgt.
Der Tradfri Taster funktioniert insofern, das ich im reading click die Tastendrücke angezeigt bekomme.
Das sind im einzelnen: on,off bei kurzer Betätigung und
brightness_up, brightness_stop,brightness_down,brightness_stop bei langer Betätigung.
Es wird wohl die Anbindung über zigbee2mqtt sein, das der Tradfri Taster nicht wie bei ConBee codes wie 2001,2002 nach
FHEM liefert.
Das MQTT2 Gerät der Tasmota Lampe habe ich so erweitert, das Setter für DimUp und DimDown zur Verfügung stehen.
Aktuell scheitere ich beim Anlegen eines passenden Notify der aus dem Tradfri Taster Reading click bei Erkennung
von brightness_up die Tasmota Lampe mit dem Befehl DimUp beauftragt. Der Notify sieht so aus:
Internals:
CFGFN
DEF MQTT2_zigbee_Tradfri_E1743_on_off_Switch_1:click.*
{
if
("$EVENT" eq "brightness_up" || "$EVENT" eq "on")
{ fhem("set MQTT2_Bulb_9Watt DimUp") }
else
{ fhem("set MQTT2_Bulb_9Watt DimDown") }
}
FUUID 5df8dcd7-f33f-81fd-1ce2-539bf60ca38e4996
NAME zOnOffDimBulb
NOTIFYDEV MQTT2_zigbee_Tradfri_E1743_on_off_Switch_1
NR 6897
NTFY_ORDER 50-zOnOffDimBulb
REGEXP MQTT2_zigbee_Tradfri_E1743_on_off_Switch_1:click.*
STATE 2019-12-17 16:38:14
TRIGGERTIME 1576597094.93561
TYPE notify
Helper:
DBLOG:
state:
DBLogging:
TIME 1576593386.66492
VALUE active
READINGS:
2019-12-17 15:36:26 state active
Attributes:
room MQTT2_DEVICE,Wohnzimmer,ZigBee
verbose 0
Ich vermute, das ich möglicherweise den Trigger schon richtig gefunden habe. Das Notify reagiert jedesmal im
ELSE Zweig da ich zu Testzwecken bewußt auf eine Bedingungsprüfung verzichtet habe. Die Tasmota Lampe dimmt runter, egal welcher Tastendruck ausgeführt wird. Jetzt fehlt mir (nur) noch die korrekte Auswertung des $EVENTS um die unterschiedlichen Tasten in verschiedene ELSIF Zweige zu leiten.
Mit der Bitte um freundliche Unterstützung.
Anbei:
Der Tradfri Taster:
Internals:
CHANGED
CID zigbee_Tradfri_E1743_on_off_Switch_1
DEF zigbee_Tradfri_E1743_on_off_Switch_1
DEVICETOPIC MQTT2_zigbee_Tradfri_E1743_on_off_Switch_1
FUUID 5df5df2e-f33f-81fd-b37e-9d88e3e063539d3c
IODev MQTT2_FHEM_Server
LASTInputDev MQTT2_FHEM_Server
MQTT2_FHEM_Server_MSGCNT 156
MQTT2_FHEM_Server_TIME 2019-12-17 16:10:26
MSGCNT 156
NAME MQTT2_zigbee_Tradfri_E1743_on_off_Switch_1
NR 172
STATE Click: off
TYPE MQTT2_DEVICE
Helper:
DBLOG:
availability:
DBLogging:
TIME 1576517913.2223
VALUE online
battery:
DBLogging:
TIME 1576594246.58033
VALUE 87
click:
DBLogging:
TIME 1576594518.56103
VALUE off
elapsed:
DBLogging:
TIME 1576594246.58033
VALUE 2255
last_seen:
DBLogging:
TIME 1576594246.58033
VALUE 2019-12-17T15:50:46+01:00
linkquality:
DBLogging:
TIME 1576594246.58033
VALUE 13
READINGS:
2019-12-16 18:38:33 associatedWith MQTT2_zigbee_Coordinator
2019-12-16 18:38:33 availability online
2019-12-17 16:10:26 battery 87
2019-12-17 15:55:18 click off
2019-12-17 16:10:26 elapsed 908090
2019-12-17 16:10:26 last_seen 2019-12-17T16:10:26+01:00
2019-12-17 16:10:26 linkquality 13
Attributes:
DbLogExclude .*
DbLogInclude battery,click
IODev MQTT2_FHEM_Server
event-on-update-reading click
icon control_home
imageLink /fhem/deviceimages/mqtt2/E1743.jpg
model zigbee2mqtt_wireless_button_old
readingList zigbee2mqtt/Tradfri_E1743_on_off_Switch_1:.* { json2nameValue($EVENT) }
zigbee2mqtt/Tradfri_E1743_on_off_Switch_1/availability:.* availability
room MQTT2_DEVICE,ZigBee
stateFormat Click: click
Die Tasmota RGBW Lampe:
Internals:
CID DVES_310A84
DEF DVES_310A84
DEVICETOPIC MQTT2_Bulb_9Watt
FUUID 5de8d86b-f33f-81fd-c8b0-e25ac0012145314c
IODev MQTT2_FHEM_Server
LASTInputDev MQTT2_FHEM_Server
MQTT2_FHEM_Server_MSGCNT 571
MQTT2_FHEM_Server_TIME 2019-12-17 16:18:57
MSGCNT 571
NAME MQTT2_Bulb_9Watt
NR 151
STATE on
TYPE MQTT2_DEVICE
OLDREADINGS:
READINGS:
2019-12-17 16:18:57 Channel_1 1
2019-12-17 16:18:57 Channel_2 1
2019-12-17 16:18:57 Channel_3 0
2019-12-17 16:18:57 Color 03010000
2019-12-17 16:18:57 Dimmer 1
2019-12-17 16:18:57 Fade on
2019-12-17 16:18:52 FallbackTopic cmnd/DVES_310A84_fb/
2019-12-17 16:18:52 GroupTopic cmnd/sonoffs/
2019-12-17 16:18:57 HSBColor 20,100,1
2019-12-17 16:18:57 Heap 28
2019-12-17 16:18:53 Hostname sonoff-RGBWW-2692
2019-12-17 16:18:53 IPAddress 192.168.1.213
2019-12-17 16:18:52 LWT Online
2019-12-17 16:18:57 LedTable off
2019-12-17 16:18:57 LoadAvg 98
2019-12-17 16:18:52 Module Maxcio YXL01P
2019-12-17 16:18:57 MqttCount 1
2019-12-17 16:18:57 POWER1 on
2019-12-17 16:18:53 RestartReason Software/System restart
2019-12-17 16:18:57 Scheme 0
2019-12-17 16:18:57 Sleep 10
2019-12-17 16:18:57 SleepMode Dynamic
2019-12-17 16:18:57 Speed 10
2019-12-17 16:18:57 Time 2019-12-17T16:18:56
2019-12-17 16:18:57 Uptime 0T00:00:12
2019-12-17 16:18:57 UptimeSec 12
2019-12-17 16:18:52 Version 7.1.2(tasmota)
2019-12-17 16:18:53 WebServerMode Admin
2019-12-17 16:18:57 Wifi_AP 1
2019-12-17 16:18:57 Wifi_BSSId xx:xx:xx:xx:xx:xx
2019-12-17 16:18:57 Wifi_Channel 6
2019-12-17 16:18:57 Wifi_Downtime 0T00:00:06
2019-12-17 16:18:57 Wifi_LinkCount 1
2019-12-17 16:18:57 Wifi_RSSI 52
2019-12-17 16:18:57 Wifi_SSId Test
Attributes:
IODev MQTT2_FHEM_Server
autocreate 0
comment NOTE: For on-for-timer SetExtensions are used. You may add on-for-timer option running on the device. The following is limited to 1h max duration, but will not affect future simple "on" commands:<br>on-for-timer {my $duration = $EVTPART1*10; 'cmnd/cmnd/sonoff-RGBWW/Backlog POWER1 1; delay '.$duration.'; POWER1 0'}<br>See the "Praxisbeispiele" in the wiki for "pulseTime1" alternative option and it's restrictions.
group Light_RGB
icon light_control
model tasmota_rgb_led_controller
readingList tele/sonoff-RGBWW/LWT:.* LWT
stat/sonoff-RGBWW/POWER:.* POWER
stat/sonoff-RGBWW/POWER1:.* POWER1
tele/sonoff-RGBWW/STATE:.* { json2nameValue($EVENT) }
stat/sonoff-RGBWW/RESULT:.* { json2nameValue($EVENT) }
tele/sonoff-RGBWW/INFO.:.* { json2nameValue($EVENT) }
room MQTT2_DEVICE
setList off:noArg cmnd/sonoff-RGBWW/POWER1 0
on:noArg cmnd/sonoff-RGBWW/POWER1 1
DimUp:noArg cmnd/sonoff-RGBWW/Dimmer +
DimDown:noArg cmnd/sonoff-RGBWW/Dimmer -
CTup:noArg cmnd/sonoff-RGBWW/CT +
CTdown:noArg cmnd/sonoff-RGBWW/CT -
ColorUp:noArg cmnd/sonoff-RGBWW/COLOR +
ColorDown:noArg cmnd/sonoff-RGBWW/COLOR -
Speed:1,5,10,15,20 cmnd/sonoff-RGBWW/Speed
toggle:noArg cmnd/sonoff-RGBWW/POWER1 2
Color:colorpicker,RGB cmnd/sonoff-RGBWW/COLOR
Dimmer:colorpicker,BRI,0,5,100 cmnd/sonoff-RGBWW/DIMMER
setStateList on off toggle
stateFormat POWER1
webCmd Color:Dimmer:Color ff0000:Color 00ff00:Color 0000ff:toggle:DimUp:DimDown:ColorUp:ColorDown
Hallo und willkommen im Forum!
$EVENT ist länger, der umfaßt mit einiger Wahrscheinlichkeit auch das "click".
Entweder das "eq" passend erweitern oder mit regex arbeiten:
("$EVENT" =~ /brightness_up|on$/)
Im Wiki zu notify gibt's noch ein paar Hinweise zur Fehlersuche in solchen Fällen (u.a. einen Hinweis, wie man das $EVENT loggen kann (?)).
Gruß, Beta-User
Hallo Beta-User,
deine Information hat mir sehr geholfen. Die Angabe einer Regular Expression zum filtern des
$EVENTS Ergebnisses des Tradfri Tasters hat geholfen.
Der funktionierende Notify sieht nun so aus:
Internals:
CFGFN
DEF MQTT2_zigbee_Tradfri_E1743_on_off_Switch_1:click.*
{
if
("$EVENT" =~ /on$/)
{ fhem("set MQTT2_Dusche on") }
elsif
("$EVENT" =~ /brightness_up$/)
{ fhem("set MQTT2_Dusche DimUp") }
elsif
("$EVENT" =~ /brightness_down$/)
{ fhem("set MQTT2_Dusche DimDown") }
elsif
("$EVENT" =~ /off$/)
{ fhem("set MQTT2_Dusche off") }
}
Mit dem Notify habe ich ein 10-stufiges Dimmen und muß mehrfach lange Tastendrücke ausführen.
Jetzt schau ich mal wie ich ein kontinuierliches DimUp oder DimDown hinbekomme.
Da könnte SEQUENCE oder DOIF repeatcmd zum Einsatz kommen.
Mit freundlichem Gruß
joelinux
:)
Schön, dass das geklappt hat.
Du kannst auch eine myUtils-Routine starten, die den aktuellen Wert ausliest, daraus die Steigerung (ggf. nicht-linear... ;) ) ableitet, hochdimmt und sich dann solange selbst (z.B. via InternalTimer) aufruft, bis entweder der max-Wert erreicht ist oder eine andere Routine (=>Taste losgelassen) den InternalTimer abbricht.