Hallo,
ich nutze momentan folgenden doof der mir den Status meiner Fenster im Erdgeschoss nennt.
Internals:
CFGFN
DEF ([#"fenster_eg_.*_status$":state:"open.*|tilted"] > 0)
(
set $SELF openWindowsCount [#"fenster_eg_.*_status$":state:"open.*|tilted"],
set $SELF closedWindowsCount [#"fenster_eg_.*_status$":state:"closed"],
set $SELF allWindowsCount [#"fenster_eg_.*_status$":state:".*"],
set $SELF openWindowsState "not-closed"
)
DOELSE
(
set $SELF openWindowsCount 0,
set $SELF closedWindowsCount [#"fenster_eg_.*_status$":state:"closed"],
set $SELF openWindowsState closed,
set $SELF allWindowsCount [#"fenster_eg_.*_status$":state:".*"],
)
DOIFDEV ^global$|fenster_eg_.*_status$
FUUID 5f95ac63-f33f-34fb-48d8-a17c4d0987a6977c
MODEL FHEM
NAME Monitoring.DOIF.Fenster
NR 2897
NTFY_ORDER 50-Monitoring.DOIF.Fenster
STATE open:0 <br> closed:4 <br> gesamt:4
TYPE DOIF
VERSION 22913 2020-10-04 21:46:02
Helper:
DBLOG:
cmd:
DBLogging:
TIME 1603644515.92808
VALUE 0
mode:
DBLogging:
TIME 1603644515.92808
VALUE enabled
state:
DBLogging:
TIME 1603644515.92808
VALUE initialized
OLDREADINGS:
READINGS:
2020-10-27 08:35:31 Device fenster_eg_kz_strasse_status
2020-10-27 09:47:40 allWindowsCount 4
2020-10-27 09:47:40 closedWindowsCount 4
2020-10-27 09:47:40 cmd 2
2020-10-27 09:47:40 cmd_event Monitoring.DOIF.Fenster
2020-10-27 09:47:40 cmd_nr 2
2020-10-26 10:17:35 mode enabled
2020-10-27 09:47:40 openWindowsCount 0
2020-10-27 09:47:40 openWindowsState closed
2020-10-27 09:47:40 state cmd_2
Regex:
accu:
cond:
:
0:
"fenster_eg_.*_status$" fenster_eg_.*_status$
attr:
cmdState:
wait:
waitdel:
condition:
0 ::AggregateDoIf($hash,'#','fenster_eg_.*_status$','state','"open.*|tilted"') > 0
do:
0:
0 set Monitoring.DOIF.Fenster openWindowsCount [#"fenster_eg_.*_status$":state:"open.*|tilted"], set Monitoring.DOIF.Fenster closedWindowsCount [#"fenster_eg_.*_status$":state:"closed"], set Monitoring.DOIF.Fenster allWindowsCount [#"fenster_eg_.*_status$":state:".*"], set Monitoring.DOIF.Fenster openWindowsState "not-closed"
1:
0 set Monitoring.DOIF.Fenster openWindowsCount 0, set Monitoring.DOIF.Fenster closedWindowsCount [#"fenster_eg_.*_status$":state:"closed"], set Monitoring.DOIF.Fenster openWindowsState closed, set Monitoring.DOIF.Fenster allWindowsCount [#"fenster_eg_.*_status$":state:".*"],
helper:
DEVFILTER ^global$|fenster_eg_.*_status$
NOTIFYDEV global|.*fenster_eg_.*_status
event closed
globalinit 1
last_timer 0
sleeptimer -1
timerdev
timerevent closed
timerevents
timereventsState
triggerDev
DOIF_eventa:
cmd_nr: 2
cmd: 2
cmd_event: Monitoring.DOIF.Fenster
cmd_2
DOIF_eventas:
cmd_nr: 2
cmd: 2
cmd_event: Monitoring.DOIF.Fenster
state: cmd_2
internals:
readings:
trigger:
uiState:
uiTable:
Attributes:
DbLogExclude .*
alias Status Fenster (EG)
do always
event-on-change-reading .*
icon helper_doif
readingList openWindowsCount closedWindowsCount openWindowsState allWindowsCount
room SYSTEM->LOGIK->DOIF
stateFormat open:openWindowsCount <br> closed:closedWindowsCount <br> gesamt:allWindowsCount
Nun würde ich das ganze gern so erweitern das er zusätzlich wenn irgendein Fenster geöffnet öde gekippt ist er nach 2 Minuten ein Set Befehl auf ein anderes Device ausführt. Falls in den X Minuten Wartezeit oder später wieder alle Fenster geschlossen werden soll wieder ein anderer "set" Befehl ausgeführt werden.
Die Readings im Doif bezüglich der geöffneten / geschlossenen Fenster sollen jedoch immer sofort aktualisiert werden.
Geht das überhaupt im selben doof oder muss ich dafür ein zweites doif nehmen.
Dafür gibt es das wait-Attribut:
DOIF (...)
(set sofort irgendetwas)
(set später irgendetwas)
DOELSE ...
wait 0,120
Zitat von: Damian am 27 Oktober 2020, 14:54:04
Dafür gibt es das wait-Attribut:
DOIF (...)
(set sofort irgendetwas)
(set später irgendetwas)
DOELSE ...
wait 0,120
Wie genau sähe das dann in meinem Beispiel aus?
Ich habe ja schon quasi eine Fallunterscheidung drinnen die auch immer sofort gemacht werden muss. Es soll halt nur zusätzlich im ersten fall noch ein zusätzlicher Set gemacht werden. Dieser aber erst nach einer Warte Zeit.
Kannst Du mir das mal beispielhaft mit meinem doif erklären so das ich es als doif DAU auch verstehe?
ich hab es jetzt mit einem 2. doif gelöst was den status vom ersten überwacht. im 2. hab ich dann mit dem wait attribut auch die verzögerung eingebaut.