Hallo zusammen,
ich beobachte ein Verhalten, welches ich mir nicht so recht erklären kann.
Bedingung 1 und 2 sind nahezu identisch, außer das in Bedingung 2 noch der Status eines anderen DOIFs geprüft wird — quasi als andere Form der Zeitangabe. Könnte ich auch analog für den ersten Bedingungsblock machen
Jetzt gerade sind alle Bedingungen für cmd 1 erfüllt. Wechsel ich auf absent, springt das DOIF auch richtigerweise auf cmd 1. Kurz darauf, wie im List zu sehen, dann aber auf cmd 5 — wohl weil das andere DOIF triggert. Die Bedingung 1 ist aber weiterhin wahr. Weshalb springt das Modul dann auf cmd 5?
Hier mein DOIF
Internals:
DEF ([rgr_Bewohner] =~ /gone|absent/ and [Helligkeit] =~ /Nacht/ and [16:00-22:00]) (set struc_RL_Gaestezimmer [FILTER=position_2>0] Runter, set struc_RL_EG_Gesamt [FILTER=position_2>0] Runter)
DOELSEIF ([rgr_Bewohner] =~ /gone|absent/ and [Helligkeit] =~ /Nacht/ and [di_Lichtsteuerung_unten_absent:cmd] == 2) (set RL_.*:FILTER=position_2>0 Runter) (set BL_.*:FILTER=room=(Badezimmer_OG|Flur_OG):FILTER=STATE!=(An|On) on-for-timer 180)
DOELSEIF ([rgr_Bewohner] =~ /gone|absent/ and [[wakeupzeit]-23:00|8] and [Helligkeit] =~ /Tag/) (set struc_RL_Alle [FILTER=position_2<5] Hoch, set BL_Bettlampe:FILTER=state!=off off)
DOELSEIF ([rgr_Bewohner] =~ /gone|absent/ and [10:30-23:00|7] and [Helligkeit] =~ /Tag/) (set struc_RL_Alle [FILTER=position_2<5] Hoch) DOELSE
NAME di_Rollladensteuerung_Absent
NR 124
NTFY_ORDER 50-di_Rollladensteuerung_Absent
STATE cmd_5
TYPE DOIF
READINGS:
2017-12-06 17:30:14 Device di_Lichtsteuerung_unten_absent
2017-12-06 17:30:13 cmd 5
2017-12-06 17:30:13 cmd_event di_Lichtsteuerung_unten_absent
2017-12-06 17:30:13 cmd_nr 5
2017-12-06 17:30:14 e_di_Lichtsteuerung_unten_absent_cmd 1.1
2017-12-06 17:29:53 e_rgr_Bewohner_STATE absent
2017-12-06 17:30:13 state cmd_5
2017-12-06 16:36:38 timer_01_c01 07.12.2017 16:00:00
2017-12-06 16:36:38 timer_02_c01 06.12.2017 22:00:00
2017-12-06 16:36:38 timer_03_c03 07.12.2017 09:20:00|8
2017-12-06 16:36:38 timer_04_c03 06.12.2017 23:00:00|8
2017-12-06 16:36:38 timer_05_c04 07.12.2017 10:30:00|7
2017-12-06 16:36:38 timer_06_c04 06.12.2017 23:00:00|7
Regex:
condition:
0 InternalDoIf($hash,'rgr_Bewohner','STATE') =~ /gone|absent/ and InternalDoIf($hash,'Helligkeit','STATE') =~ /Nacht/ and DOIF_time($hash,0,1,$wday,$hms)
1 InternalDoIf($hash,'rgr_Bewohner','STATE') =~ /gone|absent/ and InternalDoIf($hash,'Helligkeit','STATE') =~ /Nacht/ and ReadingValDoIf($hash,'di_Lichtsteuerung_unten_absent','cmd') == 2
2 InternalDoIf($hash,'rgr_Bewohner','STATE') =~ /gone|absent/ and DOIF_time($hash,2,3,$wday,$hms,"8") and InternalDoIf($hash,'Helligkeit','STATE') =~ /Tag/
3 InternalDoIf($hash,'rgr_Bewohner','STATE') =~ /gone|absent/ and DOIF_time($hash,4,5,$wday,$hms,"7") and InternalDoIf($hash,'Helligkeit','STATE') =~ /Tag/
days:
2 8
3 8
4 7
5 7
devices:
0 rgr_Bewohner Helligkeit
1 rgr_Bewohner Helligkeit di_Lichtsteuerung_unten_absent
2 rgr_Bewohner Helligkeit
3 rgr_Bewohner Helligkeit
all rgr_Bewohner Helligkeit di_Lichtsteuerung_unten_absent
do:
0:
0 set struc_RL_Gaestezimmer [FILTER=position_2>0] Runter, set struc_RL_EG_Gesamt [FILTER=position_2>0] Runter
1:
0 set RL_.*:FILTER=position_2>0 Runter
1 set BL_.*:FILTER=room=(Badezimmer_OG|Flur_OG):FILTER=STATE!=(An|On) on-for-timer 180
2:
0 set struc_RL_Alle [FILTER=position_2<5] Hoch, set BL_Bettlampe:FILTER=state!=off off
3:
0 set struc_RL_Alle [FILTER=position_2<5] Hoch
4:
0
helper:
DOIF_Readings_events
DOIF_eventas
event wait_timer: 06.12.2017 17:33:22 cmd_1_2 rgr_Bewohner
globalinit 1
last_timer 6
sleeptimer -1
timerdev di_Lichtsteuerung_unten_absent
timerevent wait_timer: 06.12.2017 17:33:22 cmd_1_2 rgr_Bewohner
triggerDev di_Lichtsteuerung_unten_absent
timerevents:
wait_timer: 06.12.2017 17:33:22 cmd_1_2 rgr_Bewohner
timereventsState:
wait_timer: 06.12.2017 17:33:22 cmd_1_2 rgr_Bewohner
triggerEvents:
wait_timer: 06.12.2017 17:33:22 cmd_1_2 rgr_Bewohner
triggerEventsState:
wait_timer: 06.12.2017 17:33:22 cmd_1_2 rgr_Bewohner
internals:
0 rgr_Bewohner:STATE Helligkeit:STATE
1 rgr_Bewohner:STATE Helligkeit:STATE
2 rgr_Bewohner:STATE Helligkeit:STATE
3 rgr_Bewohner:STATE Helligkeit:STATE
all rgr_Bewohner:STATE Helligkeit:STATE
interval:
0 -1
1 0
2 -1
3 2
4 -1
5 4
itimer:
all wakeupzeit
localtime:
0 1512658800
1 1512594000
2 1512634800
3 1512597600
4 1512639000
5 1512597600
readings:
1 di_Lichtsteuerung_unten_absent:cmd
all di_Lichtsteuerung_unten_absent:cmd
realtime:
0 16:00:00
1 22:00:00
2 09:20:00
3 23:00:00
4 10:30:00
5 23:00:00
time:
0 16:00:00
1 22:00:00
2 [wakeupzeit]
3 23:00:00
4 10:30:00
5 23:00:00
timeCond:
0 0
1 0
2 2
3 2
4 3
5 3
timer:
0 0
1 0
2 0
3 0
4 0
5 0
timers:
0 0 1
2 2 3
3 4 5
trigger:
triggertime:
1512594000:
localtime 1512594000
hash:
1512597600:
localtime 1512597600
hash:
1512634800:
localtime 1512634800
hash:
1512639000:
localtime 1512639000
hash:
1512658800:
localtime 1512658800
hash:
uiState:
uiTable:
Attributes:
timerWithWait 1
verbose 0
wait :,15:rand(1800)+2700:rand(3600)
Dank vorab,
Max
Zitat aus der Commandref:
ZitatDie Angaben werden immer von links nach rechts abgearbeitet. Zu beachten ist, dass nur die Bedingungen überprüft werden, die zum ausgelösten Event das dazughörige Device bzw. die dazugehörige Triggerzeit beinhalten. Kommt ein Device in mehreren Bedingungen vor, so wird immer nur ein Kommando ausgeführt, und zwar das erste, für das die dazugehörige Bedingung in der abgearbeiteten Reihenfolge wahr ist.
das Verhalten kannst du mit http://fhem.de/commandref_DE.html#DOIF_checkall beeinflussen, z. B. checkall all
Hi Damian,
wie immer, besten Dank! Ich war davon ausgegangen, dass das gesamt Modul neu getriggert wird, sofern ein Device innerhalb der Bedingungen triggert.
Bis demnächst,
Max