Hallo, ich bräuchte mal ein paar prüfende Augen.
Ich habe ein DOIF erstellt, dass jeden Tag um 00:01 Uhr den Zähler eines Counters hochsetzen soll. Doch es funktioniert einfach nicht.
Nehme ich die Zeitbedingung raus greift die Prüfung mit "Checkall", ist die Zeitangabe drin, greift sie nicht.
Hier mal das List:
Internals:
.FhemMetaInternals 1
DEF (([00:01]) and ([Saugroboter:counter] == 0))
(setreading Saugroboter counter 1)
DOELSEIF (([00:01]) and ([Saugroboter:counter] == 1))
(setreading Saugroboter counter 2)
DOELSEIF (([00:01]) and ([Saugroboter:counter] == 2))
(setreading Saugroboter counter 3)
FUUID 5fe98de0-f33f-793a-66fb-730b1a5167487477
FVERSION 98_DOIF.pm:0.234180/2020-12-26
MODEL FHEM
NAME Steuerung_Saugroboter_Counter
NOTIFYDEV Saugroboter,global
NR 159
NTFY_ORDER 50-Steuerung_Saugroboter_Counter
STATE initialized
TYPE DOIF
VERSION 23418 2020-12-26 10:04:12
.attraggr:
.attrminint:
READINGS:
2021-01-05 18:34:16 cmd 0
2021-01-05 18:34:16 mode enabled
2021-01-05 18:34:16 state initialized
2021-01-05 18:34:16 timer_01_c01 06.01.2021 00:01:00
2021-01-05 18:34:16 timer_02_c02 06.01.2021 00:01:00
2021-01-05 18:34:16 timer_03_c03 06.01.2021 00:01:00
2021-01-05 18:35:59 wait_timer no timer
Regex:
accu:
cond:
Saugroboter:
0:
counter ^Saugroboter$:^counter:
1:
counter ^Saugroboter$:^counter:
2:
counter ^Saugroboter$:^counter:
attr:
cmdState:
waitdel:
condition:
0 (::DOIF_time_once($hash,0,$wday)) and (::ReadingValDoIf($hash,'Saugroboter','counter') == 0)
1 (::DOIF_time_once($hash,1,$wday)) and (::ReadingValDoIf($hash,'Saugroboter','counter') == 1)
2 (::DOIF_time_once($hash,2,$wday)) and (::ReadingValDoIf($hash,'Saugroboter','counter') == 2)
days:
do:
0:
0 setreading Saugroboter counter 1
1:
0 setreading Saugroboter counter 2
2:
0 setreading Saugroboter counter 3
3:
helper:
DEVFILTER ^global$|^Saugroboter$
NOTIFYDEV global|Saugroboter
globalinit 1
last_timer 3
sleeptimer -1
triggerDev
intervalfunc:
localtime:
0 1609887660
1 1609887660
2 1609887660
readings:
all Saugroboter:counter
realtime:
0 00:01:00
1 00:01:00
2 00:01:00
time:
0 00:01:00
1 00:01:00
2 00:01:00
timeCond:
0 0
1 1
2 2
timer:
0 0
1 0
2 0
timers:
0 0
1 1
2 2
triggertime:
1609887660:
localtime 1609887660
hash:
uiState:
uiTable:
Attributes:
alias Steuerung Counter
group Saugroboter
room Steuerung->Sonstiges
Bei dieser Definition macht checkall nicht viel Sinn.
Es handelt sich hier um drei Bedingungen, die sich gegenseitig ausschließen. Weil die gleiche Zeit in jeder Bedingung vorkommt, wird um 00:01 Uhr auch jede Bedingung geprüft, bis eine wahr ist, genauso wie bei checkall.
PS
Eine Erhöhung um eins würde ich eher als Einzeiler sehen:
DOIF {[00:01]; if ([?Saugroboter:counter] < 3) {fhem"setreading Saugroboter counter ".([?Saugroboter:counter]+1)}}
ohne weitere Attribute.