DOIF Fragen zu repeatsame, repeatcmd, wait und rand

Begonnen von Jogi, 29 März 2023, 14:27:48

Vorheriges Thema - Nächstes Thema

Jogi

Hallo,
ich nutze schon lange DOIF´s und finde sie genial. Aber ich nutze natürlich noch nicht alle Funktionen. Momentan versuche ich das Zusammenspiel von repeatsame, repeatcmd, wait und rand zu verstehen und habe mir dazu ein Test-DOIF gebaut.
Internals:
   CFGFN     
   DEF        ([10:00-22:30] and [Helligkeit] > 1)(set Testlampe rgb 0580FB : bri 245)(set Testlampe bri {(int(rand(220))+1)})(set Testlampe sat {(int(rand(254))+1)})## 1
DOELSE (set Testlampe off) ## 3 AUS
   FUUID      6424221e-f33f-8efe-9d34-8854dc413ef72811
   MODEL      FHEM
   NAME       Test_DOIF
   NOTIFYDEV  Helligkeit,global
   NR         443403
   NTFY_ORDER 50-Test_DOIF
   STATE      cmd_1
   TYPE       DOIF
   VERSION    27239 2023-02-16 21:12:36
   eventCount 444
   READINGS:
     2023-03-29 14:15:19   Device          Helligkeit
     2023-03-29 14:15:39   cmd             1.3
     2023-03-29 14:15:39   cmd_event       Helligkeit
     2023-03-29 14:15:39   cmd_nr          1
     2023-03-29 14:15:39   cmd_seqnr       3
     2023-03-29 14:15:19   e_Helligkeit_STATE 1713.475
     2023-03-29 14:08:14   mode            enabled
     2023-03-29 14:15:39   state           cmd_1
     2023-03-29 14:08:14   timer_01_c01    30.03.2023 10:00:00
     2023-03-29 14:08:14   timer_02_c01    29.03.2023 22:30:00
     2023-03-29 14:15:39   wait_timer      29.03.2023 14:15:58 cmd_1_1 Helligkeit
   Regex:
     accu:
     bar:
     collect:
     cond:
       Helligkeit:
         0:
           &STATE     ^Helligkeit$
   attr:
     cmdState:
     repeatcmd:
       rand(10)+10
     wait:
       0:
         0
         rand(10)+5
         rand(20)+3
       1:
         rand(300)+10
     waitdel:
   condition:
     0          ::DOIF_time($hash,0,1,$wday,$hms) and ::InternalDoIf($hash,'Helligkeit','STATE') > 1
   days:
   do:
     0:
       0          set Testlampe rgb 0580FB : bri 245
       1          set Testlampe bri {(int(rand(220))+1)}
       2          set Testlampe sat {(int(rand(254))+1)}
     1:
       0          set Testlampe off
   helper:
     NOTIFYDEV  Helligkeit,global
     event      1713.475
     globalinit 1
     last_timer 2
     sleepdevice Helligkeit
     sleepsubtimer 0
     sleeptimer 0
     timerdev   Helligkeit
     timerevent 1713.475
     triggerDev Helligkeit
     DOIF_eventa:
       cmd_nr: 1
       cmd_seqnr: 3
       cmd_event: Helligkeit
       cmd_1
     DOIF_eventas:
       cmd_nr: 1
       cmd_seqnr: 3
       cmd_event: Helligkeit
       state: cmd_1
     timerevents:
       1713.475
     timereventsState:
       state: 1713.475
     triggerEvents:
       1713.475
     triggerEventsState:
       state: 1713.475
   internals:
     all         Helligkeit:STATE
   interval:
     0          -1
     1          0
   intervalfunc:
   localtime:
     0          1680163200
     1          1680121800
   readings:
   realtime:
     0          10:00:00
     1          22:30:00
   time:
     0          10:00:00
     1          22:30:00
   timeCond:
     0          0
     1          0
   timer:
     0          0
     1          0
   timers:
     0           0  1
   trigger:
   triggertime:
     1680121800:
       localtime  1680121800
       hash:
     1680163200:
       localtime  1680163200
       hash:
   uiState:
   uiTable:
Attributes:
 
   group      1Einstellungen
   repeatcmd  rand(10)+10:
   room       99.Programm
   startup    set $SELF checkall
   userattr   LichtAlarm LichtAlarm_map structexclude
   wait       0,rand(10)+5,rand(20)+3:rand(300)+10

Folgende Fragen habe ich:
- was muss ich bei wait, repeatcmd, repeatsame eingeben, wenn das auf den letzten Pfad nicht zutreffen soll. Ist es richtig, dann hinter dem : nichts einzutragen (so wie ich es jetzt gemacht habe), oder muss da eine 0 oder eine 1 rein?

- Wenn ich es richtig verstanden habe ist bei repeatcmd nicht möglich einzelne Kommandos pro Zweig zu beeinflussen, sondern die Zeit gilt immer für den kompletten Zweig. Korrekt?

- Ist es mittels repeatsame möglich zu beeinflussen, wie oft die einzelnen Befehle abgesetzt werden? z.B. durch
repeatsame: 1,1,10:1Das ist mir nicht gelungen, aber wahrscheinlich mache ich etwas falsch.

- Sind die rand -Befehle soweit korrekt vom Syntax? Scheint zu funktionieren, aber ich bin nicht sicher, da ich bisher nicht mit rand gearbeitet habe.

Ich bin für Infos, Hinweise und Tipps dankbar.
Gruß,
Jogi

Damian

repeadcmd und repeadsame beziehen sich auf den ganz Ausführungspfad. Man kann nicht einzelnen Sequenzen des Pfandes wiederholen.

Also kannst du nur, wie in der Commandref beschrieben ist, Zeiten mit Doppelpunkt getrennt angeben und nicht mit Komma. Wenn du den letzten Pfad nicht wiederholen willst, dann brauchst du auch keinen Doppelpunkt am Ende angeben.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF