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.