[erledigt] DOIF nur ausführen wenn Schalter "Short" gedrückt wird

Begonnen von PS915, 28 März 2019, 17:01:54

Vorheriges Thema - Nächstes Thema

PS915

Hallo zusammen,

ich würde gerne beim Verlassen des Hauses auf einen Schalter drücken. Danach sollen eine Reihen von Abfragen stattfinden und ggfs eine Warnmeldung per MP3 Gong ausgegeben werden, oder eine OK Meldung, wenn alles "in Ordnung" ist.
Ich habe testweise dieses DOIF erstellt mit dem ich aber noch ein Problem haben, wo ich aktuell nicht weiterkomme.

Und zwar möchte ich, dass eine Prüfung immer nur durch den Schalter angestoßen wird und nicht durch eines der Devices. Im Moment ist es der Fall, dass wenn ich alle Fenster schließe und der Button im State schon von dem vorherigen betätigen "Short" im State stehen hat, trotzdem das DOELSE ausgelöst wird obwohl ich den Schalter nicht gedrückt habe.

Das liegt wahrscheinlich daran, dass ich ja nur den State des Schalters abfrage und dieser natürlich schon einmal vorher gedrückt worden ist.
Ich möchte also, nur bei einem Tastendruck die DOIFS abarbeiten lassen. Ich bin relativ neu in der FHEM/DOIF Welt und habe bisher immer nur die Device-States ausgewertet. Eine Suche im Forum hat mir leider auch nicht geholfen.


Internals:
   CFGFN     
   DEF        ([taster1.btn1:"Short.*"] and (([window.test:state] eq "open") or ([window.buero:state] eq "open"))) ((set MP3 playTone 022), set LED led redL 10)
DOELSEIF ([taster1.btn1:"Short.*"] and (([window.velux_flur:state] eq "open") or ([window.velux_schlafzimmer:state] eq "open"))) ((set MP3 playTone 023), set LED led redL 10)
DOELSE (set LED led greenL 3)
   FUUID      5c9ce390-f33f-1bb7-f702-d280c5d3b1e07da3
   MODEL      FHEM
   NAME       mp3.leaving.home
   NR         1674
   NTFY_ORDER 50-mp3.leaving.home
   STATE      cmd_3
   TYPE       DOIF
   READINGS:
     2019-03-28 16:53:11   Device          taster1.btn1
     2019-03-28 16:53:11   cmd             3
     2019-03-28 16:53:11   cmd_event       taster1.btn1
     2019-03-28 16:53:11   cmd_nr          3
     2019-03-28 16:53:11   e_taster1.btn1_events Short 1_120 (to broadcast),trigger: Short_120,trigger_cnt: 120
     2019-03-28 16:49:49   e_window.test_state closed
     2019-03-28 16:46:28   mode            enabled
     2019-03-28 16:53:11   state           cmd_3
   Regex:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::EventDoIf('taster1.btn1',$hash,'Short.*',1) and ((::ReadingValDoIf($hash,'window.test','state') eq "open") or (::ReadingValDoIf($hash,'window.buero','state') eq "open"))
     1          ::EventDoIf('taster1.btn1',$hash,'Short.*',1) and ((::ReadingValDoIf($hash,'window.velux_flur','state') eq "open") or (::ReadingValDoIf($hash,'window.velux_schlafzimmer','state') eq "open"))
   devices:
     0           taster1.btn1 window.test window.buero
     1           taster1.btn1 window.velux_flur window.velux_schlafzimmer
     all         taster1.btn1 window.test window.buero window.velux_flur window.velux_schlafzimmer
   do:
     0:
       0          (set MP3 playTone 022), set LED led redL 10
     1:
       0          (set MP3 playTone 023), set LED led redL 10
     2:
       0          set LED led greenL 3
   helper:
     event      Short 1_120 (to broadcast)
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   taster1.btn1
     timerevent Short 1_120 (to broadcast)
     triggerDev taster1.btn1
     DOIF_eventas:
       cmd_nr: 3
       cmd: 3
       cmd_event: taster1.btn1
       state: cmd_3
     timerevents:
       Short 1_120 (to broadcast)
       trigger: Short_120
       trigger_cnt: 120
     timereventsState:
       state: Short 1_120 (to broadcast)
       trigger: Short_120
       trigger_cnt: 120
     triggerEvents:
       Short 1_120 (to broadcast)
       trigger: Short_120
       trigger_cnt: 120
     triggerEventsState:
       state: Short 1_120 (to broadcast)
       trigger: Short_120
       trigger_cnt: 120
   internals:
   itimer:
   readings:
     0           window.test:state window.buero:state
     1           window.velux_flur:state window.velux_schlafzimmer:state
     all         window.test:state window.buero:state window.velux_flur:state window.velux_schlafzimmer:state
   trigger:
     all         taster1.btn1
   uiState:
   uiTable:
Attributes:
   do         always
   room       MP3

Ellert

In der deutschsprachigen Befehlsreferenz zu DOIF gibt es ein Kapitel "...ohne Trigger", das sollte über das Inhaltsverzeichnis oder die Browsersuche zu finden sein.

Otto123

Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

PS915

Genial, danke für die schnelle Hilfe! Funktioniert super mit dem "?" vorweg!


Damian

#4
Zitat von: Otto123 am 28 März 2019, 17:29:29
statt [window -> [?window


Spielverderber  ;D

Wenn wir schon dabei sind zu korrigieren:

Beim DOIF kommt man meistens ohne .* anzugeben aus, da im Gegensatz zum notify standardmäßig nur nach Teilausdrücken gesucht wird.

hier also:  [taster1.btn1:"Short"]
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Otto123

Zitat von: Damian am 28 März 2019, 17:37:03
Spielverderber  ;D
Es war so verlockend kurz :) und der restliche Code von ihm war doch schon mal sooo gut  ;D
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz