FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Simon74 am 08 März 2017, 19:11:08

Titel: Kein Zustandwechsel DOESLEIF, obwohl NICHT WAHR
Beitrag von: Simon74 am 08 März 2017, 19:11:08
Mein DOIF (Displayhelligkeit einstellen je nach Umgebungshelligkeit)
([ku.bm:brightness] >= 45 and [ez.ws1] eq "off") (set WandTablet screenBrightness 100)
DOELSEIF
([ku.bm:brightness] >= 45 and [ez.ws1] eq "on") (set WandTablet screenBrightness 200)
DOELSEIF
([ku.bm:brightness] >= 40 or [07:00-20-15]) (set WandTablet screenBrightness 70)
DOELSEIF
([ku.bm:brightness] >= 35 and [20:15-07:00]) (set WandTablet screenBrightness 25)
DOELSEIF
([ku.bm:brightness] >= 30 and [20:15-07:00]) (set WandTablet screenBrightness 20)
DOELSEIF
([bm.alle] eq "off") (set WandTablet screenBrightness 1)


attr do always ist gesetzt
Funktioniert soweit ausser der letzte Zweig (cmd_6) nicht wie gewünscht.

Eventmonitor Ausgabe:
2017-03-08 19:00:30 dummy bm.alle off
2017-03-08 19:00:32 Global global DELETED bm.alle.enable
2017-03-08 19:00:32 dummy bm.alle on


Bei Zeile 1 des Eventlogs gehts in den Zustand cmd_6 -> Perfekt.
Bei Zeile 3 des Eventlogs passiert nichts, bzw. bleibt Zustand cmd_6 -> ??

Gehe mal davon aus das ich eine Entwicklungsstufe verschlafen habe..  ;D
Titel: Antw:Kein Zustandwechsel DOESLEIF, obwohl NICHT WAHR
Beitrag von: Simon74 am 08 März 2017, 19:17:05
Tja, wenn mans selbst niederschreibt, liest man es auch selbst, und erkennt dann das wenn nun Helligkeit 35 und Uhrzeit 19:16 ist kein anderer Zustand stimmt   ::)

EDIT:
Korrigierertes DOIF, selbes verhalten


([ku.bm:brightness] >= 45 and [ez.ws1] eq "off") (set WandTablet screenBrightness 100)
DOELSEIF
([ku.bm:brightness] >= 45 and [ez.ws1] eq "on") (set WandTablet screenBrightness 200)
DOELSEIF
([ku.bm:brightness] >= 40) (set WandTablet screenBrightness 70)
DOELSEIF
([ku.bm:brightness] >= 35) (set WandTablet screenBrightness 25)
DOELSEIF
([ku.bm:brightness] >= 30) (set WandTablet screenBrightness 20)
DOELSEIF
([bm.alle] eq "off") (set WandTablet screenBrightness 1)
Titel: Antw:Kein Zustandwechsel DOESLEIF, obwohl NICHT WAHR
Beitrag von: Damian am 08 März 2017, 19:24:33
Warum do always bei zyklisch sendenden Sensoren?

Ohne list des DOIF-Moduls wird man dir nicht helfen können.
Titel: Antw:Kein Zustandwechsel DOESLEIF, obwohl NICHT WAHR
Beitrag von: Simon74 am 08 März 2017, 19:30:54
Bitteschön:
Internals:
   DEF        ([ku.bm:brightness] >= 45 and [ez.ws1] eq "off") (set WandTablet screenBrightness 100)
DOELSEIF
([ku.bm:brightness] >= 45 and [ez.ws1] eq "on") (set WandTablet screenBrightness 200)
DOELSEIF
([ku.bm:brightness] >= 40) (set WandTablet screenBrightness 70)
DOELSEIF
([ku.bm:brightness] >= 35) (set WandTablet screenBrightness 25)
DOELSEIF
([ku.bm:brightness] >= 30) (set WandTablet screenBrightness 20)
DOELSEIF
([bm.alle] eq "off") (set WandTablet screenBrightness 1)
   NAME       tablet.display.brightness
   NR         463
   NTFY_ORDER 50-tablet.display.brightness
   STATE      cmd_4
   TYPE       DOIF
   Readings:
     2017-03-08 19:25:12   Device          ku.bm
     2017-03-08 19:25:12   cmd             4
     2017-03-08 19:25:12   cmd_event       ku.bm
     2017-03-08 19:25:12   cmd_nr          4
     2017-03-08 19:22:53   e_bm.alle_STATE on
     2017-03-08 19:25:12   e_ku.bm_brightness 35
     2017-03-08 19:25:12   state           cmd_4
   Condition:
     0          ReadingValDoIf($hash,'ku.bm','brightness') >= 45 and InternalDoIf($hash,'ez.ws1','STATE') eq "off"
     1          ReadingValDoIf($hash,'ku.bm','brightness') >= 45 and InternalDoIf($hash,'ez.ws1','STATE') eq "on"
     2          ReadingValDoIf($hash,'ku.bm','brightness') >= 40
     3          ReadingValDoIf($hash,'ku.bm','brightness') >= 35
     4          ReadingValDoIf($hash,'ku.bm','brightness') >= 30
     5          InternalDoIf($hash,'bm.alle','STATE') eq "off"
   Devices:
     0           ku.bm ez.ws1
     1           ku.bm ez.ws1
     2           ku.bm
     3           ku.bm
     4           ku.bm
     5           bm.alle
     all         ku.bm ez.ws1 bm.alle
   Do:
     0:
       0          set WandTablet screenBrightness 100
     1:
       0          set WandTablet screenBrightness 200
     2:
       0          set WandTablet screenBrightness 70
     3:
       0          set WandTablet screenBrightness 25
     4:
       0          set WandTablet screenBrightness 20
     5:
       0          set WandTablet screenBrightness 1
     6:
   Helper:
     event      battery: ok,brightness: 35,cover: closed
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   ku.bm
     timerevent battery: ok,brightness: 35,cover: closed
     triggerDev ku.bm
     timerevents:
       battery: ok
       brightness: 35
       cover: closed
     timereventsState:
       battery: ok
       brightness: 35
       cover: closed
     triggerEvents:
       battery: ok
       brightness: 35
       cover: closed
     triggerEventsState:
       battery: ok
       brightness: 35
       cover: closed
   Internals:
     0           ez.ws1:STATE
     1           ez.ws1:STATE
     5           bm.alle:STATE
     all         ez.ws1:STATE bm.alle:STATE
   Itimer:
   Readings:
     0           ku.bm:brightness
     1           ku.bm:brightness
     2           ku.bm:brightness
     3           ku.bm:brightness
     4           ku.bm:brightness
     all         ku.bm:brightness
   Regexp:
     0:
     1:
     2:
     3:
     4:
     5:
     All:
   State:
   Trigger:
Attributes:
   do         always


Es funktioniert nun jedoch, erst wenn das Event vom Bewegunsmelder kommt.
Gibt es eine Möglichkeit bei NICHT WAHR sofort einen passenden Zustand zu suchen ?
Titel: Antw:Kein Zustandwechsel DOESLEIF, obwohl NICHT WAHR
Beitrag von: Damian am 08 März 2017, 20:45:04
Der Fall, der funktioniert interessiert doch nicht, sondern der, der nicht funktioniert.

Du musst also, wie auch immer, den off-Fall provozieren und davon list posten.
Titel: Antw:Kein Zustandwechsel DOESLEIF, obwohl NICHT WAHR
Beitrag von: Simon74 am 08 März 2017, 22:40:23
Da es sich bei bm.alle um einen dummy handelt kein Problem.
do always ist entfernt.

bm.alle = off
list:
Internals:
   DEF        ([ku.bm:brightness] >= 45 and [ez.ws1] eq "off") (set WandTablet screenBrightness 100)
DOELSEIF
([ku.bm:brightness] >= 45 and [ez.ws1] eq "on") (set WandTablet screenBrightness 200)
DOELSEIF
([ku.bm:brightness] >= 40) (set WandTablet screenBrightness 70)
DOELSEIF
([ku.bm:brightness] >= 35) (set WandTablet screenBrightness 25)
DOELSEIF
([ku.bm:brightness] >= 30) (set WandTablet screenBrightness 20)
DOELSEIF
([bm.alle] eq "off") (set WandTablet screenBrightness 1)
   NAME       tablet.display.brightness
   NR         461
   NTFY_ORDER 50-tablet.display.brightness
   STATE      cmd_6
   TYPE       DOIF
   Readings:
     2017-03-08 22:26:54   Device          bm.alle
     2017-03-08 22:26:54   cmd             6
     2017-03-08 22:26:54   cmd_event       bm.alle
     2017-03-08 22:26:54   cmd_nr          6
     2017-03-08 22:26:54   e_bm.alle_STATE off
     2017-03-08 21:53:23   e_ez.ws1_STATE  off
     2017-03-08 22:23:26   e_ku.bm_brightness 35
     2017-03-08 22:26:54   state           cmd_6
   Condition:
     0          ReadingValDoIf($hash,'ku.bm','brightness') >= 45 and InternalDoIf($hash,'ez.ws1','STATE') eq "off"
     1          ReadingValDoIf($hash,'ku.bm','brightness') >= 45 and InternalDoIf($hash,'ez.ws1','STATE') eq "on"
     2          ReadingValDoIf($hash,'ku.bm','brightness') >= 40
     3          ReadingValDoIf($hash,'ku.bm','brightness') >= 35
     4          ReadingValDoIf($hash,'ku.bm','brightness') >= 30
     5          InternalDoIf($hash,'bm.alle','STATE') eq "off"
   Devices:
     0           ku.bm ez.ws1
     1           ku.bm ez.ws1
     2           ku.bm
     3           ku.bm
     4           ku.bm
     5           bm.alle
     all         ku.bm ez.ws1 bm.alle
   Do:
     0:
       0          set WandTablet screenBrightness 100
     1:
       0          set WandTablet screenBrightness 200
     2:
       0          set WandTablet screenBrightness 70
     3:
       0          set WandTablet screenBrightness 25
     4:
       0          set WandTablet screenBrightness 20
     5:
       0          set WandTablet screenBrightness 1
     6:
   Helper:
     event      off
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   bm.alle
     timerevent off
     triggerDev bm.alle
     timerevents:
       off
     timereventsState:
       state: off
     triggerEvents:
       off
     triggerEventsState:
       state: off
   Internals:
     0           ez.ws1:STATE
     1           ez.ws1:STATE
     5           bm.alle:STATE
     all         ez.ws1:STATE bm.alle:STATE
   Itimer:
   Readings:
     0           ku.bm:brightness
     1           ku.bm:brightness
     2           ku.bm:brightness
     3           ku.bm:brightness
     4           ku.bm:brightness
     all         ku.bm:brightness
   Regexp:
     0:
     1:
     2:
     3:
     4:
     5:
     All:
   State:
   Trigger:
Attributes:


Der nächste list vom Zustandswechsel in bm.alle => on:
Internals:
   DEF        ([ku.bm:brightness] >= 45 and [ez.ws1] eq "off") (set WandTablet screenBrightness 100)
DOELSEIF
([ku.bm:brightness] >= 45 and [ez.ws1] eq "on") (set WandTablet screenBrightness 200)
DOELSEIF
([ku.bm:brightness] >= 40) (set WandTablet screenBrightness 70)
DOELSEIF
([ku.bm:brightness] >= 35) (set WandTablet screenBrightness 25)
DOELSEIF
([ku.bm:brightness] >= 30) (set WandTablet screenBrightness 20)
DOELSEIF
([bm.alle] eq "off") (set WandTablet screenBrightness 1)
   NAME       tablet.display.brightness
   NR         461
   NTFY_ORDER 50-tablet.display.brightness
   STATE      cmd_6
   TYPE       DOIF
   Readings:
     2017-03-08 22:35:59   Device          bm.alle
     2017-03-08 22:35:55   cmd             6
     2017-03-08 22:35:55   cmd_event       bm.alle
     2017-03-08 22:35:55   cmd_nr          6
     2017-03-08 22:35:59   e_bm.alle_STATE on
     2017-03-08 21:53:23   e_ez.ws1_STATE  off
     2017-03-08 22:32:42   e_ku.bm_brightness 35
     2017-03-08 22:35:55   state           cmd_6
   Condition:
     0          ReadingValDoIf($hash,'ku.bm','brightness') >= 45 and InternalDoIf($hash,'ez.ws1','STATE') eq "off"
     1          ReadingValDoIf($hash,'ku.bm','brightness') >= 45 and InternalDoIf($hash,'ez.ws1','STATE') eq "on"
     2          ReadingValDoIf($hash,'ku.bm','brightness') >= 40
     3          ReadingValDoIf($hash,'ku.bm','brightness') >= 35
     4          ReadingValDoIf($hash,'ku.bm','brightness') >= 30
     5          InternalDoIf($hash,'bm.alle','STATE') eq "off"
   Devices:
     0           ku.bm ez.ws1
     1           ku.bm ez.ws1
     2           ku.bm
     3           ku.bm
     4           ku.bm
     5           bm.alle
     all         ku.bm ez.ws1 bm.alle
   Do:
     0:
       0          set WandTablet screenBrightness 100
     1:
       0          set WandTablet screenBrightness 200
     2:
       0          set WandTablet screenBrightness 70
     3:
       0          set WandTablet screenBrightness 25
     4:
       0          set WandTablet screenBrightness 20
     5:
       0          set WandTablet screenBrightness 1
     6:
   Helper:
     event      on
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   bm.alle
     timerevent off
     triggerDev bm.alle
     timerevents:
       off
     timereventsState:
       state: off
     triggerEvents:
       on
     triggerEventsState:
       state: on
   Internals:
     0           ez.ws1:STATE
     1           ez.ws1:STATE
     5           bm.alle:STATE
     all         ez.ws1:STATE bm.alle:STATE
   Itimer:
   Readings:
     0           ku.bm:brightness
     1           ku.bm:brightness
     2           ku.bm:brightness
     3           ku.bm:brightness
     4           ku.bm:brightness
     all         ku.bm:brightness
   Regexp:
     0:
     1:
     2:
     3:
     4:
     5:
     All:
   State:
   Trigger:
Attributes: