DOIF: Bei wiederholtem Tastendruck innerhalb von 30 Sekunden anderer Befehl

Begonnen von heikoh81, 04 Dezember 2015, 18:27:53

Vorheriges Thema - Nächstes Thema

heikoh81

Hallo zusammen,

ich möchte mittels Homematic-6-fach-Wandtaster mehrere Markisen steuern (mit Homematic-Rolladenaktor).
Hierbei lege bspw. auf Button1 den Befehl "einfahren".

Nun möchte ich aber zusätzlich durch wiederholten Druck auf diesselbe Taste innerhalb von 30 Sekunden den Befehl "stop" senden.
Kann man sowas mit DOIF realisieren, z.b. mit do resetwait oder ähnlichem?
Aus der commandref konnte ich kein passendes Beispiel für mich ableiten.

Folgendes habe ich schon und funktioniert:

([Wandtaster_Wohnzimmer_Btn01:state] =~/Short/)
(set NAME=Markise_Pergola_Links:FILTER=STATE!=off off)

off = einfahren

Nun muss ich noch irgendwie den Stop-Befehl bei wiederholtem Druck senden können.
Ich hatte zunächst in Richtung eines 2. eigenständigen DOIFs überlegt, die nur gültig ist, wenn die Markise nicht in Position on/off ist, aber das geht nicht

  • weil ich nicht weiß, wie schnell der Homematic-Aktor seine Zustandsänderung ans System meldet
  • dann bei jedem aus- oder einfahr-Befehl von einer Zwischenposition sofort wieder der Stop-Befehl gesendet würde

Langer Tastendruck geht auch nicht, da habe ich schon einen anderen Befehl drauf.
Es muss also irgendwie festgelegt werden, dass der stop-Befehl nur max. 30 Sekunden nach einem davor erfolgten Tastendruck erfolgen darf.
Danach muss wieder der erste Befehl einfahren gesendet werden.

Wer könnte mir helfen?

Vielen Dank,
viele Grüße,
Heiko

Damian

Zitat von: heikoh81 am 04 Dezember 2015, 18:27:53
Halo zusammen,

ich möchte mittels Homematic-6-fach-Wandtaster mehrere Markisen steuern (mit Homematic-Rolladenaktor).
Hierbei lege bspw. auf Button1 den Befehl "einfahren".

Nun möchte ich aber zusätzlich durch wiederholten Druck auf diesselbe Taste innerhalb von 30 Sekunden den Befehl "stop" senden.
Kann man sowas mit DOIF realisieren, z.b. mit do resetwait oder ähnlichem?
Aus der commandref konnte ich kein passendes Beispiel für mich ableiten.

Folgendes habe ich schon und funktioniert:

([Wandtaster_Wohnzimmer_Btn01:state] =~/Short/)
(set NAME=Markise_Pergola_Links:FILTER=STATE!=off off)

off = einfahren

Nun muss ich noch irgendwie den Stop-Befehl bei wiederholtem Druck senden können.
Ich hatte zunächst in Richtung eines 2. eigenständigen DOIFs überlegt, die nur gültig ist, wenn die Markise nicht in Position on/off ist, aber das geht nicht

  • weil ich nicht weiß, wie schnell der Homematic-Aktor seine Zustandsänderung ans System meldet
  • dann bei jedem aus- oder einfahr-Befehl von einer Zwischenposition sofort wieder der Stop-Befehl gesendet würde

Langer Tastendruck geht auch nicht, da habe ich schon einen anderen Befehl drauf.
Es muss also irgendwie festgelegt werden, dass der stop-Befehl nur max. 30 Sekunden nach einem davor erfolgten Tastendruck erfolgen darf.
Danach muss wieder der erste Befehl einfahren gesendet werden.

Wer könnte mir helfen?

Vielen Dank,
viele Grüße,
Heiko

Das kannst du sogar in einem DOIF unterbringen :)


define di_Wandtaster ([Wandtaster_Wohnzimmer_Btn01:state] =~/Short/ and [?di_Wandtaster] ne "cmd_1")
  (set NAME=Markise_Pergola_Links:FILTER=STATE!=off off)
DOELSEIF ([Wandtaster_Wohnzimmer_Btn01:state] =~/Short/)
  (set Markise_Pergola_Links stop)

attr di_Wandtaster waitsame 0:30


Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

heikoh81

