FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Omega am 18 März 2018, 18:46:18

Titel: [gelöst] Wait verzögert nicht
Beitrag von: Omega am 18 März 2018, 18:46:18
Ich benötige ein verzögertes Ausführen von Befehlen. Dazu habe ich folgendes DOIF definiert:

Internals:
   CFGFN     
   DEF        ([ESPEasy_ESP_G01:z.boot] == 1) (
(set ESPEasy_ESP_G01 raw event,set_z.var1=[ESPEasy_ESP_G19:z.Zaehlerstand])
(set ESPEasy_ESP_G01 raw event,set_z.var2=[ESPEasy_ESP_G19:z.total_Tag])
(set ESPEasy_ESP_G01 raw event,set_z.var3=[ESPEasy_ESP_G19:z.Hzg_Tag])
(set ESPEasy_ESP_G01 raw event,set_z.var4=[ESPEasy_ESP_G19:z.WW_Tag])
(set ESPEasy_ESP_G01 raw event,set_z.boot=0)
)
   NAME       doif.Test_Var_Set
   NR         1254293
   NTFY_ORDER 50-doif.Test_Var_Set
   STATE      cmd_2
   TYPE       DOIF
   READINGS:
     2018-03-18 18:40:46   Device          ESPEasy_ESP_G01
     2018-03-18 18:40:46   cmd             2
     2018-03-18 18:40:46   cmd_event       ESPEasy_ESP_G01
     2018-03-18 18:40:46   cmd_nr          2
     2018-03-18 18:40:46   e_ESPEasy_ESP_G01_z.boot 0
     2018-03-18 18:40:36   mode            enabled
     2018-03-18 18:40:46   state           cmd_2
   Regex:
   condition:
     0          ReadingValDoIf($hash,'ESPEasy_ESP_G01','z.boot') == 1
   devices:
     0           ESPEasy_ESP_G01
     all         ESPEasy_ESP_G01
   do:
     0:
       0           (set ESPEasy_ESP_G01 raw event,set_z.var1=[ESPEasy_ESP_G19:z.Zaehlerstand]) (set ESPEasy_ESP_G01 raw event,set_z.var2=[ESPEasy_ESP_G19:z.total_Tag]) (set ESPEasy_ESP_G01 raw event,set_z.var3=[ESPEasy_ESP_G19:z.Hzg_Tag]) (set ESPEasy_ESP_G01 raw event,set_z.var4=[ESPEasy_ESP_G19:z.WW_Tag]) (set ESPEasy_ESP_G01 raw event,set_z.boot=0)
     1:
   helper:
     DOIF_Readings_events
     DOIF_eventas
     event      z.boot: 0,RSSI: -73 Uptime: 8.00 humidity: 41 temperature: 19.90 temperature2_:  temperature_1: 19.69 z.Hzg_Tag:  z.WW_Tag:  z.Zaehlerstan:  z.boot: 0 z.total_Tag:  z.var1: 4277888 z.var2: 0 z.var3: 0 z.var4: 133
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   ESPEasy_ESP_G01
     timerevent z.boot: 0,RSSI: -73 Uptime: 8.00 humidity: 41 temperature: 19.90 temperature2_:  temperature_1: 19.69 z.Hzg_Tag:  z.WW_Tag:  z.Zaehlerstan:  z.boot: 0 z.total_Tag:  z.var1: 4277888 z.var2: 0 z.var3: 0 z.var4: 133
     triggerDev ESPEasy_ESP_G01
     bm:
       DOIF_Get:
         cnt        1
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        18.03. 18:40:36
         max        8.10623168945312e-06
         tot        8.10623168945312e-06
         mAr:
           HASH(0x9efd160)
           doif.Test_Var_Set
           ?
       DOIF_Notify:
         cnt        39
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        18.03. 18:40:42
         max        0.0507369041442871
         tot        0.09682297706604
         mAr:
           HASH(0x9efd160)
           HASH(0x7e469b0)
       DOIF_Set:
         cnt        6
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        18.03. 18:40:42
         max        3.98159027099609e-05
         tot        0.000200748443603516
         mAr:
           HASH(0x9efd160)
           doif.Test_Var_Set
           ?
     timerevents:
       z.boot: 0
       RSSI: -73 Uptime: 8.00 humidity: 41 temperature: 19.90 temperature2_:  temperature_1: 19.69 z.Hzg_Tag:  z.WW_Tag:  z.Zaehlerstan:  z.boot: 0 z.total_Tag:  z.var1: 4277888 z.var2: 0 z.var3: 0 z.var4: 133
     timereventsState:
       z.boot: 0
       state: RSSI: -73 Uptime: 8.00 humidity: 41 temperature: 19.90 temperature2_:  temperature_1: 19.69 z.Hzg_Tag:  z.WW_Tag:  z.Zaehlerstan:  z.boot: 0 z.total_Tag:  z.var1: 4277888 z.var2: 0 z.var3: 0 z.var4: 133
     triggerEvents:
       z.boot: 0
       RSSI: -73 Uptime: 8.00 humidity: 41 temperature: 19.90 temperature2_:  temperature_1: 19.69 z.Hzg_Tag:  z.WW_Tag:  z.Zaehlerstan:  z.boot: 0 z.total_Tag:  z.var1: 4277888 z.var2: 0 z.var3: 0 z.var4: 133
     triggerEventsState:
       z.boot: 0
       state: RSSI: -73 Uptime: 8.00 humidity: 41 temperature: 19.90 temperature2_:  temperature_1: 19.69 z.Hzg_Tag:  z.WW_Tag:  z.Zaehlerstan:  z.boot: 0 z.total_Tag:  z.var1: 4277888 z.var2: 0 z.var3: 0 z.var4: 133
   internals:
   itimer:
   readings:
     0           ESPEasy_ESP_G01:z.boot
     all         ESPEasy_ESP_G01:z.boot
   trigger:
   uiState:
   uiTable:
Attributes:
   room       Test
   wait       0,20,20,20,20


Wie im Log zu sehen gibt es leider keine Verzögerung (bewusst 20 Sekunden gewählt zur Demonstration)

2018.03.18 18:40:42 3: ESPEasy: set ESPEasy_ESP_G01 raw event,set_z.var1=4277896
2018.03.18 18:40:42 3: ESPEasy: set ESPEasy_ESP_G01 raw event,set_z.var2=1160
2018.03.18 18:40:42 3: ESPEasy: set ESPEasy_ESP_G01 raw event,set_z.var3=1027
2018.03.18 18:40:42 3: ESPEasy: set ESPEasy_ESP_G01 raw event,set_z.var4=133
2018.03.18 18:40:42 3: ESPEasy: set ESPEasy_ESP_G01 raw event,set_z.boot=0


Was habe ich übersehen?

LG
Holger
Titel: Antw:Wait verzögert nicht
Beitrag von: Damian am 18 März 2018, 19:28:35
Da sind zwei Klammen zuviel, dadurch hast du die Befehlssequenz zu einem Block definiert:

   DEF        ([ESPEasy_ESP_G01:z.boot] == 1) (
(set ESPEasy_ESP_G01 raw event,set_z.var1=[ESPEasy_ESP_G19:z.Zaehlerstand])
(set ESPEasy_ESP_G01 raw event,set_z.var2=[ESPEasy_ESP_G19:z.total_Tag])
(set ESPEasy_ESP_G01 raw event,set_z.var3=[ESPEasy_ESP_G19:z.Hzg_Tag])
(set ESPEasy_ESP_G01 raw event,set_z.var4=[ESPEasy_ESP_G19:z.WW_Tag])
(set ESPEasy_ESP_G01 raw event,set_z.boot=0)
)
Titel: Antw:Wait verzögert nicht
Beitrag von: Omega am 18 März 2018, 20:40:11
Danke! Hätte ich bestimmt nicht gefunden.

Den Code musste ich aber noch ändern, da das Komma nach event jetzt als Befehlstrennung angesehen wurde.
Zumindest in der folgenden Variante funktioniert jetzt alles wie es soll.

([ESPEasy_ESP_G01:z.boot] == 1)
{fhem ("set ESPEasy_ESP_G01 raw event,set_z.var1=".ReadingsVal("ESPEasy_ESP_G19", "z.Zaehlerstand", "0"))}
{fhem ("set ESPEasy_ESP_G01 raw event,set_z.var2=".ReadingsVal("ESPEasy_ESP_G19", "z.total_Tag", "0"))}
{fhem ("set ESPEasy_ESP_G01 raw event,set_z.var3=".ReadingsVal("ESPEasy_ESP_G19", "z.Hzg_Tag", "0"))}
{fhem ("set ESPEasy_ESP_G01 raw event,set_z.var4=".ReadingsVal("ESPEasy_ESP_G19", "z.WW_Tag", "0"))}
{fhem ("set ESPEasy_ESP_G01 raw event,set_z.boot=0")}


LG
Holger
Titel: Antw:Wait verzögert nicht
Beitrag von: Damian am 18 März 2018, 20:42:35
Zitat von: Omega am 18 März 2018, 20:40:11
Danke! Hätte ich bestimmt nicht gefunden.

Den Code musste ich aber noch ändern, da das Komma nach event jetzt als Befehlstrennung angesehen wurde.
Zumindest in der folgenden Variante funktioniert jetzt alles wie es soll.

([ESPEasy_ESP_G01:z.boot] == 1)
{fhem ("set ESPEasy_ESP_G01 raw event,set_z.var1=".ReadingsVal("ESPEasy_ESP_G19", "z.Zaehlerstand", "0"))}
{fhem ("set ESPEasy_ESP_G01 raw event,set_z.var2=".ReadingsVal("ESPEasy_ESP_G19", "z.total_Tag", "0"))}
{fhem ("set ESPEasy_ESP_G01 raw event,set_z.var3=".ReadingsVal("ESPEasy_ESP_G19", "z.Hzg_Tag", "0"))}
{fhem ("set ESPEasy_ESP_G01 raw event,set_z.var4=".ReadingsVal("ESPEasy_ESP_G19", "z.WW_Tag", "0"))}
{fhem ("set ESPEasy_ESP_G01 raw event,set_z.boot=0")}


LG
Holger

Es reicht dafür eine zusätzliche Klammerung, z. B.:

((set ESPEasy_ESP_G01 raw event,set_z.var1=[ESPEasy_ESP_G19:z.Zaehlerstand]))
Titel: Antw:[gelöst] Wait verzögert nicht
Beitrag von: Omega am 18 März 2018, 21:20:15
Gefällt mir viel besser - danke.