Hallo
in der commandref steht
ZitatZu beachten ist, dass nur die Bedingungen überprüft werden, die zum ausgelösten Event das dazughörige Device bzw. die dazugehörige Triggerzeit beinhalten.
Hintergrund meiner Frage ist, dass ein Befehl ausgelöst wurde, obwohl nach meiner Meinung die erste Bedingung "Zeit" erfüllt ist und damit es zu keiner Abfrage der zweiten Bedinung (DOELSEIF) "humidity" kommen dürfte.
Müßte also in Bedingung 2 auch noch eine Zeitabfrage rein, damit der Befehl nur tagsüber ausgeführt wird ?
Internals:
DEF ([22:00-10:00]) (set FB_Schalter_01 off) DOELSEIF ([Temperatur_09:humidity] > 54) (set FB_Schalter_01 on) DOELSEIF ([Temperatur_09:humidity] < 53) (set FB_Schalter_01 off)
NAME di_SZ_Luftfeuchte
NR 803
NTFY_ORDER 50-di_SZ_Luftfeuchte
STATE cmd_2
TYPE DOIF
Helper:
Dblog:
Cmd_event:
Mydblog:
TIME 1487290566.03304
VALUE Temperatur_09
Readings:
2017-02-17 09:14:17 Device Temperatur_09
2017-02-17 01:16:06 cmd 2
2017-02-17 01:16:06 cmd_event Temperatur_09
2017-02-17 01:16:06 cmd_nr 2
2017-02-17 09:14:17 e_Temperatur_09_humidity 56
2017-02-17 01:16:06 state cmd_2
2017-02-16 10:00:00 timer_01_c01 16.02.2017 22:00:00
2017-02-16 10:00:00 timer_02_c01 17.02.2017 10:00:00
Condition:
0 DOIF_time($hash,0,1,$wday,$hms)
1 ReadingValDoIf($hash,'Temperatur_09','humidity') > 54
2 ReadingValDoIf($hash,'Temperatur_09','humidity') < 53
Days:
Devices:
1 Temperatur_09
2 Temperatur_09
all Temperatur_09
Do:
0:
0 set FB_Schalter_01 off
1:
0 set FB_Schalter_01 on
2:
0 set FB_Schalter_01 off
3:
Helper:
event humidity: 56
globalinit 1
last_timer 2
sleeptimer -1
timerdev Temperatur_09
timerevent humidity: 56
triggerDev Temperatur_09
timerevents:
humidity: 56
timereventsState:
humidity: 56
triggerEvents:
humidity: 56
triggerEventsState:
humidity: 56
Internals:
Interval:
0 -1
1 0
Itimer:
Localtime:
0 1487278800
1 1487322000
Readings:
1 Temperatur_09:humidity
2 Temperatur_09:humidity
all Temperatur_09:humidity
Realtime:
0 22:00:00
1 10:00:00
Regexp:
0:
1:
2:
All:
State:
Time:
0 22:00:00
1 10:00:00
Timecond:
0 0
1 0
Timer:
0 0
1 0
Timers:
0 0 1
Trigger:
Triggertime:
1487322000:
localtime 1487322000
Hash:
Attributes:
room 04 Start at,Schlafzimmer
Danke
Hi,
ich kenne DOIF zwar nicht wirklich, aber zwei Sachen kann ich mir vorstellen:
1. Funktionieren Zeitangaben auch so herum? Macht DOIF da automatisch 22:00-23:59 || 00:00-10:00 draus?
2. DOIF hat Zustände und das erste Kommando wird nur einmal ausgeführt, dann geht's zum nächsten.
Disclaimer: Ich dillettiere hier etwas rum...
Gruß,
Thorsten
Zitat von: jove01 am 17 Februar 2017, 10:06:31
Hallo
in der commandref steht
Hintergrund meiner Frage ist, dass ein Befehl ausgelöst wurde, obwohl nach meiner Meinung die erste Bedingung "Zeit" erfüllt ist und damit es zu keiner Abfrage der zweiten Bedinung (DOELSEIF) "humidity" kommen dürfte.
Müßte also in Bedingung 2 auch noch eine Zeitabfrage rein, damit der Befehl nur tagsüber ausgeführt wird ?
Auszug aus der Commandref zu DOIF:
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.
Wenn also Temperatur_09:humidity ein Eregnis erzeugt, werden nur Bedingungen geprüft, wo dieses Device vorkommt also in der zweiten und dritten Bedingung, in der ersten nicht.
Man kann das Verhalten mit dem Attribut checkall verändern.
Hi Damian,
er hat in der ersten Bedingung aber nur die Zeit. Das dürfte doch dann auf alles passen, oder?
Gruß,
Thorsten
Zitat von: Thorsten Pferdekaemper am 17 Februar 2017, 11:38:08
Hi Damian,
er hat in der ersten Bedingung aber nur die Zeit. Das dürfte doch dann auf alles passen, oder?
Gruß,
Thorsten
ja, aber wenn humidity gesendet wird, wird die erste Bedingung nicht abgefragt. Die erste Bedingung, so wie sie hier definiert ist, wird genau zwei mal ausgewertet, nämlich um 22:00 und 10:00 Uhr und ist ab 22:00 Uhr wahr und ab 10:00 Uhr nicht wahr.