Klasse, danke für die schnelle Antwort.
Genau so hatte ich mir das vorgestellt.

Ich hatte mir zwischenzeitlich mit einem Hilfskonstrukt mit einem Dummy je Taster und wait beholfen, aber da hätte ich wieder unzählige Dummies benötigt.

define di_Wandtaster_Wohnzimmer_Btn02_Betaetigt_kurz_Markise_links_ausfahren DOIF ([Wandtaster_Wohnzimmer_Btn02:state] =~/Short/ and [?Wandtaster_Wohnzimmer_Btn02_BetaetigtDummy] eq "off")\
(set NAME=Markise_Pergola_Links:FILTER=STATE!=on on)\
(set Wandtaster_Wohnzimmer_Btn02_BetaetigtDummy on)\
(set Wandtaster_Wohnzimmer_Btn02_BetaetigtDummy off)\
DOELSEIF ([Wandtaster_Wohnzimmer_Btn02:state] =~/Short/ and [?Wandtaster_Wohnzimmer_Btn02_BetaetigtDummy] eq "on")\
(set Markise_Pergola_Links stop)\
(set Wandtaster_Wohnzimmer_Btn02_BetaetigtDummy off)
attr di_Wandtaster_Wohnzimmer_Btn02_Betaetigt_kurz_Markise_links_ausfahren room Fernbedienung
attr di_Wandtaster_Wohnzimmer_Btn02_Betaetigt_kurz_Markise_links_ausfahren wait 0,0,35


Deine Lösung ist natürlich viel besser!

Damian

Zitat von: heikoh81 am 04 Dezember 2015, 19:03:17
Klasse, danke für die schnelle Antwort.
Genau so hatte ich mir das vorgestellt.

Ich hatte mir zwischenzeitlich mit einem Hilfskonstrukt mit einem Dummy je Taster und wait beholfen, aber da hätte ich wieder unzählige Dummies benötigt.

define di_Wandtaster_Wohnzimmer_Btn02_Betaetigt_kurz_Markise_links_ausfahren DOIF ([Wandtaster_Wohnzimmer_Btn02:state] =~/Short/ and [?Wandtaster_Wohnzimmer_Btn02_BetaetigtDummy] eq "off")\
(set NAME=Markise_Pergola_Links:FILTER=STATE!=on on)\
(set Wandtaster_Wohnzimmer_Btn02_BetaetigtDummy on)\
(set Wandtaster_Wohnzimmer_Btn02_BetaetigtDummy off)\
DOELSEIF ([Wandtaster_Wohnzimmer_Btn02:state] =~/Short/ and [?Wandtaster_Wohnzimmer_Btn02_BetaetigtDummy] eq "on")\
(set Markise_Pergola_Links stop)\
(set Wandtaster_Wohnzimmer_Btn02_BetaetigtDummy off)
attr di_Wandtaster_Wohnzimmer_Btn02_Betaetigt_kurz_Markise_links_ausfahren room Fernbedienung
attr di_Wandtaster_Wohnzimmer_Btn02_Betaetigt_kurz_Markise_links_ausfahren wait 0,0,35


Deine Lösung ist natürlich viel besser!

ja, ich finde die kurze Version selbst sogar so gut, dass ich sie in die Commandref aufnehme. :)

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

heikoh81

Hallo Damian,

so ganz funktioniert es mit dem von dir genannten Beispiel noch nicht.

  • Erster kurzer Druck: Markise fährt aus
  • Zweiter kurzer Druck nach ca. 5 Sekunden: nichts passiert
  • Dritter kurzer Druck: Markise stoppt
Warum wird der zweite Druck ignoriert?
attr do always habe ich auch schon probiert - der zweite Druck wird ebenfalls ignoriert.


define di_Wandtaster DOIF ([Wandtaster_Wohnzimmer_Btn03:state] =~/Short/ and [?di_Wandtaster] ne "cmd_1")\
(set NAME=Markise_Pergola_Rechts:FILTER=STATE!=off off)\
DOELSEIF ([Wandtaster_Wohnzimmer_Btn03:state] =~/Short/)\
  (set Markise_Pergola_Rechts stop)
attr di_Wandtaster waitsame 0:30



Internals:
   CFGFN
   DEF        ([Wandtaster_Wohnzimmer_Btn03:state] =~/Short/ and [?di_Wandtaster_Wohnzimmer_Btn03_Betaetigt_kurz_Markise_rechts_ausfahren] ne "cmd_1")
(set NAME=Markise_Pergola_Rechts:FILTER=STATE!=off off)
DOELSEIF ([Wandtaster_Wohnzimmer_Btn03:state] =~/Short/)
  (set Markise_Pergola_Rechts stop)
   NAME       di_Wandtaster_Wohnzimmer_Btn03_Betaetigt_kurz_Markise_rechts_ausfahren
   NR         9464
   NTFY_ORDER 50-di_Wandtaster_Wohnzimmer_Btn03_Betaetigt_kurz_Markise_rechts_ausfahren
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-12-04 21:16:53   Device          Wandtaster_Wohnzimmer_Btn03
     2015-12-04 21:16:48   cmd_event       Wandtaster_Wohnzimmer_Btn03
     2015-12-04 21:16:48   cmd_nr          1
     2015-12-04 21:16:53   e_Wandtaster_Wohnzimmer_Btn03_state Short (to vccu)
     2015-12-04 21:16:48   state           cmd_1
     2015-12-04 21:16:53   waitsame        cmd_2
   Condition:
     0          ReadingValDoIf('Wandtaster_Wohnzimmer_Btn03','state','') =~/Short/ and InternalDoIf('di_Wandtaster_Wohnzimmer_Btn03_Betaetigt_kurz_Markise_rechts_ausfahren','STATE','') ne "cmd_1"
     1          ReadingValDoIf('Wandtaster_Wohnzimmer_Btn03','state','') =~/Short/
   Devices:
     0           Wandtaster_Wohnzimmer_Btn03
     1           Wandtaster_Wohnzimmer_Btn03
     all         Wandtaster_Wohnzimmer_Btn03
   Do:
     0:
       0          set NAME=Markise_Pergola_Rechts:FILTER=STATE!=off off
     1:
       0          set Markise_Pergola_Rechts stop
   Helper:
     globalinit 1
     last_timer 0
     sleeptimer -1
   Internals:
   Itimer:
   Readings:
     0           Wandtaster_Wohnzimmer_Btn03:state
     1           Wandtaster_Wohnzimmer_Btn03:state
     all         Wandtaster_Wohnzimmer_Btn03:state
   State:
   Timerfunc:
   Trigger:
Attributes:
   waitsame   0:30


Viele Grüße,
Heiko

Damian

Zitat von: heikoh81 am 04 Dezember 2015, 21:23:09
Hallo Damian,

so ganz funktioniert es mit dem von dir genannten Beispiel noch nicht.

  • Erster kurzer Druck: Markise fährt aus
  • Zweiter kurzer Druck nach ca. 5 Sekunden: nichts passiert
  • Dritter kurzer Druck: Markise stoppt
Warum wird der zweite Druck ignoriert?
attr do always habe ich auch schon probiert - der zweite Druck wird ebenfalls ignoriert.


define di_Wandtaster DOIF ([Wandtaster_Wohnzimmer_Btn03:state] =~/Short/ and [?di_Wandtaster] ne "cmd_1")\
(set NAME=Markise_Pergola_Rechts:FILTER=STATE!=off off)\
DOELSEIF ([Wandtaster_Wohnzimmer_Btn03:state] =~/Short/)\
  (set Markise_Pergola_Rechts stop)
attr di_Wandtaster waitsame 0:30



Internals:
   CFGFN
   DEF        ([Wandtaster_Wohnzimmer_Btn03:state] =~/Short/ and [?di_Wandtaster_Wohnzimmer_Btn03_Betaetigt_kurz_Markise_rechts_ausfahren] ne "cmd_1")
(set NAME=Markise_Pergola_Rechts:FILTER=STATE!=off off)
DOELSEIF ([Wandtaster_Wohnzimmer_Btn03:state] =~/Short/)
  (set Markise_Pergola_Rechts stop)
   NAME       di_Wandtaster_Wohnzimmer_Btn03_Betaetigt_kurz_Markise_rechts_ausfahren
   NR         9464
   NTFY_ORDER 50-di_Wandtaster_Wohnzimmer_Btn03_Betaetigt_kurz_Markise_rechts_ausfahren
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-12-04 21:16:53   Device          Wandtaster_Wohnzimmer_Btn03
     2015-12-04 21:16:48   cmd_event       Wandtaster_Wohnzimmer_Btn03
     2015-12-04 21:16:48   cmd_nr          1
     2015-12-04 21:16:53   e_Wandtaster_Wohnzimmer_Btn03_state Short (to vccu)
     2015-12-04 21:16:48   state           cmd_1
     2015-12-04 21:16:53   waitsame        cmd_2
   Condition:
     0          ReadingValDoIf('Wandtaster_Wohnzimmer_Btn03','state','') =~/Short/ and InternalDoIf('di_Wandtaster_Wohnzimmer_Btn03_Betaetigt_kurz_Markise_rechts_ausfahren','STATE','') ne "cmd_1"
     1          ReadingValDoIf('Wandtaster_Wohnzimmer_Btn03','state','') =~/Short/
   Devices:
     0           Wandtaster_Wohnzimmer_Btn03
     1           Wandtaster_Wohnzimmer_Btn03
     all         Wandtaster_Wohnzimmer_Btn03
   Do:
     0:
       0          set NAME=Markise_Pergola_Rechts:FILTER=STATE!=off off
     1:
       0          set Markise_Pergola_Rechts stop
   Helper:
     globalinit 1
     last_timer 0
     sleeptimer -1
   Internals:
   Itimer:
   Readings:
     0           Wandtaster_Wohnzimmer_Btn03:state
     1           Wandtaster_Wohnzimmer_Btn03:state
     all         Wandtaster_Wohnzimmer_Btn03:state
   State:
   Timerfunc:
   Trigger:
Attributes:
   waitsame   0:30


Viele Grüße,
Heiko

Bei mir funktioniert es korrekt. Ich vermute, dass bei dir mehrere Trigger mit short kommen - typisch HM, dann müsstest du deine short-Abfrage genauer spezifizieren, um es auf einen Trigger pro Tastendruck zu beschränken.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

heikoh81

trigger = Short_29
trigger_cnt = 29

Wie soll ich das weiter einschränken?
Wieso funktioniert es dann reproduzierbar immer beim 3. Tastendruck?

Damian

Zitat von: heikoh81 am 04 Dezember 2015, 21:49:53
trigger = Short_29
trigger_cnt = 29

Wie soll ich das weiter einschränken?
Wieso funktioniert es dann reproduzierbar immer beim 3. Tastendruck?

Poste mal die Events von einem Short-Tastendruck.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

heikoh81


Events (Filter:Wandtaster_Wohnzimmer_Btn04) [Reset]:
2015-12-04 21:55:38 CUL_HM Wandtaster_Wohnzimmer Wandtaster_Wohnzimmer_Btn04 Short
2015-12-04 21:55:38 DOIF di_Wandtaster_Wohnzimmer_Btn04_Betaetigt_kurz_Markise_rechts_ausfahren cmd_nr: 1
2015-12-04 21:55:38 DOIF di_Wandtaster_Wohnzimmer_Btn04_Betaetigt_kurz_Markise_rechts_ausfahren cmd_event: Wandtaster_Wohnzimmer_Btn04
2015-12-04 21:55:38 DOIF di_Wandtaster_Wohnzimmer_Btn04_Betaetigt_kurz_Markise_rechts_ausfahren cmd_1
2015-12-04 21:55:38 CUL_HM Wandtaster_Wohnzimmer_Btn04 Short (to vccu)
2015-12-04 21:55:38 CUL_HM Wandtaster_Wohnzimmer_Btn04 trigDst_vccu: noConfig
2015-12-04 21:55:38 CUL_HM Wandtaster_Wohnzimmer_Btn04 trigger: Short_30
2015-12-04 21:55:38 CUL_HM Wandtaster_Wohnzimmer_Btn04 trigger_cnt: 30
2015-12-04 21:55:43 CUL_HM Wandtaster_Wohnzimmer Wandtaster_Wohnzimmer_Btn04 Short
2015-12-04 21:55:43 DOIF di_Wandtaster_Wohnzimmer_Btn04_Betaetigt_kurz_Markise_rechts_ausfahren waitsame: cmd_2
2015-12-04 21:55:43 CUL_HM Wandtaster_Wohnzimmer_Btn04 Short (to vccu)
2015-12-04 21:55:43 CUL_HM Wandtaster_Wohnzimmer_Btn04 trigDst_vccu: noConfig
2015-12-04 21:55:43 CUL_HM Wandtaster_Wohnzimmer_Btn04 trigger: Short_31
2015-12-04 21:55:43 CUL_HM Wandtaster_Wohnzimmer_Btn04 trigger_cnt: 31
2015-12-04 21:55:47 CUL_HM Wandtaster_Wohnzimmer Wandtaster_Wohnzimmer_Btn04 Short
2015-12-04 21:55:47 DOIF di_Wandtaster_Wohnzimmer_Btn04_Betaetigt_kurz_Markise_rechts_ausfahren cmd_nr: 2
2015-12-04 21:55:47 DOIF di_Wandtaster_Wohnzimmer_Btn04_Betaetigt_kurz_Markise_rechts_ausfahren cmd_event: Wandtaster_Wohnzimmer_Btn04
2015-12-04 21:55:47 DOIF di_Wandtaster_Wohnzimmer_Btn04_Betaetigt_kurz_Markise_rechts_ausfahren cmd_2
2015-12-04 21:55:47 CUL_HM Wandtaster_Wohnzimmer_Btn04 Short (to vccu)
2015-12-04 21:55:47 CUL_HM Wandtaster_Wohnzimmer_Btn04 trigDst_vccu: noConfig
2015-12-04 21:55:47 CUL_HM Wandtaster_Wohnzimmer_Btn04 trigger: Short_32
2015-12-04 21:55:47 CUL_HM Wandtaster_Wohnzimmer_Btn04 trigger_cnt: 32
2015-12-04 21:56:35 CUL_HM Wandtaster_Wohnzimmer Wandtaster_Wohnzimmer_Btn04 Short
2015-12-04 21:56:36 DOIF di_Wandtaster_Wohnzimmer_Btn04_Betaetigt_kurz_Markise_rechts_ausfahren cmd_nr: 1
2015-12-04 21:56:36 DOIF di_Wandtaster_Wohnzimmer_Btn04_Betaetigt_kurz_Markise_rechts_ausfahren cmd_event: Wandtaster_Wohnzimmer_Btn04
2015-12-04 21:56:36 DOIF di_Wandtaster_Wohnzimmer_Btn04_Betaetigt_kurz_Markise_rechts_ausfahren cmd_1
2015-12-04 21:56:36 CUL_HM Wandtaster_Wohnzimmer_Btn04 Short (to vccu)
2015-12-04 21:56:36 CUL_HM Wandtaster_Wohnzimmer_Btn04 trigDst_vccu: noConfig
2015-12-04 21:56:36 CUL_HM Wandtaster_Wohnzimmer_Btn04 trigger: Short_33
2015-12-04 21:56:36 CUL_HM Wandtaster_Wohnzimmer_Btn04 trigger_cnt: 33
2015-12-04 21:56:39 CUL_HM Wandtaster_Wohnzimmer Wandtaster_Wohnzimmer_Btn04 Short
2015-12-04 21:56:39 DOIF di_Wandtaster_Wohnzimmer_Btn04_Betaetigt_kurz_Markise_rechts_ausfahren waitsame: cmd_2
2015-12-04 21:56:39 CUL_HM Wandtaster_Wohnzimmer_Btn04 Short (to vccu)
2015-12-04 21:56:39 CUL_HM Wandtaster_Wohnzimmer_Btn04 trigDst_vccu: noConfig
2015-12-04 21:56:39 CUL_HM Wandtaster_Wohnzimmer_Btn04 trigger: Short_34
2015-12-04 21:56:39 CUL_HM Wandtaster_Wohnzimmer_Btn04 trigger_cnt: 34
2015-12-04 21:56:41 CUL_HM Wandtaster_Wohnzimmer Wandtaster_Wohnzimmer_Btn04 Short
2015-12-04 21:56:41 DOIF di_Wandtaster_Wohnzimmer_Btn04_Betaetigt_kurz_Markise_rechts_ausfahren cmd_nr: 2
2015-12-04 21:56:41 DOIF di_Wandtaster_Wohnzimmer_Btn04_Betaetigt_kurz_Markise_rechts_ausfahren cmd_event: Wandtaster_Wohnzimmer_Btn04
2015-12-04 21:56:41 DOIF di_Wandtaster_Wohnzimmer_Btn04_Betaetigt_kurz_Markise_rechts_ausfahren cmd_2
2015-12-04 21:56:41 CUL_HM Wandtaster_Wohnzimmer_Btn04 Short (to vccu)
2015-12-04 21:56:41 CUL_HM Wandtaster_Wohnzimmer_Btn04 trigDst_vccu: noConfig
2015-12-04 21:56:41 CUL_HM Wandtaster_Wohnzimmer_Btn04 trigger: Short_35
2015-12-04 21:56:41 CUL_HM Wandtaster_Wohnzimmer_Btn04 trigger_cnt: 35


Erstaunlicherweise verhält sich nun Btn03 zum Einfahren "komisch".
Erst beim dritten Tastendruck fährt die Markise ein.

Damian

OK. Mein Fehler. Ich hatte stop als Doppelklick realisiert - wäre auch eine Alternative, aber das wolltest du ja nicht.
Es wäre doch gelacht, wenn es mit einem DOIF nicht ginge ;)
also:

define di_Wandtaster DOIF ([Wandtaster_Wohnzimmer_Btn03:state] =~/Short/ and [?di_Wandtaster] ne "cmd_1_1")
(set NAME=Markise_Pergola_Rechts:FILTER=STATE!=off off) ()
DOELSEIF ([Wandtaster_Wohnzimmer_Btn03:state] =~/Short/ and [?di_Wandtaster] eq "cmd_1_1")
  (set Markise_Pergola_Rechts stop)
attr di_Wandtaster wait 0,30



Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

heikoh81

Coole Sache, dass man auch einen Doppelklick realisieren kann.
Das wusste ich einfach nicht.

Somit habe ich jetzt beide Beispiele - vielleicht sollten auch beide in die Commandref?
Testen werde ich es morgen.

Nochmal vielen Dank,
viele Grüße,
Heiko

heikoh81

Hallo Damian,

ich melde mich nochmals zu diesem Thema, da ich nach 1 Monat Langzeit-Beobachtung feststellen musste, dass das Senden von "Stop" innerhalb eines bestimmten Zeitraums mit deinem Beispiel leider nicht immer zuverlässig funktioniert. Ich kann es nicht richtig reproduzieren, aber manchmal wird einige Sekunden nach dem ersten Tastendruck bei erneutem Tastendruck kein Stop gesendet. Die Taste zeigt dann erstmal eine Weile gar keine Reaktion mehr.

Meine umständlichere Lösung mit Schaltung eines Dummies "Wandtaster_Schlafzimmer_Fernbedienung04_Btn01_kurz_AKTIVDummy" als Erkennung, ob man sich in der Fahrt-Phase befindet, scheint zuverlässiger zu funktionieren:

(([Wandtaster_Schlafzimmer_Btn01] =~/Short/ or [Fernbedienung04_Btn01] =~/Short/) and [?Wandtaster_Schlafzimmer_Fernbedienung04_Btn01_kurz_AKTIVDummy] ne "on")
(set Wandtaster_Schlafzimmer_Fernbedienung04_Btn01_kurz_AKTIVDummy on)
(set NAME=1_RSchlafBodentief:FILTER=STATE!=offen offen)
(set Wandtaster_Schlafzimmer_Fernbedienung04_Btn01_kurz_AKTIVDummy off)
DOELSEIF (([Wandtaster_Schlafzimmer_Btn01] =~/Short/ or [Fernbedienung04_Btn01] =~/Short/) and [?Wandtaster_Schlafzimmer_Fernbedienung04_Btn01_kurz_AKTIVDummy] eq "on")
  (set 1_RSchlafBodentief stop)
(set Wandtaster_Schlafzimmer_Fernbedienung04_Btn01_kurz_AKTIVDummy off)

attr do always
attr wait 0,0,30:0,0

Dein Vorschlag, der nicht immer funktioniert:

((([Wandtaster_Schlafzimmer_Btn04] =~/Short/) or ([Fernbedienung04_Btn04] =~/Short/)) and [?di_Wandtaster_Schlafzimmer_Fernbedienung04_Btn04_Betaetigt_kurz_Bodentief_schliessen] ne "cmd_1_1")
(set NAME=1_RSchlafSchraeg:FILTER=STATE!=geschlossen geschlossen) ()
DOELSEIF ((([Wandtaster_Schlafzimmer_Btn04]) =~/Short/ or ([Fernbedienung04_Btn04] =~/Short/)) and [?di_Wandtaster_Schlafzimmer_Fernbedienung04_Btn04_Betaetigt_kurz_Bodentief_schliessen] eq "cmd_1_1")
  (set 1_RSchlafSchraeg stop)

attr do always
attr wait 0,30

Viele Grüße,
Heiko

heikoh81

Hallo Damian,

ich möchte hiermit dieses Thema nochmal nach oben schieben, weil das beschriebene Problem noch immer besteht.
Ich verwende momentan nur noch die Lösung mit einem Hilfs-Dummy, weil ich bei der Auswertung von
((([Wandtaster_Schlafzimmer_Btn04] =~/Short/) or ([Fernbedienung04_Btn04] =~/Short/)) and [?di_Wandtaster_Schlafzimmer_Fernbedienung04_Btn04_Betaetigt_kurz_Bodentief_schliessen] ne "cmd_1_1")
noch öfters das Problem hatte, dass der Befehl erst beim zweiten Tastendruck ausgeführt wurde.

Allerdings kommt es auch bei der Lösung mit Dummy immer wieder, aber nicht regelmäßig, vor, dass beim ersten Tastendruck der DOELSEIF-Fall ausgeführt wird.
Das sehe ich im Log, weil der Stop-Befehl an den Aktor gesendet wird:
Um :43 war mein erster Tastendruck - keine Reaktion des Aktors.
Um :54 dann nochmal gedrückt - Befehl zum Runterfahren des Rolladens wird korrekt ausgeführt.

2016.05.01 21:52:43 3: CUL_HM set 1_RSchlafSchraeg stop
2016.05.01 21:52:54 3: CUL_HM set 1_RSchlafSchraeg 0

Ich meine, dass es immer nur bei Btn04 passiert - dasselbe DOIF verwende ich für einen anderen Rolladen auf Btn02, da habe ich das Problem noch nicht beobachtet.

Eventuell hängt es damit zusammen, dass es eine Homematic-Verbindung ist, die an einer vccu angemeldet ist.
Vielleicht werden da mehrere Events hintereinander generiert, die zwar das DOIF triggern, aber einen Bruchteil danach gleich den DOELSEIF-Fall mit dem "stop"?
Deshalb habe ich attr cmdpause 2:2 hinzugefügt, um eine solche Doppel-Ausführung eigentlich zu verhindert.

Mein Doif:

(([Wandtaster_Schlafzimmer_Btn04:"Short"] or [8fachFernbedienung01_Btn04:"Short"]) and [?Wandtaster_Schlafzimmer_8fachFernbedienung01_Btn04_kurz_AKTIVDummy] ne "on")
(set Wandtaster_Schlafzimmer_8fachFernbedienung01_Btn04_kurz_AKTIVDummy on)
(set NAME=1_RSchlafSchraeg:FILTER=STATE!=geschlossen geschlossen)
(set Wandtaster_Schlafzimmer_8fachFernbedienung01_Btn04_kurz_AKTIVDummy off)
DOELSEIF (([Wandtaster_Schlafzimmer_Btn04:"Short"] or [8fachFernbedienung01_Btn04:"Short"]) and [?Wandtaster_Schlafzimmer_8fachFernbedienung01_Btn04_kurz_AKTIVDummy] eq "on")
  (set 1_RSchlafSchraeg stop)
(set Wandtaster_Schlafzimmer_8fachFernbedienung01_Btn04_kurz_AKTIVDummy off)


list:

Internals:
   DEF        (([Wandtaster_Schlafzimmer_Btn04:"Short"] or [8fachFernbedienung01_Btn04:"Short"]) and [?Wandtaster_Schlafzimmer_8fachFernbedienung01_Btn04_kurz_AKTIVDummy] ne "on")
(set Wandtaster_Schlafzimmer_8fachFernbedienung01_Btn04_kurz_AKTIVDummy on)
(set NAME=1_RSchlafSchraeg:FILTER=STATE!=geschlossen geschlossen)
(set Wandtaster_Schlafzimmer_8fachFernbedienung01_Btn04_kurz_AKTIVDummy off)
DOELSEIF (([Wandtaster_Schlafzimmer_Btn04:"Short"] or [8fachFernbedienung01_Btn04:"Short"]) and [?Wandtaster_Schlafzimmer_8fachFernbedienung01_Btn04_kurz_AKTIVDummy] eq "on")
  (set 1_RSchlafSchraeg stop)
