Hauptmenü

DoIf mit wait (Gelöst)

Begonnen von al15, 28 Dezember 2019, 23:23:59

Vorheriges Thema - Nächstes Thema

al15

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

marty29ak

Reicht da nicht ein ......DOELSE (set WZ_Licht_3 off) ?
Gruß Martin

amenomade

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
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

al15

#3
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

al15

#4
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

marty29ak

Wird das ? jetzt nicht zum namen dazugerechnet ?
Gibt es irgend wo eine Dokumentation was das ? bewirkt?
Gruß Martin

al15

#6
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

marty29ak

Danke! Wieder was dazugelernt.  :)
Gruß Martin

amenomade

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
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus