Simples DOIF als "at" Ersatz funktioniert nicht

Begonnen von weini, 08 Oktober 2020, 07:32:43

Vorheriges Thema - Nächstes Thema

weini

Hallo zusammen!

Ich knoble an einem vermeintlich simplen DOIF: Es soll einmal wöchentlich ein reduceLog ausgeführt werden. Wegen der Wochentags-Logik möchte ich das gerne mit einem DOIF und nicht mit einem einfach at machen.

defmod dif_MySQL_reduceLog DOIF ([02:30|Mi]) (set rep_MySQL_reduceLog reduceLog average)

Nach dem Anlegen bzw. Initialisieren funktioniert das DOIF genau einmal und bleibt dann immer auf "cmd1" stehen. Ich habe alternativ auch schon
defmod dif_MySQL_reduceLog DOIF ([02:30|Mi]) (set rep_MySQL_reduceLog reduceLog average) DOELSE ()
versucht, das ändert aber nichts.
Wo ist denn mein Denkfehler, warum funktioniert das nicht?

Hier noch das komplette List:
Internals:
   DEF        ([02:30|Mi]) (set rep_MySQL_reduceLog reduceLog average) DOELSE ()
   FUUID      5d4eba31-f33f-73da-5952-ef0a5dd320983059
   MODEL      FHEM
   NAME       dif_MySQL_reduceLog
   NOTIFYDEV  global
   NR         487
   NTFY_ORDER 50-dif_MySQL_reduceLog
   STATE      cmd_1
   TYPE       DOIF
   VERSION    22428 2020-07-18 20:32:08
   READINGS:
     2020-10-07 02:30:00   cmd             1
     2020-10-07 02:30:00   cmd_event       timer_1
     2020-10-07 02:30:00   cmd_nr          1
     2020-09-30 08:20:47   mode            enabled
     2020-10-07 02:30:00   state           cmd_1
     2020-10-08 02:30:00   timer_01_c01    09.10.2020 02:30:00|Mi
   Regex:
     accu:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::DOIF_time_once($hash,0,$wday,"Mi")
   days:
     0          Mi
   do:
     0:
       0          set rep_MySQL_reduceLog reduceLog average
     1:
       0         
   helper:
     DEVFILTER  ^global$
     NOTIFYDEV  global
     event      timer_1
     globalinit 1
     last_timer 1
     sleeptimer -1
     timerdev   
     timerevent timer_1
     triggerDev
     timerevents:
       timer_1
     timereventsState:
       timer_1
     triggerEvents:
       timer_1
     triggerEventsState:
       timer_1
   interval:
   intervalfunc:
   localtime:
     0          1602203400
   realtime:
     0          02:30:00
   time:
     0          02:30:00
   timeCond:
     0          0
   timer:
     0          0
   timers:
     0           0
   triggertime:
     1602203400:
       localtime  1602203400
       hash:
   uiState:
   uiTable:
Attributes:
   group      DbLog


Ich habe FHEM schon ein paar Monate nicht mehr aktualisiert und würde das auch gerne vermeiden. Die Version vom DOIF Modul ist die 22428. Wenn es am Versionsstand liegt, dann würde ich das DOIF selektiv aktualisieren.

Viele Grüße,
weini

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

weini

Danke dir!
Kenne ich natürlich. Dann mache ich das gerne so.

Ich hatte nur gedacht, dass die Bedingung "[02:30|Mi]" nach 2:30 nicht mehr erfüllt ist und er damit auf cmd2 gehen müsste.
Muss das DOELSE () drin bleiben oder kann ich mir das sparen?

Damian

#3
Zitat von: weini am 08 Oktober 2020, 07:39:51
Danke dir!
Kenne ich natürlich. Dann mache ich das gerne so.

Ich hatte nur gedacht, dass die Bedingung "[02:30|Mi]" nach 2:30 nicht mehr erfüllt ist und er damit auf cmd2 gehen müsste.
Muss das DOELSE () drin bleiben oder kann ich mir das sparen?

Und wer soll es nach 2:30 Uhr triggern?

DOELSE brauchst du bei do always nicht.

PS.

Im Perl-Modus braucht man z. B. kein do always

defmod dif_MySQL_reduceLog DOIF {[02:30|Mi];;fhem_set("rep_MySQL_reduceLog reduceLog average")}
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

weini

Du hast ja recht, ist eigentlich unter "Ereignissteuerung" gut beschrieben.
Danke dir nochmals!