(set Wandtaster_Schlafzimmer_8fachFernbedienung01_Btn04_kurz_AKTIVDummy off)
   NAME       di_Wandtaster_Schlafzimmer_8fachFernbedienung01_Btn04_Betaetigt_kurz_Schraeg_schliessen_mit_Dummy
   NR         2752
   NTFY_ORDER 50-di_Wandtaster_Schlafzimmer_8fachFernbedienung01_Btn04_Betaetigt_kurz_Schraeg_schliessen_mit_Dummy
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2016-05-01 21:52:54   Device          8fachFernbedienung01_Btn04
     2016-05-01 21:53:24   cmd_event       8fachFernbedienung01_Btn04
     2016-05-01 21:53:24   cmd_nr          1
     2016-05-01 21:53:24   cmd_seqnr       3
     2016-05-01 21:52:54   e_8fachFernbedienung01_Btn04_events Short (to vccu),trigDst_vccu: noConfig,trigger: Short_204,trigger_cnt: 204
     2016-04-22 22:57:56   e_Wandtaster_Schlafzimmer_Btn04_events Short (to broadcast),trigger: Short_26,trigger_cnt: 26
     2016-05-01 21:53:24   state           cmd_1
     2016-05-01 21:53:24   wait_timer      no timer
   Condition:
     0          (EventDoIf('Wandtaster_Schlafzimmer_Btn04',$hash,'Short',1) or EventDoIf('8fachFernbedienung01_Btn04',$hash,'Short',1)) and InternalDoIf($hash,'Wandtaster_Schlafzimmer_8fachFernbedienung01_Btn04_kurz_AKTIVDummy','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) ne "on"
     1          (EventDoIf('Wandtaster_Schlafzimmer_Btn04',$hash,'Short',1) or EventDoIf('8fachFernbedienung01_Btn04',$hash,'Short',1)) and InternalDoIf($hash,'Wandtaster_Schlafzimmer_8fachFernbedienung01_Btn04_kurz_AKTIVDummy','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "on"
   Devices:
     0           Wandtaster_Schlafzimmer_Btn04 8fachFernbedienung01_Btn04
     1           Wandtaster_Schlafzimmer_Btn04 8fachFernbedienung01_Btn04
     all         Wandtaster_Schlafzimmer_Btn04 8fachFernbedienung01_Btn04
   Do:
     0:
       0          set Wandtaster_Schlafzimmer_8fachFernbedienung01_Btn04_kurz_AKTIVDummy on
       1          set NAME=1_RSchlafSchraeg:FILTER=STATE!=geschlossen geschlossen
       2          set Wandtaster_Schlafzimmer_8fachFernbedienung01_Btn04_kurz_AKTIVDummy off
     1:
       0          set 1_RSchlafSchraeg stop
       1          set Wandtaster_Schlafzimmer_8fachFernbedienung01_Btn04_kurz_AKTIVDummy off
   Helper:
     event      Short (to vccu)
     globalinit 1
     last_timer 0
     sleepdevice 8fachFernbedienung01_Btn04
     sleepsubtimer -1
     sleeptimer -1
     timerdev   8fachFernbedienung01_Btn04
     timerevent Short (to vccu)
     triggerDev 8fachFernbedienung01_Btn04
     timerevents:
       Short (to vccu)
       trigDst_vccu: noConfig
       trigger: Short_204
       trigger_cnt: 204
     triggerEvents:
       Short (to vccu)
       trigDst_vccu: noConfig
       trigger: Short_204
       trigger_cnt: 204
   Internals:
     0           Wandtaster_Schlafzimmer_8fachFernbedienung01_Btn04_kurz_AKTIVDummy:STATE
     1           Wandtaster_Schlafzimmer_8fachFernbedienung01_Btn04_kurz_AKTIVDummy:STATE
     all         Wandtaster_Schlafzimmer_8fachFernbedienung01_Btn04_kurz_AKTIVDummy:STATE
   Itimer:
   Readings:
   Regexp:
     0:
     1:
     All:
   State:
   Trigger:
     all         Wandtaster_Schlafzimmer_Btn04 8fachFernbedienung01_Btn04
Attributes:
   cmdpause   2:2
   disable    0
   do         always
   group      51_Wandtaster_Schlafzimmer
   room       Fernbedienung
   sortby     37
   wait       0,0,30:0,0


Viele Grüße,
Heiko