Hey,
mein DOIF führt nur manchmal den 2. und 3. command aus.
Und manchmal wechselt er auch nicht korrekt auf cmd_2!
(Das Problem hab ich schon mal in einem anderen Thread gesehen)
Genauer gesagt: Setze ich ihn manchmal auf cmd_1, führt er cmd_1_2 und cmd_1_3 nicht aus, sondern nur cmd_1_1, geht danach aber auf cmd_2, falls er aber alle 3 ausführt, bleibt er danach auf cmd_1 hängen!
Ich kann es mir nicht erklären!
Mit "do_always" kann es nicht zutun haben, da ich das Verhalten ja manuell provozieren kann indem ich das DOIF auf cmd_1 setze!
Internals:
DEF ([HM_68D8CF:"open"] and [Wohnzimmer_Lampen] eq "off" and [SonneObenIntern] eq "off" and [Jemand] eq "on" and [LichtBewegung] eq "on") (set lampeAmFensterNote disable ; set flurNote disable ; set HUEDevice65537 pct 10 ; set HUEDevice65542 pct 10 ; define SchlafzimmertuerLichtAus1 at +00:03:00 set HUEDevice65537 off ; define SchlafzimmertuerLichtAus2 at +00:03:00 set HUEDevice65542 off) (set lampeAmFensterNote enable ; set lampeAmFensterNote cmd_2) (set flurNote enable ; set flurNote cmd_2)
FUUID 5cd0936b-f33f-0d46-981c-c5a0051844b9f5d6
MODEL FHEM
NAME SchlafzimmertuerLichtNote
NOTIFYDEV Wohnzimmer_Lampen,SonneObenIntern,global,HM_68D8CF,Jemand,LichtBewegung
NR 883
NTFY_ORDER 50-SchlafzimmertuerLichtNote
STATE cmd_1
TYPE DOIF
VERSION 20811 2019-12-22 17:45:08
READINGS:
2020-01-09 21:49:18 Device Wohnzimmer_Lampen
2020-01-09 21:49:37 cmd 1.3
2020-01-09 21:49:37 cmd_event set_cmd_1
2020-01-09 21:49:37 cmd_nr 1
2020-01-09 21:49:37 cmd_seqnr 3
2020-01-09 21:49:18 e_Wohnzimmer_Lampen_STATE on
2020-01-09 20:30:03 mode enabled
2020-01-09 21:49:37 state cmd_1
2020-01-09 21:49:37 wait_timer no timer
Regex:
accu:
cond:
HM_68D8CF:
0:
&STATE ^HM_68D8CF$
Jemand:
0:
&STATE ^Jemand$
LichtBewegung:
0:
&STATE ^LichtBewegung$
SonneObenIntern:
0:
&STATE ^SonneObenIntern$
Wohnzimmer_Lampen:
0:
&STATE ^Wohnzimmer_Lampen$
attr:
cmdState:
wait:
0:
0
5
5
waitdel:
condition:
0 ::EventDoIf('HM_68D8CF',$hash,'open',1) and ::InternalDoIf($hash,'Wohnzimmer_Lampen','STATE') eq "off" and ::InternalDoIf($hash,'SonneObenIntern','STATE') eq "off" and ::InternalDoIf($hash,'Jemand','STATE') eq "on" and ::InternalDoIf($hash,'LichtBewegung','STATE') eq "on"
do:
0:
0 set lampeAmFensterNote disable ; set flurNote disable ; set HUEDevice65537 pct 10 ; set HUEDevice65542 pct 10 ; define SchlafzimmertuerLichtAus1 at +00:03:00 set HUEDevice65537 off ; define SchlafzimmertuerLichtAus2 at +00:03:00 set HUEDevice65542 off
1 set lampeAmFensterNote enable ; set lampeAmFensterNote cmd_2
2 set flurNote enable ; set flurNote cmd_2
1:
helper:
DEVFILTER ^global$|^Wohnzimmer_Lampen$|^SonneObenIntern$|^HM_68D8CF$|^LichtBewegung$|^Jemand$
NOTIFYDEV global|Wohnzimmer_Lampen|SonneObenIntern|HM_68D8CF|LichtBewegung|Jemand
event on
globalinit 1
last_timer 0
sleepdevice set_cmd_1
sleepsubtimer -1
sleeptimer -1
timerdev Wohnzimmer_Lampen
timerevent on
triggerDev Wohnzimmer_Lampen
DOIF_eventa:
cmd_nr: 1
cmd_seqnr: 3
cmd_event: set_cmd_1
cmd_1
DOIF_eventas:
cmd_nr: 1
cmd_seqnr: 3
cmd_event: set_cmd_1
state: cmd_1
timerevents:
on
timereventsState:
state: on
triggerEvents:
on
triggerEventsState:
state: on
internals:
all Wohnzimmer_Lampen:STATE SonneObenIntern:STATE Jemand:STATE LichtBewegung:STATE
readings:
trigger:
all HM_68D8CF
uiState:
uiTable:
Attributes:
wait 0,5,5
Danke fürs Lesen!
Patrick
Trennzeichen in Befehlen ist bei DOIF Koma, nicht Semikolon
Laut "list" deines DOIFs ist er korrekt auf cmd1 / cmd1.3 gelandet, nachdem Du set cmd1 gemacht hast.
ZitatSetze ich ihn manchmal auf cmd_1, führt er cmd_1_2 und cmd_1_3 nicht aus, sondern nur cmd_1_1, geht danach aber auf cmd_2
wahrscheinlich hat sich inzwischen eine Bedingung geändert. Interessanter wäre ein "list" des DOIFs wenn er auf cmd_2 gegangen ist.
Zitatfalls er aber alle 3 ausführt, bleibt er danach auf cmd_1 hängen!
das ist normal, solange die Bedingungen sich nicht geändert haben
Zitat von: amenomade am 09 Januar 2020, 22:52:50
Trennzeichen in Befehlen ist bei DOIF Koma, nicht Semikolon
Hey, danke für deine Antworten!
Ok, das ist interessant, denn er führt im ersten Block definitiv trotzdem alle Befehle aus?
Das mit dem List kann sein, vielleicht habe ich "list" gemacht, als es grade mal funktioniert hat.
Die Bedingungen trafen eigentlich gar nicht zu, ich habe ja manuell "cmd_1" angestoßen.
Zitat von: Pati_Alpha am 10 Januar 2020, 12:27:35
Die Bedingungen trafen eigentlich gar nicht zu, ich habe ja manuell "cmd_1" angestoßen.
Falsch. Wegen wait Timer.
Nehmen wir folgendes DOIF:
defmod di3 DOIF ([dummy1] eq "on") () () ()
attr di3 wait 0,30,30
und sagen wir, dummy1 ist am Anfang auf "on"
Führen wir "set di3 cmd_1" aus
(1)- es schaltet auf cmd 1.1
(2)- 30s später auf cmd 1.2
(3)- 30s später auf cmd 1.3
Nehmen wir jetzt an, dummy1 wechselt auf "off" zwischen (2) und (3). So wird es laufen:
(1)- es schaltet auf cmd 1.1
(2)- 30s später auf cmd 1.2
(2,5)- dummy1 off => dummy1 triggert das DOIF, die Bedingung wird geprüft, ist nicht mehr wahr => es löscht alle Timer und schaltet auf cmd_2
2020-01-10 19:04:04 DOIF di3 cmd_nr: 1
2020-01-10 19:04:04 DOIF di3 cmd_seqnr: 1
2020-01-10 19:04:04 DOIF di3 cmd: 1.1
2020-01-10 19:04:04 DOIF di3 cmd_event: set_cmd_1
2020-01-10 19:04:04 DOIF di3 cmd_1_1
2020-01-10 19:04:04 DOIF di3 wait_timer: 10.01.2020 19:04:34 cmd_1_2 set_cmd_1
2020-01-10 19:04:34 DOIF di3 wait_timer: no timer
2020-01-10 19:04:34 DOIF di3 cmd_nr: 1
2020-01-10 19:04:34 DOIF di3 cmd_seqnr: 2
2020-01-10 19:04:34 DOIF di3 cmd: 1.2
2020-01-10 19:04:34 DOIF di3 cmd_event: set_cmd_1
2020-01-10 19:04:34 DOIF di3 cmd_1_2
2020-01-10 19:04:34 DOIF di3 wait_timer: 10.01.2020 19:05:04 cmd_1_3 set_cmd_1
2020-01-10 19:04:51 DOIF di3 wait_timer: no timer
2020-01-10 19:04:51 DOIF di3 cmd_nr: 2
2020-01-10 19:04:51 DOIF di3 cmd: 2
2020-01-10 19:04:51 DOIF di3 cmd_event: dummy1
2020-01-10 19:04:51 DOIF di3 cmd_2
2020-01-10 19:04:51 DOIF fehlDOIF cmd_event: dummy1
2020-01-10 19:04:51 dummy dummy1 off