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
In der deutschsprachigen Befehlsreferenz zu DOIF gibt es ein Kapitel "...ohne Trigger", das sollte über das Inhaltsverzeichnis oder die Browsersuche zu finden sein.
statt [window -> [?window
Gruß Otto
Genial, danke für die schnelle Hilfe! Funktioniert super mit dem "?" vorweg!
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"]
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