Hallo zusammen,
ich habe ein paar Thermokon EnOcean Taster (2x Wippe bzw. 4x Taster), die ich direkt mit Eltako Aktoren (z.B. FSR14-4x) verbunden habe.
Ich programmiere die Taster mit der Eltako-Software PCT14. Dies funktioniert soweit sehr gut, bis auf die Tatsache, dass ich den Tastern darüber generell keine Mehrfachfunktionen (z.B. 2x drücken oder 1x lange drücken) zuweisen kann.
Hier kommt FHEM ins Spiel! Eltako-Aktoren und Thermokontaster sind in FHEM eingelernt.
Hier der list eines Tasters:
Internals:
DEF 0035EF96
FUUID 616f2135-f33f-b102-cc85-c15e3faa69770b4a
IODev TCM_ESP3_0
LASTInputDev TCM_ESP3_0
MSGCNT 402
NAME SCH_WZ_F_EnO_Thermokon
NR 171
NTFY_ORDER 50-SCH_WZ_F_EnO_Thermokon
STATE A0
TCM_ESP3_0_DestinationID FFFFFFFF
TCM_ESP3_0_MSGCNT 402
TCM_ESP3_0_PacketType 1
TCM_ESP3_0_RSSI -67
TCM_ESP3_0_ReceivingQuality excellent
TCM_ESP3_0_RepeatingCounter 1
TCM_ESP3_0_SubTelNum 4
TCM_ESP3_0_TIME 2021-10-25 23:06:23
TYPE EnOcean
READINGS:
2021-10-21 02:16:55 IODev TCM_ESP3_0
2021-10-25 23:06:23 buttons released
2021-10-25 23:06:23 channelA A0
2021-10-25 22:58:57 channelB B0
2021-10-25 23:06:23 state A0
2021-10-19 21:49:09 teach RPS teach-in accepted EEP F6-02-01 Manufacturer: no ID
helper:
Attributes:
IODev TCM_ESP3_0
eep F6-02-01
manufID 7FF
room EnOcean,Garten,Wohnzimmer
subType switch
teachMethod RPS
und des Aktors (FSR14_4x):
Internals:
DEF FF959491
FUUID 616f0900-f33f-b102-629b-ff6e3477ad30785b
IODev TCM_ESP3_0
NAME AC_GAR_FSR14_4x_2_MauerBaum_EnO_Elta
NR 165
NTFY_ORDER 50-AC_GAR_FSR14_4x_2_MauerBaum_EnO_Elta
STATE off
TYPE EnOcean
READINGS:
2021-10-21 02:16:54 IODev TCM_ESP3_0
2021-10-25 22:58:17 block unlock
2021-10-25 22:58:17 state off
2021-10-19 20:35:18 teach 4BS teach-in sent
helper:
Attributes:
IODev TCM_ESP3_0
eep A5-38-08
gwCmd switching
manufID 00D
room EnOcean,Garten
subDef FF959494
subType gateway
webCmd on:off
Die Taster werden in FHEM mit A0, AI und B0, BI tituliert. Also, habe ich mir zwei simple DOIFs gebaut, mit denen ich bei 2x drücken die gesamte Gartenbeleuchtung aus- bzw. einschalten möchte (Bsp. list DI_allLightsGardenON):
Internals:
DEF ([SCH_WZ_F_EnO_Thermokon:state] eq "B0" or [SCH_KUE_F_EnO_Thermokon:state] eq "A0")
(set AC_GAR_FSR14_2x_1_Mauer_EnO_Elta on)
(set AC_GAR_FSR14_2x_2_Treppe_EnO_Elta on)
(set AC_GAR_FSR14_4x_1_BaumMauer_EnO_Elta on)
(set AC_GAR_FSR14_4x_2_MauerBaum_EnO_Elta on)
FUUID 61707b6f-f33f-b102-010f-c60aacf617913004
MODEL FHEM
NAME DI_allLightsGardenON
NOTIFYDEV global,SCH_KUE_F_EnO_Thermokon,SCH_WZ_F_EnO_Thermokon
NR 173
NTFY_ORDER 50-DI_allLightsGardenON
STATE cmd_1
TYPE DOIF
VERSION 24905 2021-09-01 18:35:54
READINGS:
2021-10-25 23:43:17 Device SCH_WZ_F_EnO_Thermokon
2021-10-25 22:42:28 cmd 1.4
2021-10-25 22:42:28 cmd_event SCH_KUE_F_EnO_Thermokon
2021-10-25 22:42:28 cmd_nr 1
2021-10-25 22:42:28 cmd_seqnr 4
2021-10-25 22:42:41 e_SCH_KUE_F_EnO_Thermokon_state AI
2021-10-25 23:43:17 e_SCH_WZ_F_EnO_Thermokon_state AI
2021-10-21 00:22:04 mode enabled
2021-10-25 22:42:28 state cmd_1
2021-10-25 22:58:57 waitsame cmd_1
Regex:
accu:
collect:
cond:
SCH_KUE_F_EnO_Thermokon:
0:
state ^SCH_KUE_F_EnO_Thermokon$:^state:
SCH_WZ_F_EnO_Thermokon:
0:
state ^SCH_WZ_F_EnO_Thermokon$:^state:
attr:
cmdState:
wait:
waitdel:
waitsame:
2
condition:
0 ::ReadingValDoIf($hash,'SCH_WZ_F_EnO_Thermokon','state') eq "B0" or ::ReadingValDoIf($hash,'SCH_KUE_F_EnO_Thermokon','state') eq "A0"
do:
0:
0 set AC_GAR_FSR14_2x_1_Mauer_EnO_Elta on
1 set AC_GAR_FSR14_2x_2_Treppe_EnO_Elta on
2 set AC_GAR_FSR14_4x_1_BaumMauer_EnO_Elta on
3 set AC_GAR_FSR14_4x_2_MauerBaum_EnO_Elta on
1:
helper:
DEVFILTER ^global$|^SCH_KUE_F_EnO_Thermokon$|^SCH_WZ_F_EnO_Thermokon$
NOTIFYDEV global|SCH_KUE_F_EnO_Thermokon|SCH_WZ_F_EnO_Thermokon
event buttons: pressed,channelA: AI,AI
globalinit 1
last_timer 0
sleeptimer -1
timerdev SCH_WZ_F_EnO_Thermokon
timerevent buttons: pressed,channelB: B0,B0
triggerDev SCH_WZ_F_EnO_Thermokon
timerevents:
buttons: pressed
channelB: B0
B0
timereventsState:
buttons: pressed
channelB: B0
state: B0
triggerEvents:
buttons: pressed
channelA: AI
AI
triggerEventsState:
buttons: pressed
channelA: AI
state: AI
internals:
perlblock:
readings:
all SCH_WZ_F_EnO_Thermokon:state SCH_KUE_F_EnO_Thermokon:state
trigger:
uiState:
uiTable:
Attributes:
do always
waitsame 2
Das funktioniert leider nur sporadisch und gefühlt willkürlich. Drücke ich z.b. 1x B0 und 1x BI, um zwei verschiedene Lampen einzeln zu schalten, geht alles aus. Dies sollte eigentlich nur bei 2x BI geschehen. Selbst das einmalige Drücken von AI (ganz andere Lampe und Direktverbindung) und dann B0 lässt alles ausgehen obwohl ich zwei verschiedene Lampen einschalten wollte.
Hier ein Auszug vom Event Monitor:
2021-10-25 22:56:25 DOIF DI_allLightsGardenOFF waitsame: cmd_1
2021-10-25 22:56:25 EnOcean SCH_WZ_F_EnO_Thermokon buttons: pressed
2021-10-25 22:56:25 EnOcean SCH_WZ_F_EnO_Thermokon channelA: AI
2021-10-25 22:56:25 EnOcean SCH_WZ_F_EnO_Thermokon AI
2021-10-25 22:56:25 EnOcean SCH_WZ_F_EnO_Thermokon buttons: released
2021-10-25 22:56:26 structure str_GAR_Terra_Kue_Bel off
2021-10-25 22:56:26 EnOcean AC_GAR_FSR14_2x_1_Mauer_EnO_Elta block: unlock
2021-10-25 22:56:26 structure str_GAR_Terra_Kue_Bel off
2021-10-25 22:56:26 EnOcean AC_GAR_FSR14_2x_1_Mauer_EnO_Elta off
2021-10-25 22:56:26 DOIF DI_allLightsGardenOFF cmd_nr: 1
2021-10-25 22:56:26 DOIF DI_allLightsGardenOFF cmd_seqnr: 1
2021-10-25 22:56:26 DOIF DI_allLightsGardenOFF cmd: 1.1
2021-10-25 22:56:26 DOIF DI_allLightsGardenOFF cmd_event: SCH_WZ_F_EnO_Thermokon
2021-10-25 22:56:26 DOIF DI_allLightsGardenOFF cmd_1_1
2021-10-25 22:56:26 structure str_GAR_Terra_Kue_Bel off
2021-10-25 22:56:26 EnOcean AC_GAR_FSR14_2x_2_Treppe_EnO_Elta block: unlock
2021-10-25 22:56:26 structure str_GAR_Terra_Kue_Bel off
2021-10-25 22:56:26 EnOcean AC_GAR_FSR14_2x_2_Treppe_EnO_Elta off
2021-10-25 22:56:26 DOIF DI_allLightsGardenOFF cmd_nr: 1
2021-10-25 22:56:26 DOIF DI_allLightsGardenOFF cmd_seqnr: 2
2021-10-25 22:56:26 DOIF DI_allLightsGardenOFF cmd: 1.2
2021-10-25 22:56:26 DOIF DI_allLightsGardenOFF cmd_event: SCH_WZ_F_EnO_Thermokon
2021-10-25 22:56:26 DOIF DI_allLightsGardenOFF cmd_1_2
2021-10-25 22:56:26 EnOcean AC_GAR_FSR14_4x_1_BaumMauer_EnO_Elta block: unlock
2021-10-25 22:56:26 EnOcean AC_GAR_FSR14_4x_1_BaumMauer_EnO_Elta off
2021-10-25 22:56:26 DOIF DI_allLightsGardenOFF cmd_nr: 1
2021-10-25 22:56:26 DOIF DI_allLightsGardenOFF cmd_seqnr: 3
2021-10-25 22:56:26 DOIF DI_allLightsGardenOFF cmd: 1.3
2021-10-25 22:56:26 DOIF DI_allLightsGardenOFF cmd_event: SCH_WZ_F_EnO_Thermokon
2021-10-25 22:56:26 DOIF DI_allLightsGardenOFF cmd_1_3
2021-10-25 22:56:26 EnOcean AC_GAR_FSR14_4x_2_MauerBaum_EnO_Elta block: unlock
2021-10-25 22:56:26 EnOcean AC_GAR_FSR14_4x_2_MauerBaum_EnO_Elta off
2021-10-25 22:56:26 DOIF DI_allLightsGardenOFF cmd_nr: 1
2021-10-25 22:56:26 DOIF DI_allLightsGardenOFF cmd_seqnr: 4
2021-10-25 22:56:26 DOIF DI_allLightsGardenOFF cmd: 1.4
2021-10-25 22:56:26 DOIF DI_allLightsGardenOFF cmd_event: SCH_WZ_F_EnO_Thermokon
2021-10-25 22:56:26 DOIF DI_allLightsGardenOFF cmd_1
2021-10-25 22:56:26 DOIF DI_allLightsGardenON waitsame: cmd_1
2021-10-25 22:56:26 EnOcean SCH_WZ_F_EnO_Thermokon buttons: pressed
2021-10-25 22:56:26 EnOcean SCH_WZ_F_EnO_Thermokon channelB: B0
2021-10-25 22:56:26 EnOcean SCH_WZ_F_EnO_Thermokon B0
2021-10-25 22:56:26 EnOcean SCH_WZ_F_EnO_Thermokon buttons: released
2021-10-25 22:56:26 structure str_GAR_Terra_Kue_Bel off
2021-10-25 22:56:26 EnOcean AC_GAR_FSR14_2x_1_Mauer_EnO_Elta off
2021-10-25 22:56:26 structure str_GAR_Terra_Kue_Bel off
2021-10-25 22:56:26 EnOcean AC_GAR_FSR14_2x_2_Treppe_EnO_Elta off
Hat jemand Erfahrung mit diesen Tastern und FHEM?
Stimmt etwas nicht mit meiner aufgeführten Konfiguration?
Btw. wird bei längerem Drücken eines Tasters nicht BI, B0, etc. im Event Monitor angezeigt sonder einfach nur:
2021-10-25 22:58:17 EnOcean SCH_WZ_F_EnO_Thermokon buttons: pressed
2021-10-25 22:58:17 EnOcean SCH_WZ_F_EnO_Thermokon pressed
2021-10-25 22:58:17 EnOcean SCH_WZ_F_EnO_Thermokon buttons: released
Da passt doch auch etwas nicht oder ist das bei diesen Tastern normal?
Ist das der Fall, fällt die Option langes Drücken von z.B. B0 komplett weg!
Aber das ist tätsächlich momentan Nebensache...
Ich freue mich auf eure Antworten und hoffentlich Hilfe.
Vielen Dank & viele Grüße.
Das klingt mir jetzt weniger nach einem EnOcean- oder Tasterproblem, sondern nach einer DOIF-Konfiguration, denn nur die ist in Deinem Setup für den Doppelklick verantwortlich. Hierzu bitte auch mal das zweite DOIF posten, von dem Du schreibst. Ich würde in jedem Fall jetzt mal das ":state" weggelassen im DOIF.
Langes drücken geht genauso mit DOIF, aber dann musst Du zwingend über "pressed" und "released" gehen (In Kombination mit STATE (nicht:state), um zu unterscheiden, ob oben oder unten gedrück wurde). Das DOIF ist dann minimal komplizierter, weil Du mit Timern und Prüfung auf diesen arbeiten musst.
Hallo Flachzange & danke für die Antwort.
Die jetzige state-Version ist einer von mehreren Versuchen. Da sie grundsätzlich die richtige Funktion zeigte, habe ich sie so gelassen.
Den Standard SCH_SZ_F_EnO_Thermokon:B0 und Versuche wie ([SCH_WZ_F_EnO_Thermokon] eq ".*B0.*") habe ich bereits hinter mir.
Ich nehme :state nochmal heraus.
Hier das zweite DOIF:
Internals:
DEF ([SCH_WZ_F_EnO_Thermokon:BI] or
[SCH_KUE_F_EnO_Thermokon:AI])
(set AC_GAR_FSR14_2x_1_Mauer_EnO_Elta off)
(set AC_GAR_FSR14_2x_2_Treppe_EnO_Elta off)
(set AC_GAR_FSR14_4x_1_BaumMauer_EnO_Elta off)
(set AC_GAR_FSR14_4x_2_MauerBaum_EnO_Elta off)
FUUID 6170829f-f33f-b102-52ad-f5877a2e887e6b53
MODEL FHEM
NAME DI_allLightsGardenOFF
NOTIFYDEV SCH_WZ_F_EnO_Thermokon,global,SCH_KUE_F_EnO_Thermokon
NR 174
NTFY_ORDER 50-DI_allLightsGardenOFF
STATE initialized
TYPE DOIF
VERSION 24905 2021-09-01 18:35:54
READINGS:
2021-10-26 10:08:37 cmd 0
2021-10-26 10:08:37 mode enabled
2021-10-26 10:08:37 state initialized
Regex:
accu:
collect:
cond:
SCH_KUE_F_EnO_Thermokon:
0:
AI ^SCH_KUE_F_EnO_Thermokon$:^AI:
SCH_WZ_F_EnO_Thermokon:
0:
BI ^SCH_WZ_F_EnO_Thermokon$:^BI:
attr:
cmdState:
wait:
waitdel:
waitsame:
2
condition:
0 ::ReadingValDoIf($hash,'SCH_WZ_F_EnO_Thermokon','BI') or ::ReadingValDoIf($hash,'SCH_KUE_F_EnO_Thermokon','AI')
do:
0:
0 set AC_GAR_FSR14_2x_1_Mauer_EnO_Elta off
1 set AC_GAR_FSR14_2x_2_Treppe_EnO_Elta off
2 set AC_GAR_FSR14_4x_1_BaumMauer_EnO_Elta off
3 set AC_GAR_FSR14_4x_2_MauerBaum_EnO_Elta off
1:
helper:
DEVFILTER ^global$|^SCH_WZ_F_EnO_Thermokon$|^SCH_KUE_F_EnO_Thermokon$
NOTIFYDEV global|SCH_WZ_F_EnO_Thermokon|SCH_KUE_F_EnO_Thermokon
globalinit 1
last_timer 0
sleeptimer -1
readings:
all SCH_WZ_F_EnO_Thermokon:BI SCH_KUE_F_EnO_Thermokon:AI
uiState:
uiTable:
Attributes:
do always
waitsame 2
Das STATE (nicht:state) beim langen Drücken werde ich mir nochmal genauer ansehen.
Viele Grüße
Also...
([SCH_WZ_F_EnO_Thermokon] eq "B0" or [SCH_KUE_F_EnO_Thermokon] eq "A0")
wäre jetzt wie ich es notieren würde.
ZitatDas funktioniert leider nur sporadisch und gefühlt willkürlich. Drücke ich z.b. 1x B0 und 1x BI, um zwei verschiedene Lampen einzeln zu schalten, geht alles aus. Dies sollte eigentlich nur bei 2x BI geschehen. Selbst das einmalige Drücken von AI (ganz andere Lampe und Direktverbindung) und dann B0 lässt alles ausgehen obwohl ich zwei verschiedene Lampen einschalten wollte.
Das liegt vermutlich daran, dass in beiden DOIFs ein DOELSE() am Ende fehlt. Ohne das verharrt das DOIF beim ersten Drücken einer Taste im wait-Zustand für "cmd_1". Egal, was Du dann dazwischen drückst, drückst Du irgendwann nochmal eine der beiden Tasten triggert das DOIF in "cmd_1". Versuche mal folgendes:
([SCH_WZ_F_EnO_Thermokon] eq "B0" or [SCH_KUE_F_EnO_Thermokon] eq "A0")(...) DOELSE()
Analog im anderen DOIF. Dabei muss Dir klar sein, dass auch eine Kombination B0,A0 und A0,B0 ein Doppeltasten auslösen würde.
Aufpassen: Wenn der Taster auch zwei Zustände gleichzeitig annehmen kann, also eine Kombination aus A und B. Das äußert sich dann in einem state wie AI,BI (zum Beispiel). Das passiert in der Regel dann wenn man bei einem Serientaster beide Wippen gleichzeitig drückt. Ich vermute, dass es trotzdem funktioniert, aber Du solltest es mal testen.
Nachfolgend
ein mögliches Beispiel, um langes Drücken zu realisieren:
Internals:
DEF (["Schalter_1_fach_Schlafzimmer_Bett_:buttons:.pressed"] and [$DEVICE] eq "B0")(msg 'Licht: Alles aus. Folgende Lampen werden ausgeschaltet: [@"^Lichtaktor_":state:"on"]', set Lichtaktor.*:FILTER=STATE=on off)
DOELSEIF(["Schalter_1_fach_Schlafzimmer_Bett_:buttons:.released"] and [?DOIF_Licht_Alles_Aus:wait_timer] =~/cmd_/)()
DOIFDEV ^global$|Schalter_1_fach_Schlafzimmer_Bett_
FUUID 613f88fe-f33f-fd7e-7344-768ec60034b975b5
MODEL FHEM
NAME DOIF_Licht_Alles_Aus
NR 411
NTFY_ORDER 50-DOIF_Licht_Alles_Aus
STATE cmd_1
TYPE DOIF
VERSION 24905 2021-09-01 18:35:54
Helper:
DBLOG:
cmd:
logdb:
TIME 1635194944.9228
VALUE 1
cmd_event:
logdb:
TIME 1635194944.9228
VALUE Schalter_1_fach_Schlafzimmer_Bett_links
cmd_nr:
logdb:
TIME 1635194944.9228
VALUE 1
state:
logdb:
TIME 1635194944.9228
VALUE cmd_1
wait_timer:
logdb:
TIME 1635194944.60454
VALUE no timer
READINGS:
2021-10-25 22:49:07 Device Schalter_1_fach_Schlafzimmer_Bett_links
2021-10-25 22:49:04 cmd 1
2021-10-25 22:49:04 cmd_event Schalter_1_fach_Schlafzimmer_Bett_links
2021-10-25 22:49:04 cmd_nr 1
2021-09-29 06:11:48 mode enabled
2021-10-25 22:49:04 state cmd_1
2021-10-25 22:49:04 wait_timer no timer
Regex:
accu:
collect:
cond:
:
0:
"Schalter_1_fach_Schlafzimmer_Bett_:buttons:.pressed" Schalter_1_fach_Schlafzimmer_Bett_:buttons:.pressed
1:
"Schalter_1_fach_Schlafzimmer_Bett_:buttons:.released" Schalter_1_fach_Schlafzimmer_Bett_:buttons:.released
attr:
cmdState:
wait:
0:
1
1:
0
waitdel:
condition:
0 ::EventDoIf('Schalter_1_fach_Schlafzimmer_Bett_',$hash,'buttons:.pressed',0) and ::InternalDoIf($hash,'$DEVICE','STATE') eq "B0"
1 ::EventDoIf('Schalter_1_fach_Schlafzimmer_Bett_',$hash,'buttons:.released',0) and ::ReadingValDoIf($hash,'DOIF_Licht_Alles_Aus','wait_timer') =~/cmd_/
do:
0:
0 msg 'Licht: Alles aus. Folgende Lampen werden ausgeschaltet: [@"^Lichtaktor_":state:"on"]', set Lichtaktor.*:FILTER=STATE=on off
1:
0
2:
helper:
DEVFILTER ^global$|Schalter_1_fach_Schlafzimmer_Bett_
NOTIFYDEV global|.*Schalter_1_fach_Schlafzimmer_Bett_.*
event buttons: released
globalinit 1
last_timer 0
sleepdevice Schalter_1_fach_Schlafzimmer_Bett_links
sleepsubtimer -1
sleeptimer -1
timerdev Schalter_1_fach_Schlafzimmer_Bett_links
timerevent buttons: pressed
triggerDev Schalter_1_fach_Schlafzimmer_Bett_links
timerevents:
buttons: pressed
channelB: B0
B0
timereventsState:
buttons: pressed
channelB: B0
state: B0
triggerEvents:
buttons: released
triggerEventsState:
buttons: released
internals:
all $DEVICE:STATE
perlblock:
readings:
trigger:
uiState:
uiTable:
Attributes:
comment Beim Drücken der Schalter am Bett (oben) werden alle Lampen ausgeschaltet, die noch eingeschaltet sind. Wird zu früh losgelassen passiert nichts
do resetwait
room Licht
verbose 1
wait 1:0
Hi Flachzange,
erstmal vielen Dank für die ausführliche Antwort.
Die Sache mit DOELSE () klang plausibel und ich habe das Ganze angepasst.
Internals:
DEF ([SCH_WZ_F_EnO_Thermokon] eq "BI" or [SCH_KUE_F_EnO_Thermokon] eq "AI")
(set AC_GAR_FSR14_2x_1_Mauer_EnO_Elta on)
(set AC_GAR_FSR14_2x_2_Treppe_EnO_Elta on)
(set AC_GAR_FSR14_4x_1_BaumMauer_EnO_Elta on)
(set AC_GAR_FSR14_4x_2_MauerBaum_EnO_Elta on) DOELSE ()
FUUID 61707b6f-f33f-b102-010f-c60aacf617913004
MODEL FHEM
NAME DI_allLightsGardenON
NOTIFYDEV SCH_WZ_F_EnO_Thermokon,SCH_KUE_F_EnO_Thermokon,global
NR 173
NTFY_ORDER 50-DI_allLightsGardenON
STATE cmd_2
TYPE DOIF
VERSION 24905 2021-09-01 18:35:54
READINGS:
2021-11-01 00:06:15 Device SCH_WZ_F_EnO_Thermokon
2021-11-01 00:06:15 cmd 2
2021-11-01 00:06:15 cmd_event SCH_WZ_F_EnO_Thermokon
2021-11-01 00:06:15 cmd_nr 2
2021-11-01 00:06:15 e_SCH_WZ_F_EnO_Thermokon_STATE A0
2021-10-30 01:36:00 mode enabled
2021-11-01 00:06:15 state cmd_2
Regex:
accu:
collect:
cond:
SCH_KUE_F_EnO_Thermokon:
0:
&STATE ^SCH_KUE_F_EnO_Thermokon$
SCH_WZ_F_EnO_Thermokon:
0:
&STATE ^SCH_WZ_F_EnO_Thermokon$
attr:
cmdState:
wait:
waitdel:
waitsame:
2
condition:
0 ::InternalDoIf($hash,'SCH_WZ_F_EnO_Thermokon','STATE') eq "BI" or ::InternalDoIf($hash,'SCH_KUE_F_EnO_Thermokon','STATE') eq "AI"
do:
0:
0 set AC_GAR_FSR14_2x_1_Mauer_EnO_Elta on
1 set AC_GAR_FSR14_2x_2_Treppe_EnO_Elta on
2 set AC_GAR_FSR14_4x_1_BaumMauer_EnO_Elta on
3 set AC_GAR_FSR14_4x_2_MauerBaum_EnO_Elta on
1:
0
helper:
DEVFILTER ^global$|^SCH_KUE_F_EnO_Thermokon$|^SCH_WZ_F_EnO_Thermokon$
NOTIFYDEV global|SCH_KUE_F_EnO_Thermokon|SCH_WZ_F_EnO_Thermokon
event buttons: released
globalinit 1
last_timer 0
sleeptimer -1
timerdev SCH_WZ_F_EnO_Thermokon
timerevent buttons: released
triggerDev SCH_WZ_F_EnO_Thermokon
DOIF_eventa:
cmd_nr: 2
cmd: 2
cmd_event: SCH_WZ_F_EnO_Thermokon
cmd_2
DOIF_eventas:
cmd_nr: 2
cmd: 2
cmd_event: SCH_WZ_F_EnO_Thermokon
state: cmd_2
timerevents:
buttons: released
timereventsState:
buttons: released
triggerEvents:
buttons: released
triggerEventsState:
buttons: released
internals:
all SCH_WZ_F_EnO_Thermokon:STATE SCH_KUE_F_EnO_Thermokon:STATE
readings:
trigger:
uiState:
uiTable:
Attributes:
do always
waitsame 2
Ich habe übers Wochenende ausgiebig getestet, aber eine gravierende Verbesserung konnte ich leider nicht feststellen. Nach wie vor funktioniert es, wenn ich
2x BI für
AllesAn und 2x B0 für
AllesAus drücke. Allerdings geht auch alles aus bzw. an, wenn ich BI -> B0 bzw. B0 -> BI drücke. Je nachdem, was ich zuletzt gedrückt habe, trifft ein. Das Ganze ist mir doch sehr suspekt!
Zitat
Dabei muss Dir klar sein, dass auch eine Kombination B0,A0 und A0,B0 ein Doppeltasten auslösen würde.
Beziehst Du das generell auf diese Schalter oder auf meine Konfig?
Ich habe zwei verschiedene Schalter aufgeführt.
Danke Dir für den Ansatz fürs lange Drücken. Da das Doppelklicken leider nicht sehr zufriedenstellend ist, werde ich dies versuchen.
Ich werde eine SEQUENCE und ein DOIF erstellen und schauen, was besser funktioniert. Wenn es funktioniert... ;-)
Mein Fehler, ich hatte nicht auf dem Schirm, dass die Taster bei einem Tastendruck (pressed/released) mehrere Events senden und somit das DOIF bei [SCH_WZ_F_EnO_Thermokon] gleich mehrfach auslöst und somit die waitsame-Bedingunge erfüllen. U.a. dein Weg über state führt zum Ziel, weil dann nur auf state getriggert wird.
Du bekommst wie folgt alles in einem DOIF unter:
([SCH_WZ_F_EnO_Thermokon:state] eq "B0" or [SCH_WZ_F_EnO_Thermokon:state] eq "A0")(set set AC_GAR_FSR14_2x_1_Mauer_EnO_Elta off, set AC_GAR_FSR14_2x_2_Treppe_EnO_Elta off, set AC_GAR_FSR14_4x_1_BaumMauer_EnO_Elta off, set AC_GAR_FSR14_4x_2_MauerBaum_EnO_Elta off)
DOELSEIF ([SCH_WZ_F_EnO_Thermokon:state] eq "BI" or [SCH_WZ_F_EnO_Thermokon:state] eq "AI")(set set AC_GAR_FSR14_2x_1_Mauer_EnO_Elta on, set AC_GAR_FSR14_2x_2_Treppe_EnO_Elta on, set AC_GAR_FSR14_4x_1_BaumMauer_EnO_Elta on, set AC_GAR_FSR14_4x_2_MauerBaum_EnO_Elta on)
attr waitsame 2:2
attr do always
Falls ich jetzt nichts falsch zusammenkopiert habe.
Also, so langsam kommen Zweifel auf... ;D
Ich habe folgende SEQUENCE...
Internals:
DEF SCH_WZ_F_EnO_Thermokon:buttons:.pressed 0.5 SCH_WZ_F_EnO_Thermokon:BI 2:5 SCH_WZ_F_EnO_Thermokon:buttons:.released
FUUID 6181a6ab-f33f-b102-0578-136879ff9ff00220
IDX 0
MAX 5
NAME SEQ_SCH_WZ_BI
NOTIFYDEV SCH_WZ_F_EnO_Thermokon
NR 176
NTFY_ORDER 50-SEQ_SCH_WZ_BI
RE SCH_WZ_F_EnO_Thermokon:buttons:.pressed
STATE active
TS 0
TYPE sequence
Attributes:
die dieses DOIF triggern soll:
Internals:
DEF ([SEQ_SCH_WZ_BI:"trigger"]) (set AC_GAR_FSR14_2x_1_Mauer_EnO_Elta on) (set AC_GAR_FSR14_2x_2_Treppe_EnO_Elta on) (set AC_GAR_FSR14_4x_1_BaumMauer_EnO_Elta on) (set AC_GAR_FSR14_4x_2_MauerBaum_EnO_Elta on)
FUUID 6181a798-f33f-b102-5902-9ff38cc70a6f6407
MODEL FHEM
NAME DI_allGardenOnByWZ_BI
NOTIFYDEV SEQ_SCH_WZ_BI,global
NR 177
NTFY_ORDER 50-DI_allGardenOnByWZ_BI
STATE initialized
TYPE DOIF
VERSION 24905 2021-09-01 18:35:54
READINGS:
2021-11-02 22:21:21 cmd 0
2021-11-02 22:21:21 mode enabled
2021-11-02 22:21:21 state initialized
Regex:
accu:
collect:
cond:
SEQ_SCH_WZ_BI:
0:
&STATE ^SEQ_SCH_WZ_BI$
condition:
0 ::EventDoIf('SEQ_SCH_WZ_BI',$hash,'trigger',1)
do:
0:
0 set AC_GAR_FSR14_2x_1_Mauer_EnO_Elta on
1 set AC_GAR_FSR14_2x_2_Treppe_EnO_Elta on
2 set AC_GAR_FSR14_4x_1_BaumMauer_EnO_Elta on
3 set AC_GAR_FSR14_4x_2_MauerBaum_EnO_Elta on
1:
helper:
DEVFILTER ^global$|^SEQ_SCH_WZ_BI$
NOTIFYDEV global|SEQ_SCH_WZ_BI
globalinit 1
last_timer 0
sleeptimer -1
perlblock:
trigger:
all SEQ_SCH_WZ_BI
uiState:
uiTable:
Attributes:
do always
Kann mir jemand sagen, warum es nicht getriggert wird?
Was übersehe ich?
Auszug aus Event Monitor:
2021-11-02 23:22:37 EnOcean SCH_WZ_F_EnO_Thermokon buttons: pressed
2021-11-02 23:22:37 EnOcean SCH_WZ_F_EnO_Thermokon channelB: BI
2021-11-02 23:22:37 EnOcean SCH_WZ_F_EnO_Thermokon BI
2021-11-02 23:22:41 EnOcean SCH_WZ_F_EnO_Thermokon buttons: released
Zudem habe ich es mit dem DOIF inkl. DOELSEIF in etwas abgeänderter Form ausprobiert.
Meiner Meinung nach korrekt, auch was das waitsame 2:2 angeht. Egal, ob ich 2x BI oder 2x B0 nehme, es wird der Befehl zum Ausschalten gegeben.
Internals:
DEF ([SCH_WZ_F_EnO_Thermokon:state] eq "B0" or [SCH_KUE_F_EnO_Thermokon:state] eq "A0")
(set AC_GAR_FSR14_2x_1_Mauer_EnO_Elta off)
(set AC_GAR_FSR14_2x_2_Treppe_EnO_Elta off)
(set AC_GAR_FSR14_4x_1_BaumMauer_EnO_Elta off)
(set AC_GAR_FSR14_4x_2_MauerBaum_EnO_Elta off)
DOELSEIF ([SCH_WZ_F_EnO_Thermokon:state] eq "BI" or [SCH_KUE_F_EnO_Thermokon:state] eq "AI")
(set AC_GAR_FSR14_2x_1_Mauer_EnO_Elta on)
(set AC_GAR_FSR14_2x_2_Treppe_EnO_Elta on)
(set AC_GAR_FSR14_4x_1_BaumMauer_EnO_Elta on)
(set AC_GAR_FSR14_4x_2_MauerBaum_EnO_Elta on)
FUUID 61819f02-f33f-b102-7b1a-10ebbc9e042de1e0
MODEL FHEM
NAME DI_allLightsGarden
NOTIFYDEV global,SCH_KUE_F_EnO_Thermokon,SCH_WZ_F_EnO_Thermokon
NR 175
NTFY_ORDER 50-DI_allLightsGarden
STATE cmd_1
TYPE DOIF
VERSION 24905 2021-09-01 18:35:54
READINGS:
2021-11-02 23:22:42 Device SCH_WZ_F_EnO_Thermokon
2021-11-02 23:22:43 cmd 1.4
2021-11-02 23:22:43 cmd_event SCH_WZ_F_EnO_Thermokon
2021-11-02 23:22:43 cmd_nr 1
2021-11-02 23:22:43 cmd_seqnr 4
2021-11-02 23:22:42 e_SCH_WZ_F_EnO_Thermokon_state B0
2021-11-02 23:11:55 mode enabled
2021-11-02 23:22:43 state cmd_1
Regex:
accu:
collect:
cond:
SCH_KUE_F_EnO_Thermokon:
0:
state ^SCH_KUE_F_EnO_Thermokon$:^state:
1:
state ^SCH_KUE_F_EnO_Thermokon$:^state:
SCH_WZ_F_EnO_Thermokon:
0:
state ^SCH_WZ_F_EnO_Thermokon$:^state:
1:
state ^SCH_WZ_F_EnO_Thermokon$:^state:
attr:
cmdState:
wait:
waitdel:
waitsame:
2
2
condition:
0 ::ReadingValDoIf($hash,'SCH_WZ_F_EnO_Thermokon','state') eq "B0" or ::ReadingValDoIf($hash,'SCH_KUE_F_EnO_Thermokon','state') eq "A0"
1 ::ReadingValDoIf($hash,'SCH_WZ_F_EnO_Thermokon','state') eq "BI" or ::ReadingValDoIf($hash,'SCH_KUE_F_EnO_Thermokon','state') eq "AI"
do:
0:
0 set AC_GAR_FSR14_2x_1_Mauer_EnO_Elta off
1 set AC_GAR_FSR14_2x_2_Treppe_EnO_Elta off
2 set AC_GAR_FSR14_4x_1_BaumMauer_EnO_Elta off
3 set AC_GAR_FSR14_4x_2_MauerBaum_EnO_Elta off
1:
0 set AC_GAR_FSR14_2x_1_Mauer_EnO_Elta on
1 set AC_GAR_FSR14_2x_2_Treppe_EnO_Elta on
2 set AC_GAR_FSR14_4x_1_BaumMauer_EnO_Elta on
3 set AC_GAR_FSR14_4x_2_MauerBaum_EnO_Elta on
2:
helper:
DEVFILTER ^global$|^SCH_KUE_F_EnO_Thermokon$|^SCH_WZ_F_EnO_Thermokon$
NOTIFYDEV global|SCH_KUE_F_EnO_Thermokon|SCH_WZ_F_EnO_Thermokon
event buttons: pressed,channelB: B0,B0
globalinit 1
last_timer 0
sleeptimer -1
timerdev SCH_WZ_F_EnO_Thermokon
timerevent buttons: pressed,channelB: B0,B0
triggerDev SCH_WZ_F_EnO_Thermokon
timerevents:
buttons: pressed
channelB: B0
B0
timereventsState:
buttons: pressed
channelB: B0
state: B0
triggerEvents:
buttons: pressed
channelB: B0
B0
triggerEventsState:
buttons: pressed
channelB: B0
state: B0
internals:
readings:
all SCH_WZ_F_EnO_Thermokon:state SCH_KUE_F_EnO_Thermokon:state
trigger:
uiState:
uiTable:
Attributes:
do always
waitsame 2:2
Der entsprechende Auszug aus dem Event Monitor:
2021-11-02 23:22:37 DOIF DI_allLightsGarden waitsame: cmd_1
2021-11-02 23:22:37 EnOcean SCH_WZ_F_EnO_Thermokon buttons: pressed
2021-11-02 23:22:37 EnOcean SCH_WZ_F_EnO_Thermokon channelB: BI
2021-11-02 23:22:37 EnOcean SCH_WZ_F_EnO_Thermokon BI
2021-11-02 23:22:37 EnOcean SCH_WZ_F_EnO_Thermokon buttons: released
2021-11-02 23:22:38 structure str_GAR_Terra_Kue_Bel off
2021-11-02 23:22:38 EnOcean AC_GAR_FSR14_2x_1_Mauer_EnO_Elta block: unlock
2021-11-02 23:22:38 structure str_GAR_Terra_Kue_Bel off
2021-11-02 23:22:38 EnOcean AC_GAR_FSR14_2x_1_Mauer_EnO_Elta off
2021-11-02 23:22:38 DOIF DI_allLightsGarden cmd_nr: 1
2021-11-02 23:22:38 DOIF DI_allLightsGarden cmd_seqnr: 1
2021-11-02 23:22:38 DOIF DI_allLightsGarden cmd: 1.1
2021-11-02 23:22:38 DOIF DI_allLightsGarden cmd_event: SCH_WZ_F_EnO_Thermokon
2021-11-02 23:22:38 DOIF DI_allLightsGarden cmd_1_1
2021-11-02 23:22:38 structure str_GAR_Terra_Kue_Bel off
2021-11-02 23:22:38 EnOcean AC_GAR_FSR14_2x_2_Treppe_EnO_Elta block: unlock
2021-11-02 23:22:38 structure str_GAR_Terra_Kue_Bel off
2021-11-02 23:22:38 EnOcean AC_GAR_FSR14_2x_2_Treppe_EnO_Elta off
2021-11-02 23:22:38 DOIF DI_allLightsGarden cmd_nr: 1
2021-11-02 23:22:38 DOIF DI_allLightsGarden cmd_seqnr: 2
2021-11-02 23:22:38 DOIF DI_allLightsGarden cmd: 1.2
2021-11-02 23:22:38 DOIF DI_allLightsGarden cmd_event: SCH_WZ_F_EnO_Thermokon
2021-11-02 23:22:38 DOIF DI_allLightsGarden cmd_1_2
2021-11-02 23:22:38 EnOcean AC_GAR_FSR14_4x_1_BaumMauer_EnO_Elta block: unlock
2021-11-02 23:22:38 EnOcean AC_GAR_FSR14_4x_1_BaumMauer_EnO_Elta off
2021-11-02 23:22:38 DOIF DI_allLightsGarden cmd_nr: 1
2021-11-02 23:22:38 DOIF DI_allLightsGarden cmd_seqnr: 3
2021-11-02 23:22:38 DOIF DI_allLightsGarden cmd: 1.3
2021-11-02 23:22:38 DOIF DI_allLightsGarden cmd_event: SCH_WZ_F_EnO_Thermokon
2021-11-02 23:22:38 DOIF DI_allLightsGarden cmd_1_3
2021-11-02 23:22:38 EnOcean AC_GAR_FSR14_4x_2_MauerBaum_EnO_Elta block: unlock
2021-11-02 23:22:38 EnOcean AC_GAR_FSR14_4x_2_MauerBaum_EnO_Elta off
2021-11-02 23:22:38 DOIF DI_allLightsGarden cmd_nr: 1
2021-11-02 23:22:38 DOIF DI_allLightsGarden cmd_seqnr: 4
2021-11-02 23:22:38 DOIF DI_allLightsGarden cmd: 1.4
2021-11-02 23:22:38 DOIF DI_allLightsGarden cmd_event: SCH_WZ_F_EnO_Thermokon
2021-11-02 23:22:38 DOIF DI_allLightsGarden cmd_1
2021-11-02 23:22:38 EnOcean SCH_WZ_F_EnO_Thermokon buttons: pressed
2021-11-02 23:22:38 EnOcean SCH_WZ_F_EnO_Thermokon channelB: BI
2021-11-02 23:22:38 EnOcean SCH_WZ_F_EnO_Thermokon BI
2021-11-02 23:22:38 EnOcean SCH_WZ_F_EnO_Thermokon buttons: released
2021-11-02 23:22:38 structure str_GAR_Terra_Kue_Bel off
2021-11-02 23:22:38 EnOcean AC_GAR_FSR14_2x_1_Mauer_EnO_Elta off
2021-11-02 23:22:38 structure str_GAR_Terra_Kue_Bel off
2021-11-02 23:22:38 EnOcean AC_GAR_FSR14_2x_2_Treppe_EnO_Elta off
2021-11-02 23:22:42 DOIF DI_allLightsGarden waitsame: cmd_1
2021-11-02 23:22:42 EnOcean SCH_WZ_F_EnO_Thermokon buttons: pressed
2021-11-02 23:22:42 EnOcean SCH_WZ_F_EnO_Thermokon channelB: B0
2021-11-02 23:22:42 EnOcean SCH_WZ_F_EnO_Thermokon B0
2021-11-02 23:22:42 EnOcean SCH_WZ_F_EnO_Thermokon buttons: released
2021-11-02 23:22:43 structure str_GAR_Terra_Kue_Bel off
2021-11-02 23:22:43 EnOcean AC_GAR_FSR14_2x_1_Mauer_EnO_Elta block: unlock
2021-11-02 23:22:43 structure str_GAR_Terra_Kue_Bel off
2021-11-02 23:22:43 EnOcean AC_GAR_FSR14_2x_1_Mauer_EnO_Elta off
2021-11-02 23:22:43 DOIF DI_allLightsGarden cmd_nr: 1
...
Habe auch Varianten mit einem zusätzlichen DOELSE, waitsame nur mit 2, aber auch mal 2:2:0 (bei DOELSE) ausprobiert; ohne Erfolg.
Die SEQUENCE auch mit *, allerdings auch ohne Erfolg.
Mein DOIF oben habe ich mit einem physischen Taster und echtem Licht getestet. Ich bin mir sicher, das es funktioniert. Jedenfalls mit einem PTM210DB oder PTM215DB:-)
Ich würde an Deiner Stelle mal allles auf ein Minimal-Konstrukt zusammenstauchen. Mit Sequence bringst Du jetzt noch etwas ins Spiel, dass bei der Fehlersuche bestimmt nicht hilft.
Gemäß Deinem Event-Monitor triggert der Taster zweimal in zwei Sekunden, was dazu führt, dass waitsame erfüllt ist. Warum das passiert müsstest Du rausfinden.
2021-11-02 23:22:37 DOIF DI_allLightsGarden waitsame: cmd_1
2021-11-02 23:22:37 EnOcean SCH_WZ_F_EnO_Thermokon buttons: pressed
2021-11-02 23:22:37 EnOcean SCH_WZ_F_EnO_Thermokon channelB: BI
2021-11-02 23:22:37 EnOcean SCH_WZ_F_EnO_Thermokon BI
2021-11-02 23:22:37 EnOcean SCH_WZ_F_EnO_Thermokon buttons: released
....
2021-11-02 23:22:38 EnOcean SCH_WZ_F_EnO_Thermokon buttons: pressed
2021-11-02 23:22:38 EnOcean SCH_WZ_F_EnO_Thermokon channelB: BI
2021-11-02 23:22:38 EnOcean SCH_WZ_F_EnO_Thermokon BI
2021-11-02 23:22:38 EnOcean SCH_WZ_F_EnO_Thermokon buttons: released
...
Also einfach mal ganz unabhängig vom DOIF prüfen, was Deine Taster bei Tastendruck machen. Inwiefern die Structures im Log damit reinspielen müsstest Du auch mal schauen.
Weitere Ideen:
- Die Attribute event-min-interval oder event-on-change-reading helfen Dir vermutlich nicht
- Waitsame auf einen höheren Wert stellen, um einfach mal zu schauen, ob irgendetwas dazwischen triggert, was Du gar nicht ausgelöst hast
- Keine Befehlssequenzen im Ausführungsteil. Wenn ich es richtig im Kopf habe ist das langsamer und brauchst Du nur, wenn du mit wait zwischen den Sequenzen abeiten musst.
Zitat
Mein DOIF oben habe ich mit einem physischen Taster und echtem Licht getestet. Ich bin mir sicher, das es funktioniert. Jedenfalls mit einem PTM210DB oder PTM215DB:-)
Das nehme ich Dir ab! :)
Das DOIF ist wirklich nicht komplex und ich sehe es auch so, dass es 100%ig passen sollte.
Da mir nur noch ein Defekt des Schalters plausibel war, habe ich einen anderen genommen und siehe da, es lief!
Dann habe ich wieder den vermeintlich defekten Schalter hinzugezogen und dieser tut so als sei nichts gewesen und funktioniert bis auf Weiteres auch.
Nun muss ich davon ausgehen, dass das ganze Problem bei FHEM liegt. Es läuft trotz Neustarts zum größten Teil sehr träge, z.T. sind Seiten nicht erreichbar.
Der Event Monitor z.B. hängt immer hinterher obwohl nicht allzu viel gelistet wird. Beim Testschalten der DOIFs ging es mal sofort, aber meistens dauerte es ein paar mehr Sekunden bis das Licht aus- bzw. anging. Den Raspberry Charly als Hardware schließe ich aus.
Also, das DOIF betrachte ich als gelöst & bedanke mich bei Dir.
Nun mache ich mich noch an die SEQUENCE, damit ich diese Themen ein für alle Mal abhaken kann. ;)
Wäre klasse, wenn mir diesbezüglich jemand sagen könnte, ob es so korrekt und fehlerfrei ist. Somit kann ich den Fehler bei Schalter oder FHEM suchen.
thx & gruß
Bin nochmal in mich gegangen und habe den langen Tasterdruck so umgesetzt:
([SCH_SZ_F_EnO_Thermokon:buttons] eq "released" and [?SCH_SZ_F_EnO_Thermokon:state:sec]>3 and [?SCH_SZ_F_EnO_Thermokon:state:sec]<6 and [DY_LupusBWTestLampe] eq "on") (set DY_LupusBWTestLampe off) ...
Einfach & funktioniert! :)
Ja, das ist wirklich schön einfach. Bei der anderen Variante finde ich charmant, dass man nicht genau das zeitliche Interval treffen muss, sondern einfach nur den Taster gedrückt hält und man dann anhand der Aktion (z.B. Licht an), dass es funktioniert hat.