FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: al15 am 28 Dezember 2019, 23:23:59

Titel: DoIf mit wait (Gelöst)
Beitrag von: al15 am 28 Dezember 2019, 23:23:59
Hallo,

habe die ref jetzt xmal gelesen und auch beispiele von anderen - scheitere aber an der verzügerung - anbei mein code:

   
([TESTSCHALTER1:state] eq "1002" and [WZ_Licht_3:state] eq "off")(set WZ_Licht_3 on)(set WZ_Licht_3 off) /
DOELSEIF ([TESTSCHALTER1:state] eq "1002" and [WZ_Licht_3:state] eq "on")(set WZ_Licht_3 off)

weiters ist folgendes definiert:
cmdpause              2:2
do                         always
wait                       0,10:0

leider wird nach dem einschalten kein wait timer gesetzt - es hat irgendwie mit dem 2ten doelseif zu tun da wenn ich nur das mache:
([TESTSCHALTER1:state] eq "1002" and [WZ_Licht_3:state] eq "off")(set WZ_Licht_3 on)(set WZ_Licht_3 off)

und den cmdpause 2 bzw wait 0,10 habe ein timer erstellt wird ...

kann mir jemand ned tip geben?

DANKE
lg
AL
Titel: Antw:DoIf mit wait
Beitrag von: marty29ak am 29 Dezember 2019, 00:05:18
Reicht da nicht ein ......DOELSE (set WZ_Licht_3 off) ?
Titel: Antw:DoIf mit wait
Beitrag von: amenomade am 29 Dezember 2019, 00:22:59
In welchem Zustand ist er nach dem anschalten? Poste lieber ein "list" vom DOIF während der 10 Sekunden, es ist einfacher zu sehen, was passiert
Titel: Antw:DoIf mit wait
Beitrag von: al15 am 29 Dezember 2019, 00:41:29
hallo,

anbei das list:

Internals:
   CFGFN     
   DEF        ([TESTSCHALTER1:state] eq "1002" and [WZ_Licht_3:state] eq "off") (set WZ_Licht_3 on)(set WZ_Licht_3 off) DOELSEIF ([TESTSCHALTER1:state] eq "1002" and [WZ_Licht_3:state] eq "on")(set WZ_Licht_3 off) DOELSEIF ([TESTSCHALTER1:state] eq "1001" and [WZ_Licht_3:state] eq "off")(set WZ_Licht_3 on) DOELSE ()
   FUUID      5e07cb2c-f33f-aa97-1517-b432c8d1476e6e46
   MODEL      FHEM
   NAME       DOIF_Licht_Vorraum
   NOTIFYDEV  WZ_Licht_3,TESTSCHALTER1,global
   NR         1035
   NTFY_ORDER 50-DOIF_Licht_Vorraum
   STATE      cmd_1_1
   TYPE       DOIF
   VERSION    20811 2019-12-22 17:45:08
   Helper:
     DBLOG:
       cmd:
         DBLogging:
           TIME       1577576632.07047
           VALUE      1.1
       cmd_event:
         DBLogging:
           TIME       1577576632.07047
           VALUE      TESTSCHALTER1
       cmd_nr:
         DBLogging:
           TIME       1577576632.07047
           VALUE      1
       cmd_seqnr:
         DBLogging:
           TIME       1577576632.07047
           VALUE      1
       last_cmd:
         DBLogging:
           TIME       1577570667.53432
           VALUE      cmd_1_1
       mode:
         DBLogging:
           TIME       1577573802.60436
           VALUE      enabled
       state:
         DBLogging:
           TIME       1577576632.07047
           VALUE      cmd_1_1
       wait_timer:
         DBLogging:
           TIME       1577576632.18899
           VALUE      no timer
   READINGS:
     2019-12-29 00:43:52   Device          WZ_Licht_3
     2019-12-29 00:43:52   cmd             1.1
     2019-12-29 00:43:52   cmd_event       TESTSCHALTER1
     2019-12-29 00:43:52   cmd_nr          1
     2019-12-29 00:43:52   cmd_seqnr       1
     2019-12-29 00:43:52   e_TESTSCHALTER1_state 1002
     2019-12-29 00:43:52   e_WZ_Licht_3_state on
     2019-12-28 23:56:42   mode            enabled
     2019-12-29 00:43:52   state           cmd_1_1
     2019-12-29 00:43:52   wait_timer      no timer
   Regex:
     accu:
     cond:
       TESTSCHALTER1:
         0:
           state      ^TESTSCHALTER1$:^state:
         1:
           state      ^TESTSCHALTER1$:^state:
         2:
           state      ^TESTSCHALTER1$:^state:
       WZ_Licht_3:
         0:
           state      ^WZ_Licht_3$:^state:
         1:
           state      ^WZ_Licht_3$:^state:
         2:
           state      ^WZ_Licht_3$:^state:
   attr:
     cmdState:
     cmdpause:
       2
       2
       2
     wait:
       0:
         0
         10
       1:
         0
       2:
         0
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'TESTSCHALTER1','state') eq "1002" and ::ReadingValDoIf($hash,'WZ_Licht_3','state') eq "off"
     1          ::ReadingValDoIf($hash,'TESTSCHALTER1','state') eq "1002" and ::ReadingValDoIf($hash,'WZ_Licht_3','state') eq "on"
     2          ::ReadingValDoIf($hash,'TESTSCHALTER1','state') eq "1001" and ::ReadingValDoIf($hash,'WZ_Licht_3','state') eq "off"
   do:
     0:
       0          set WZ_Licht_3 on
       1          set WZ_Licht_3 off
     1:
       0          set WZ_Licht_3 off
     2:
       0          set WZ_Licht_3 on
     3:
       0         
   helper:
     DEVFILTER  ^global$|^WZ_Licht_3$|^TESTSCHALTER1$
     NOTIFYDEV  global|WZ_Licht_3|TESTSCHALTER1
     event      on,reportedState: on
     globalinit 1
     last_timer 0
     sleepdevice TESTSCHALTER1
     sleepsubtimer 1
     sleeptimer -1
     timerdev   WZ_Licht_3
     timerevent on,reportedState: on
     triggerDev WZ_Licht_3
     timerevents:
       on
       reportedState: on
     timereventsState:
       state: on
       reportedState: on
     triggerEvents:
       on
       reportedState: on
     triggerEventsState:
       state: on
       reportedState: on
   internals:
   readings:
     all         TESTSCHALTER1:state WZ_Licht_3:state
   trigger:
   uiState:
   uiTable:
Attributes:
   cmdpause   2:2:2
   do         always
   room       ZigBee
   wait       0,10:0:0


Im code ist jetzt noch ein weiteres element ändert aber an meinem problem nicht wirklich was...
DANKE
lg
AL
Titel: Antw:DoIf mit wait (Lösung)
Beitrag von: al15 am 29 Dezember 2019, 11:57:06
So hab das problem gefunden - das ein und ausschlaten des lichts hat auch das doif getriggert (sollte eigentlich ja nicht so sein wenn durch doif geschalten wird oder?) - habe jetzt einfach ein ? vor der nur zu prüfenden lichtabfrage gegeben die damit nicht triggert:

([TESTSCHALTER1:state] eq "1002" and [?WZ_Licht_3:state] eq "off") (set WZ_Licht_3 on)(set WZ_Licht_3 off) /
DOELSEIF ([TESTSCHALTER1:state] eq "1002" and [?WZ_Licht_3:state] eq "on")(set WZ_Licht_3 off) /
DOELSEIF ([TESTSCHALTER1:state] eq "1001" and [?WZ_Licht_3:state] eq "off")(set WZ_Licht_3 on)

Danke lg
AL
Titel: Antw:DoIf mit wait (Gelöst)
Beitrag von: marty29ak am 29 Dezember 2019, 12:08:32
Wird das ? jetzt nicht zum namen dazugerechnet ?
Gibt es irgend wo eine Dokumentation was das ? bewirkt?
Titel: Antw:DoIf mit wait (Gelöst)
Beitrag von: al15 am 29 Dezember 2019, 14:05:28
Hi,

das ? vor dem namen sagt das hier nur der wert geprüft wird aber der wert nicht als trigger fungiert - siehe hier (ganz unten):
https://wiki.fhem.de/wiki/DOIF/Einsteigerleitfaden,_Grundfunktionen_und_Erl%C3%A4uterungen

Zitat
Alle Auslöser
[?<Auslöserangabe>] Auslöser, die mit Fragezeichen beginnen lösen nicht aus, sie werden nur abgefragt

lg
AL
Titel: Antw:DoIf mit wait (Gelöst)
Beitrag von: marty29ak am 29 Dezember 2019, 15:39:11
Danke! Wieder was dazugelernt.  :)
Titel: Antw:DoIf mit wait (Lösung)
Beitrag von: amenomade am 29 Dezember 2019, 19:56:36
Zitat von: al15 am 29 Dezember 2019, 11:57:06
(sollte eigendlich ja nicht so sein wenn durch doif geschalten wird oder?)
Jein. DOIF unterdrück die Selbst-triggerung, um endlose Schleifen zu vermeiden. Aber da Du mit Pausen und Timer arbeitest, werden die Events doch bewertet