[Gelöst] Mal wieder DOIF Problem

Begonnen von phil1283, 08 Juni 2017, 11:58:55

Vorheriges Thema - Nächstes Thema

phil1283

Hallo,

seit heute Morgen funktioniert mein DOIF für die Rollladensteuerung nicht mehr.
Es ist als hätte ich das Attribut "do always" gesetzt, das habe ich aber nicht:
Internals:
   DEF        ([06:00-10:00] and [Multisensor_MS:brightness] > 200 and ([Bewohner:state] eq "absent" or [Bewohner:state] eq "gone")) (set tracker 1) ({fhem(" define RLK1 at +00:00:01 set Rollladen_Kueche_Ostseite up;;define RLK2 at +00:00:20 set Rollladen_Kueche_Suedseite up;;define RLE at +00:00:40 set Rollladen_Esszimmer up;;define RLWF at +00:00:59 set Rollladen_Wohnzimmer_Fenster up;;define RLWT at +00:01:10 set Rollladen_Wohnzimmer_Tuer up;;define RLS at +00:04:00 set Rollladen_Schlafzimmer up;;define RLK at +00:02:00 set Rollladen_Kinderzimmer up ")})
DOELSEIF
([Datum:state] eq [Handywecker_Philipp:Datum] and [[Handywecker_Philipp:Uhrzeit]-10:00] and [Multisensor_MS:brightness] > 200 and [rr_Philipp:state] ne "asleep" and [Gast:state] eq "none") (set tracker 2) ({ fhem(" define RLK1 at +00:00:01 set Rollladen_Kueche_Ostseite up;;define RLK2 at +00:00:20 set Rollladen_Kueche_Suedseite up;;define RLE at +00:00:40 set Rollladen_Esszimmer up;;define RLWF at +00:00:59 set Rollladen_Wohnzimmer_Fenster up;;define RLWT at +00:01:10 set Rollladen_Wohnzimmer_Tuer up;;define RLK at +00:02:00 set Rollladen_Kinderzimmer up ")})
DOELSEIF
([Datum:state] eq [Handywecker_Philipp:Datum] and [[Handywecker_Philipp:Uhrzeit]-10:00] and [Multisensor_MS:brightness] > 200 and [rr_Philipp:state] ne "asleep" and [Gast:state] ne "none") (set tracker 3) ({fhem(" define RLK1 at +00:00:01 set Rollladen_Kueche_Ostseite up;;define RLK2 at +00:00:20 set Rollladen_Kueche_Suedseite up;;define RLE at +00:00:40 set Rollladen_Esszimmer up;;define RLK at +00:02:00 set Rollladen_Kinderzimmer up ")})
DOELSEIF
([06:00-10:00] and [Multisensor_MS:brightness] > 200 and [rr_Philipp:state] ne "asleep" and [Gast:state] eq "none") (set tracker 4) ({ fhem(" define RLK1 at +00:00:01 set Rollladen_Kueche_Ostseite up;;define RLK2 at +00:00:20 set Rollladen_Kueche_Suedseite up;;define RLE at +00:00:40 set Rollladen_Esszimmer up;;define RLWF at +00:00:59 set Rollladen_Wohnzimmer_Fenster up;;define RLWT at +00:01:10 set Rollladen_Wohnzimmer_Tuer up;;define RLK at +00:02:00 set Rollladen_Kinderzimmer up ")})
DOELSEIF
([06:00-10:00] and [Multisensor_MS:brightness] > 200 and [rr_Philipp:state] ne "asleep" and [Gast:state] ne "none") (set tracker 5) ({fhem(" define RLK1 at +00:00:01 set Rollladen_Kueche_Ostseite up;;define RLK2 at +00:00:20 set Rollladen_Kueche_Suedseite up;;define RLE at +00:00:40 set Rollladen_Esszimmer up;;define RLK at +00:02:00 set Rollladen_Kinderzimmer up ")})
DOELSEIF
([16:00-23:00] and [Multisensor_MS:brightness] < 10 and ($month <= 4 || $month >= 9 or ([Bewohner:state] ne "home" and [Bewohner:state] ne "gotosleep"))) (set tracker 6) ({ fhem(" define RLK1 at +00:00:01 set Rollladen_Kueche_Ostseite down;;define RLK2 at +00:00:20 set Rollladen_Kueche_Suedseite down;; define RLE at +00:00:30 set Rollladen_Esszimmer down;;define RLWF at +00:02:00 set Rollladen_Wohnzimmer_Fenster down; define RLWT at +00:03:00 set Rollladen_Wohnzimmer_Tuer down;; define RLS at +00:01:30 set Rollladen_Schlafzimmer down;; define RLK at +00:02:50 set Rollladen_Kinderzimmer down ") })
DOELSEIF
([16:00-23:00] and [Multisensor_MS:brightness] < 10) (set tracker 7) ({ fhem(" define RLK1 at +00:00:01 set Rollladen_Kueche_Ostseite down;;define RLK2 at +00:00:20 set Rollladen_Kueche_Suedseite down;; define RLE at +00:00:30 set Rollladen_Esszimmer down;; define RLS at +00:01:30 set Rollladen_Schlafzimmer down;; define RLK at +00:02:50 set Rollladen_Kinderzimmer down ") })
   NAME       Rollladensteuerung
   NR         188
   NTFY_ORDER 50-Rollladensteuerung
   STATE      initialized
   TYPE       DOIF
   Readings:
     2017-06-08 11:47:53   Device          rr_Philipp
     2017-06-08 11:38:33   cmd             0
     2017-06-08 11:45:32   e_Multisensor_MS_brightness 999
     2017-06-08 11:47:53   e_rr_Philipp_state absent
     2017-06-08 11:38:33   state           initialized
     2017-06-08 11:38:33   timer_01_c01    09.06.2017 06:00:00
     2017-06-08 11:38:33   timer_02_c01    09.06.2017 10:00:00
     2017-06-08 11:38:33   timer_03_c02    09.06.2017 05:40:00
     2017-06-08 11:38:33   timer_04_c02    09.06.2017 10:00:00
     2017-06-08 11:38:33   timer_05_c03    09.06.2017 05:40:00
     2017-06-08 11:38:33   timer_06_c03    09.06.2017 10:00:00
     2017-06-08 11:38:33   timer_07_c04    09.06.2017 06:00:00
     2017-06-08 11:38:33   timer_08_c04    09.06.2017 10:00:00
     2017-06-08 11:38:33   timer_09_c05    09.06.2017 06:00:00
     2017-06-08 11:38:33   timer_10_c05    09.06.2017 10:00:00
     2017-06-08 11:38:33   timer_11_c06    08.06.2017 16:00:00
     2017-06-08 11:38:33   timer_12_c06    08.06.2017 23:00:00
     2017-06-08 11:38:33   timer_13_c07    08.06.2017 16:00:00
     2017-06-08 11:38:33   timer_14_c07    08.06.2017 23:00:00
   Condition:
     0          DOIF_time($hash,0,1,$wday,$hms) and ReadingValDoIf($hash,'Multisensor_MS','brightness') > 200 and (ReadingValDoIf($hash,'Bewohner','state') eq "absent" or ReadingValDoIf($hash,'Bewohner','state') eq "gone")
     1          ReadingValDoIf($hash,'Datum','state') eq ReadingValDoIf($hash,'Handywecker_Philipp','Datum') and DOIF_time($hash,2,3,$wday,$hms) and ReadingValDoIf($hash,'Multisensor_MS','brightness') > 200 and ReadingValDoIf($hash,'rr_Philipp','state') ne "asleep" and ReadingValDoIf($hash,'Gast','state') eq "none"
     2          ReadingValDoIf($hash,'Datum','state') eq ReadingValDoIf($hash,'Handywecker_Philipp','Datum') and DOIF_time($hash,4,5,$wday,$hms) and ReadingValDoIf($hash,'Multisensor_MS','brightness') > 200 and ReadingValDoIf($hash,'rr_Philipp','state') ne "asleep" and ReadingValDoIf($hash,'Gast','state') ne "none"
     3          DOIF_time($hash,6,7,$wday,$hms) and ReadingValDoIf($hash,'Multisensor_MS','brightness') > 200 and ReadingValDoIf($hash,'rr_Philipp','state') ne "asleep" and ReadingValDoIf($hash,'Gast','state') eq "none"
     4          DOIF_time($hash,8,9,$wday,$hms) and ReadingValDoIf($hash,'Multisensor_MS','brightness') > 200 and ReadingValDoIf($hash,'rr_Philipp','state') ne "asleep" and ReadingValDoIf($hash,'Gast','state') ne "none"
     5          DOIF_time($hash,10,11,$wday,$hms) and ReadingValDoIf($hash,'Multisensor_MS','brightness') < 10 and ($month <= 4 || $month >= 9 or (ReadingValDoIf($hash,'Bewohner','state') ne "home" and ReadingValDoIf($hash,'Bewohner','state') ne "gotosleep"))
     6          DOIF_time($hash,12,13,$wday,$hms) and ReadingValDoIf($hash,'Multisensor_MS','brightness') < 10
   Days:
   Devices:
     0           Multisensor_MS Bewohner
     1           Datum Handywecker_Philipp Multisensor_MS rr_Philipp Gast
     2           Datum Handywecker_Philipp Multisensor_MS rr_Philipp Gast
     3           Multisensor_MS rr_Philipp Gast
     4           Multisensor_MS rr_Philipp Gast
     5           Multisensor_MS Bewohner
     6           Multisensor_MS
     all         Multisensor_MS Bewohner Datum Handywecker_Philipp rr_Philipp Gast
   Do:
     0:
       0          set tracker 1
       1          {fhem(" define RLK1 at +00:00:01 set Rollladen_Kueche_Ostseite up;;define RLK2 at +00:00:20 set Rollladen_Kueche_Suedseite up;;define RLE at +00:00:40 set Rollladen_Esszimmer up;;define RLWF at +00:00:59 set Rollladen_Wohnzimmer_Fenster up;;define RLWT at +00:01:10 set Rollladen_Wohnzimmer_Tuer up;;define RLS at +00:04:00 set Rollladen_Schlafzimmer up;;define RLK at +00:02:00 set Rollladen_Kinderzimmer up ")}
     1:
       0          set tracker 2
       1          { fhem(" define RLK1 at +00:00:01 set Rollladen_Kueche_Ostseite up;;define RLK2 at +00:00:20 set Rollladen_Kueche_Suedseite up;;define RLE at +00:00:40 set Rollladen_Esszimmer up;;define RLWF at +00:00:59 set Rollladen_Wohnzimmer_Fenster up;;define RLWT at +00:01:10 set Rollladen_Wohnzimmer_Tuer up;;define RLK at +00:02:00 set Rollladen_Kinderzimmer up ")}
     2:
       0          set tracker 3
       1          {fhem(" define RLK1 at +00:00:01 set Rollladen_Kueche_Ostseite up;;define RLK2 at +00:00:20 set Rollladen_Kueche_Suedseite up;;define RLE at +00:00:40 set Rollladen_Esszimmer up;;define RLK at +00:02:00 set Rollladen_Kinderzimmer up ")}
     3:
       0          set tracker 4
       1          { fhem(" define RLK1 at +00:00:01 set Rollladen_Kueche_Ostseite up;;define RLK2 at +00:00:20 set Rollladen_Kueche_Suedseite up;;define RLE at +00:00:40 set Rollladen_Esszimmer up;;define RLWF at +00:00:59 set Rollladen_Wohnzimmer_Fenster up;;define RLWT at +00:01:10 set Rollladen_Wohnzimmer_Tuer up;;define RLK at +00:02:00 set Rollladen_Kinderzimmer up ")}
     4:
       0          set tracker 5
       1          {fhem(" define RLK1 at +00:00:01 set Rollladen_Kueche_Ostseite up;;define RLK2 at +00:00:20 set Rollladen_Kueche_Suedseite up;;define RLE at +00:00:40 set Rollladen_Esszimmer up;;define RLK at +00:02:00 set Rollladen_Kinderzimmer up ")}
     5:
       0          set tracker 6
       1          { fhem(" define RLK1 at +00:00:01 set Rollladen_Kueche_Ostseite down;;define RLK2 at +00:00:20 set Rollladen_Kueche_Suedseite down;; define RLE at +00:00:30 set Rollladen_Esszimmer down;;define RLWF at +00:02:00 set Rollladen_Wohnzimmer_Fenster down; define RLWT at +00:03:00 set Rollladen_Wohnzimmer_Tuer down;; define RLS at +00:01:30 set Rollladen_Schlafzimmer down;; define RLK at +00:02:50 set Rollladen_Kinderzimmer down ") }
     6:
       0          set tracker 7
       1          { fhem(" define RLK1 at +00:00:01 set Rollladen_Kueche_Ostseite down;;define RLK2 at +00:00:20 set Rollladen_Kueche_Suedseite down;; define RLE at +00:00:30 set Rollladen_Esszimmer down;; define RLS at +00:01:30 set Rollladen_Schlafzimmer down;; define RLK at +00:02:50 set Rollladen_Kinderzimmer down ") }
     7:
   Helper:
     event      durTimerAbsence_cr: 263,durTimerAbsence: 04:23:19
     globalinit 1
     last_timer 14
     sleeptimer -1
     triggerDev rr_Philipp
     triggerEvents:
       durTimerAbsence_cr: 263
       durTimerAbsence: 04:23:19
     triggerEventsState:
       durTimerAbsence_cr: 263
       durTimerAbsence: 04:23:19
   Internals:
   Interval:
     0          -1
     1          0
     10         -1
     11         10
     12         -1
     13         12
     2          -1
     3          2
     4          -1
     5          4
     6          -1
     7          6
     8          -1
     9          8
   Itimer:
     all         Handywecker_Philipp
   Localtime:
     0          1496980800
     1          1496995200
     10         1496930400
     11         1496955600
     12         1496930400
     13         1496955600
     2          1496979600
     3          1496995200
     4          1496979600
     5          1496995200
     6          1496980800
     7          1496995200
     8          1496980800
     9          1496995200
   Readings:
     0           Multisensor_MS:brightness Bewohner:state
     1           Datum:state Handywecker_Philipp:Datum Multisensor_MS:brightness rr_Philipp:state Gast:state
     2           Datum:state Handywecker_Philipp:Datum Multisensor_MS:brightness rr_Philipp:state Gast:state
     3           Multisensor_MS:brightness rr_Philipp:state Gast:state
     4           Multisensor_MS:brightness rr_Philipp:state Gast:state
     5           Multisensor_MS:brightness Bewohner:state
     6           Multisensor_MS:brightness
     all         Multisensor_MS:brightness Bewohner:state Datum:state Handywecker_Philipp:Datum rr_Philipp:state Gast:state
   Realtime:
     0          06:00:00
     1          10:00:00
     10         16:00:00
     11         23:00:00
     12         16:00:00
     13         23:00:00
     2          05:40:00
     3          10:00:00
     4          05:40:00
     5          10:00:00
     6          06:00:00
     7          10:00:00
     8          06:00:00
     9          10:00:00
   Regexp:
     0:
     1:
     2:
     3:
     4:
     5:
     6:
     All:
   State:
   Time:
     0          06:00:00
     1          10:00:00
     10         16:00:00
     11         23:00:00
     12         16:00:00
     13         23:00:00
     2          [Handywecker_Philipp:Uhrzeit]
     3          10:00:00
     4          [Handywecker_Philipp:Uhrzeit]
     5          10:00:00
     6          06:00:00
     7          10:00:00
     8          06:00:00
     9          10:00:00
   Timecond:
     0          0
     1          0
     10         5
     11         5
     12         6
     13         6
     2          1
     3          1
     4          2
     5          2
     6          3
     7          3
     8          4
     9          4
   Timer:
     0          0
     1          0
     10         0
     11         0
     12         0
     13         0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
     8          0
     9          0
   Timers:
     0           0  1
     1           2  3
     2           4  5
     3           6  7
     4           8  9
     5           10  11
     6           12  13
   Trigger:
   Triggertime:
     1496930400:
       localtime  1496930400
       Hash:
     1496955600:
       localtime  1496955600
       Hash:
     1496979600:
       localtime  1496979600
       Hash:
     1496980800:
       localtime  1496980800
       Hash:
     1496995200:
       localtime  1496995200
       Hash:
Attributes:
   group      Rollläden
   room       Automatisierungen 


set tracker 1-7 habe ich nur zum testen eingefügt.
hat jemand eine Idee warum jede halbe Minute tracker 1 und dann tracker 4 ist.
eigentlich sollte ein Befehl nur einmal ausgeführt werden.
Habe ich was übersehen?

KernSani

vermutlich treffen beide Bedingungen zu - mit jedem neuen trigger (alle 30 Sekunden update von brightness?) wird die zutreffende Bedingung, die gerade nicht aktiv ist getriggert...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

phil1283

Hmm, ich dachte der prüft der Reihe nach durch und bricht ab, wenn etwas zutrifft.
In dem Fall sind beide wahr. ich werfe mal eins raus und schaue was passiert.
Danke.

phil1283

Danke KernSani. Läuft jetzt wunderbar, DOIF wieder ein Stück mehr verstanden...
Um die wiederholte Ausführung zu unterbinden fragt DOIF bei jeder If-Schleife ab ob diese beim letzten Durchlauf ausgeführt wurde.
Wenn zwei wahr sind, wechseln diese sich ab.
Zur Problemlösung habe ich ein Reading eingesetzt welches zusätzlich abgefragt wird und nur geändert wird wenn die Rollläden ihre Position wirklich ändern sollen.

KernSani


Generell ist es empfehlenswert, die DOIF/ELSE Zweige eindeutig zu definieren, sonst kann es immer passieren, dass irgendwas komisch schaltet...

Setzt du bitte noch [Gelöst] vor das Subject des ersten Posts?



RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...