Hallo zusammen,
ich habe einen Osram Lichtschalter, der als 8 verschiedene actions sendet.
Nun möchte ich bei 2 davon das Licht auf 80% bzw. 50% haben, sofern es nicht schon auf dem Wert ist.
Sonst Licht aus.
Bei allen anderen actions auch Licht aus.
Ich habe mich an diesem Beispiel versucht zu orientieren: https://wiki.fhem.de/wiki/DOIF/Mehrfachnutzung_eines_Tasters
Trotzdem klappt das vorne und hinten nicht.
Kann ich bitte einen Schubser in die richtige Richtung haben?
Danke.
Internals:
CFGFN
DEF ##1
([MQTT2_zigbee_Osramschalter:action] eq "left_top_click" and $cmd=~"0|2|3")
(set MQTT2_zigbee_alle_bulbs brightness 80)
##2
DOELSEIF
([MQTT2_zigbee_Osramschalter:action] eq "left_bottom_click" and $cmd=~"0|1|3")
(set MQTT2_zigbee_alle_bulbs brightness 50)
##3
DOELSE
(set MQTT2_zigbee_alle_bulbs off)
FUUID 614c7512-f33f-5a77-dff7-f2a45b7c211efb8f
MODEL FHEM
NAME di_links_licht_osram
NOTIFYDEV MQTT2_zigbee_Osramschalter,global
NR 105023
NTFY_ORDER 50-di_links_licht_osram
STATE initialized
TYPE DOIF
VERSION 24595 2021-06-06 17:52:38
READINGS:
2021-09-23 17:03:31 cmd 0
2021-09-23 17:03:31 mode enabled
2021-09-23 17:03:31 state initialized
Regex:
accu:
collect:
cond:
MQTT2_zigbee_Osramschalter:
0:
action ^MQTT2_zigbee_Osramschalter$:^action:
1:
action ^MQTT2_zigbee_Osramschalter$:^action:
attr:
cmdState:
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'MQTT2_zigbee_Osramschalter','action') eq "left_top_click" and $cmd=~"0|2|3"
1 ::ReadingValDoIf($hash,'MQTT2_zigbee_Osramschalter','action') eq "left_bottom_click" and $cmd=~"0|1|3"
do:
0:
0 set MQTT2_zigbee_alle_bulbs brightness 80
1:
0 set MQTT2_zigbee_alle_bulbs brightness 50
2:
0 set MQTT2_zigbee_alle_bulbs off
helper:
DEVFILTER ^global$|^MQTT2_zigbee_Osramschalter$
NOTIFYDEV global|MQTT2_zigbee_Osramschalter
globalinit 1
last_timer 0
sleeptimer -1
readings:
all MQTT2_zigbee_Osramschalter:action
uiState:
uiTable:
Attributes:
room Wohnzimmer
Zitat von: Sedonion am 24 September 2021, 11:37:17
Trotzdem klappt das vorne und hinten nicht.
Geht das ein bischen genauer? ;-)
Auch würde ein List im Fehlerzustand helfen.
Natürlich, sorry.
Beim left_top_click geht Licht auf 80%, cmd wird 1, also ok.
Beim left_bottom_click geht Licht auf 50%, cmd wird 2, also auch ok.
Beim klick einer der anderen Tasten geht Licht aus, cmd wird 3 also auch ok.
Was mir fehlt, ist das Abschalten des Lichts wenn left_top_click kommt und cmd auf 1 ist, das dann DOELSE ausgeführt wird.
Also vermutlich ein Fehler in dem and $cmd=~"0|2|3"
Teil.
In deinem geposteten List kann man in den Readings noch nicht mal einen Trigger sehen, dh. das Modul wird durch MQTT2_zigbee_Osramschalter:action gar nicht getriggert, sonst würde man es in den Readings sehen können.
Zitat von: Damian am 24 September 2021, 13:25:48
In deinem geposteten List kann man in den Readings noch nicht mal einen Trigger sehen, dh. das Modul wird durch MQTT2_zigbee_Osramschalter:action gar nicht getriggert, sonst würde man es in den Readings sehen können.
Aber das Licht reagiert doch auf die Buttons?
Zitat von: Sedonion am 24 September 2021, 13:38:53
Aber das Licht reagiert doch auf die Buttons?
Es kann nur funktionieren, wenn man von MQTT2_zigbee_Osramschalter:action entsprechende Events im Eventmonitor sieht.
Das ist der Fall. Wie gesagt, Licht an geht bei beiden Schaltern.
Habs dennoch neu angelegt und nun ist auch das Reading da.
Dennoch gleiches Verhalten.
Internals:
DEF ##1
([MQTT2_zigbee_Osramschalter:action] eq "left_top_click" and $cmd=~"0|2|3")
(set MQTT2_zigbee_alle_bulbs brightness 80)
##2
DOELSEIF
([MQTT2_zigbee_Osramschalter:action] eq "left_bottom_click" and $cmd=~"0|1|3")
(set MQTT2_zigbee_alle_bulbs brightness 50)
##3
DOELSE
(set MQTT2_zigbee_alle_bulbs off)
FUUID 614dbdfd-f33f-5a77-fbab-aae842bef23f9ba6
MODEL FHEM
NAME di_links_licht_osram
NOTIFYDEV MQTT2_zigbee_Osramschalter,global
NR 210
NTFY_ORDER 50-di_links_licht_osram
STATE cmd_3
TYPE DOIF
VERSION 24595 2021-06-06 17:52:38
READINGS:
2021-09-24 14:06:16 Device MQTT2_zigbee_Osramschalter
2021-09-24 14:06:16 cmd 3
2021-09-24 14:06:16 cmd_event MQTT2_zigbee_Osramschalter
2021-09-24 14:06:16 cmd_nr 3
2021-09-24 14:06:16 e_MQTT2_zigbee_Osramschalter_action right_bottom_click
2021-09-24 14:01:54 mode enabled
2021-09-24 14:06:16 state cmd_3
Regex:
accu:
collect:
cond:
MQTT2_zigbee_Osramschalter:
0:
action ^MQTT2_zigbee_Osramschalter$:^action:
1:
action ^MQTT2_zigbee_Osramschalter$:^action:
attr:
cmdState:
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'MQTT2_zigbee_Osramschalter','action') eq "left_top_click" and $cmd=~"0|2|3"
1 ::ReadingValDoIf($hash,'MQTT2_zigbee_Osramschalter','action') eq "left_bottom_click" and $cmd=~"0|1|3"
do:
0:
0 set MQTT2_zigbee_alle_bulbs brightness 80
1:
0 set MQTT2_zigbee_alle_bulbs brightness 50
2:
0 set MQTT2_zigbee_alle_bulbs off
helper:
DEVFILTER ^global$|^MQTT2_zigbee_Osramschalter$
NOTIFYDEV global|MQTT2_zigbee_Osramschalter
event action: right_bottom_click
globalinit 1
last_timer 0
sleeptimer -1
timerdev MQTT2_zigbee_Osramschalter
timerevent action: right_bottom_click
triggerDev MQTT2_zigbee_Osramschalter
timerevents:
action: right_bottom_click
timereventsState:
action: right_bottom_click
triggerEvents:
action: right_bottom_click
triggerEventsState:
action: right_bottom_click
internals:
perlblock:
readings:
all MQTT2_zigbee_Osramschalter:action
trigger:
uiState:
uiTable:
Attributes:
room Wohnzimmer
Funktioniert, wie definiert:
2021-09-24 14:06:16 e_MQTT2_zigbee_Osramschalter_action right_bottom_click
führt zum DOELSE-Fall, also cmd_3
Zitat von: Sedonion am 24 September 2021, 13:18:05
Natürlich, sorry.
Beim left_top_click geht Licht auf 80%, cmd wird 1, also ok.
Beim left_bottom_click geht Licht auf 50%, cmd wird 2, also auch ok.
Beim klick einer der anderen Tasten geht Licht aus, cmd wird 3 also auch ok.
Was mir fehlt, ist das Abschalten des Lichts wenn left_top_click kommt und cmd auf 1 ist, das dann DOELSE ausgeführt wird.
Also vermutlich ein Fehler in dem and $cmd=~"0|2|3"
Teil.
Ich versuche es nochmal anders:
Ich möchte erreichen, wenn left_top_click gedrückt wird, geschaut wird, ob cmd ungleich 1 ist. Dann licht 80%.
Sollte aber cmd schon 1 sein, licht aus über doelse. Und das klappt nicht.
Zitat von: Sedonion am 24 September 2021, 14:28:43
Ich versuche es nochmal anders:
Ich möchte erreichen, wenn left_top_click gedrückt wird, geschaut wird, ob cmd ungleich 1 ist. Dann licht 80%.
Sollte aber cmd schon 1 sein, licht aus über doelse. Und das klappt nicht.
Dann musst du den fehlenden Fall als weiteren DOELSEIF auch definieren.
Und immer ein List vom vermeintlichen Fehler posten und nicht von Sachen, die funktionieren - die interessieren hier nicht.
Ok, ich habe es versucht zu vereinfachen:
Internals:
DEF ##1
([MQTT2_zigbee_Osramschalter:action] eq "left_top_click" and $cmd=~"2")
(set MQTT2_Shelly1_Arbeitszimmer on)
##2
DOELSEIF
([MQTT2_zigbee_Osramschalter:action] eq "left_top_click" and $cmd=~"1")
(set MQTT2_Shelly1_Arbeitszimmer off)
FUUID 614db223-f33f-5a77-2693-1e577e8983b3a7b0
MODEL FHEM
NAME di_links_licht_osram_neu
NOTIFYDEV MQTT2_zigbee_Osramschalter,global
NR 209
NTFY_ORDER 50-di_links_licht_osram_neu
STATE cmd_2
TYPE DOIF
VERSION 24595 2021-06-06 17:52:38
READINGS:
2021-09-24 15:21:45 Device MQTT2_zigbee_Osramschalter
2021-09-24 15:21:45 cmd 2
2021-09-24 15:21:45 cmd_event MQTT2_zigbee_Osramschalter
2021-09-24 15:21:45 cmd_nr 2
2021-09-24 15:21:45 e_MQTT2_zigbee_Osramschalter_action left_top_click
2021-09-24 15:21:14 mode enabled
2021-09-24 15:21:45 state cmd_2
Regex:
accu:
collect:
cond:
MQTT2_zigbee_Osramschalter:
0:
action ^MQTT2_zigbee_Osramschalter$:^action:
1:
action ^MQTT2_zigbee_Osramschalter$:^action:
attr:
cmdState:
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'MQTT2_zigbee_Osramschalter','action') eq "left_top_click" and $cmd=~"2"
1 ::ReadingValDoIf($hash,'MQTT2_zigbee_Osramschalter','action') eq "left_top_click" and $cmd=~"1"
do:
0:
0 set MQTT2_Shelly1_Arbeitszimmer on
1:
0 set MQTT2_Shelly1_Arbeitszimmer off
2:
helper:
DEVFILTER ^global$|^MQTT2_zigbee_Osramschalter$
NOTIFYDEV global|MQTT2_zigbee_Osramschalter
event action: left_top_click
globalinit 1
last_timer 0
sleeptimer -1
timerdev MQTT2_zigbee_Osramschalter
timerevent action: left_top_click
triggerDev MQTT2_zigbee_Osramschalter
DOIF_eventa:
cmd_nr: 2
cmd: 2
cmd_event: MQTT2_zigbee_Osramschalter
cmd_2
DOIF_eventas:
cmd_nr: 2
cmd: 2
cmd_event: MQTT2_zigbee_Osramschalter
state: cmd_2
timerevents:
action: left_top_click
timereventsState:
action: left_top_click
triggerEvents:
action: left_top_click
triggerEventsState:
action: left_top_click
internals:
readings:
all MQTT2_zigbee_Osramschalter:action
trigger:
uiState:
uiTable:
Attributes:
room Wohnzimmer
cmd ist 2. Da sollte doch bei einem left_top_klick die erste Bedingung erfüllt sein?
Irgendwie hänge ich an dem cmd reading.
Beim nächsten left_top_click sollte er set MQTT2_Shelly1_Arbeitszimmer on ausführen.
Das tut es aber nicht.
Das ist das list nach 2x drücken.
Zitat von: Sedonion am 24 September 2021, 17:53:41
Das tut es aber nicht.
Das ist das list nach 2x drücken.
Dann zeigst du wieder den funktionierenden Fall, denn
2021-09-24 15:21:45 e_MQTT2_zigbee_Osramschalter_action left_top_click
führte zu
2021-09-24 15:21:45 cmd_nr 2
Wenn etwas nicht funktioniert hätte, dann hätten die Zeiten unterschiedlich sein müssen.