Hauptmenü

Prüflogik DOIF unklar

Begonnen von jove01, 17 Februar 2017, 10:06:31

Vorheriges Thema - Nächstes Thema

jove01

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
Aktuelles FHEM auf Raspi 3 und dbLog
CUL 433
HMLan Rolladensteuerung

Thorsten Pferdekaemper

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
FUIP

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Thorsten Pferdekaemper

Hi Damian,
er hat in der ersten Bedingung aber nur die Zeit. Das dürfte doch dann auf alles passen, oder?
Gruß,
   Thorsten
FUIP

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF