Summiert sich beim DOIF das "on for timer"?

Begonnen von Ruggy, 06 April 2023, 16:17:24

Vorheriges Thema - Nächstes Thema

Ruggy

Hallo,

habe ein DOIF, mit welchem ich nach Betätigen der Klingel (oben oder unten) das Licht für 120 Sekunden einschalte.

Wenn die Klingel jetzt z.B. 2x betätigt wird, bleibt das Licht dann für 240 Sekunden ein?

Es ist nämlich so, dass das Licht manchmal nicht mehr ausgeht.
Bzw. wenn durch die Kinder die Klingel 10x und mehr betätigt wird, sich die Zeit dementsprechend verlängert.

Hier das DOIF:

Internals:
   DEF        ([KLINGELSENSOR_OG:"closed"] or [HUESensor58:"closed"]) (set HUEDevice24 on-for-timer 120)
   FUUID      60a95af8-f33f-f59f-27b2-c244c8f8ba8bf344
   MODEL      FHEM
   NAME       KLINGEL_LICHT
   NOTIFYDEV  KLINGELSENSOR_OG,HUESensor58,global
   NR         144
   NTFY_ORDER 50-KLINGEL_LICHT
   STATE      cmd_1
   TYPE       DOIF
   VERSION    27190 2023-02-07 19:11:02
   eventCount 23
   Helper:
     DBLOG:
       state:
         DbLog:
           TIME       1680783898.88276
           VALUE      cmd_1
   READINGS:
     2023-04-06 14:24:58   Device          KLINGELSENSOR_OG
     2023-04-06 14:24:58   cmd             1
     2023-04-06 14:24:58   cmd_event       KLINGELSENSOR_OG
     2023-04-06 14:24:58   cmd_nr          1
     2023-04-06 14:24:57   e_HUESensor58_events open
     2023-04-06 14:24:58   e_KLINGELSENSOR_OG_events open
     2021-05-22 21:51:32   mode            enabled
     2023-04-06 14:24:58   state           cmd_1
   Regex:
     accu:
     bar:
     collect:
     cond:
       HUESensor58:
         0:
           &STATE     ^HUESensor58$
       KLINGELSENSOR_OG:
         0:
           &STATE     ^KLINGELSENSOR_OG$
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::EventDoIf('KLINGELSENSOR_OG',$hash,'closed',1) or ::EventDoIf('HUESensor58',$hash,'closed',1)
   do:
     0:
       0          set HUEDevice24 on-for-timer 120
     1:
   helper:
     NOTIFYDEV  KLINGELSENSOR_OG,HUESensor58,global
     event      open
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   KLINGELSENSOR_OG
     timerevent closed
     triggerDev KLINGELSENSOR_OG
     bm:
       DOIF_Get:
         cnt        1
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        06.04. 16:11:08
         max        3.00407409667969e-05
         tot        3.00407409667969e-05
         mAr:
           HASH(0x4648578)
           KLINGEL_LICHT
           ?
       DOIF_Notify:
         cnt        54
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        04.04. 15:02:06
         max        0.0181288719177246
         tot        0.324151992797852
         mAr:
           HASH(0x4648578)
           HASH(0x463aa48)
       DOIF_Set:
         cnt        9
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        06.04. 16:10:45
         max        0.000198125839233398
         tot        0.00111246109008789
         mAr:
           HASH(0x4648578)
           KLINGEL_LICHT
           ?
     timerevents:
       closed
     timereventsState:
       state: closed
     triggerEvents:
       open
     triggerEventsState:
       state: open
   internals:
   perlblock:
   readings:
   trigger:
     all         KLINGELSENSOR_OG HUESensor58
   uiState:
   uiTable:
Attributes:
   do         always
   room       AMAD,Alarm,Aussen

Vielen Dank
Grüße
Ruggy

Damian

Normalerweise verlängert sich on-for-timer nicht, sondern wird neu gesetzt.

Alternativ kann man einen on-for-timer mit DOIF nachbilden:

https://fhem.de/commandref_DE.html#DOIF_Weitere_Anwendungsbeispiele
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Per

Schon mal probiert, den Command Teil direkt auszuführen? Tritt der Fehler dann auch auf? Falls ja, ist DOIf recht unschuldig ;)

Ruggy

@Per
Habe jetzt den Command Teil direkt ausgeführt.
DOIF ist anscheinend unschuldig.

Wie @Damian schon geschrieben hat, wird der Timer neu gesetzt, wenn ich den Command Teil neu ausführe.

Dann muß es an etwas anderen liegen, dass es manchmal nicht ausschaltet.
Ich kann es leider nicht nachstellen, weil es meistens funktioniert und der Event monitor dann nicht mit gelaufen ist.