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:1
Das 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
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.