Zitat von: Marko1976 am 01 August 2025, 20:23:44Zitat von: Damian am 01 August 2025, 12:56:39Für eine genauere Analyse poste mal das Event, welches nicht zur Berechnung des Eventreadings führt.
2025-08-01 20:16:13.160 DOIF Hausarbeit_counter checkall
2025-08-01 20:16:13.168 DOIF Aufgabe_Fiesta days: 0
2025-08-01 20:16:13.168 DOIF Aufgabe_Fiesta e_Aufgabe_Fiesta_days: 0
2025-08-01 20:16:13.168 DOIF Aufgabe_Fiesta counter: 1
2025-08-01 20:16:13.168 DOIF Aufgabe_Fiesta cmd_nr: 2
2025-08-01 20:16:13.168 DOIF Aufgabe_Fiesta cmd_seqnr: 1
2025-08-01 20:16:13.168 DOIF Aufgabe_Fiesta cmd: 2.1
2025-08-01 20:16:13.168 DOIF Aufgabe_Fiesta cmd_event: Aufgabe_Fiesta
2025-08-01 20:16:13.168 DOIF Aufgabe_Fiesta Alert
2025-08-01 20:16:13.168 DOIF Aufgabe_Fiesta cmd_nr: 2
2025-08-01 20:16:13.168 DOIF Aufgabe_Fiesta cmd_seqnr: 2
2025-08-01 20:16:13.168 DOIF Aufgabe_Fiesta cmd: 2.2
2025-08-01 20:16:13.168 DOIF Aufgabe_Fiesta cmd_event: Aufgabe_Fiesta
2025-08-01 20:16:13.168 DOIF Aufgabe_Fiesta Alert
2025-08-01 20:17:03.494 DOIF Hausarbeit_counter checkall
2025-08-01 20:17:03.494 DOIF Hausarbeit_counter Hausarbeiten: 4
2025-08-01 20:17:03.503 DOIF Hausarbeit_Kochfeld days: 0
2025-08-01 20:17:03.503 DOIF Hausarbeit_Kochfeld e_Hausarbeit_Kochfeld_days: 0
2025-08-01 20:17:03.503 DOIF Hausarbeit_Kochfeld counter: 1
2025-08-01 20:17:03.503 DOIF Hausarbeit_Kochfeld cmd_nr: 2
2025-08-01 20:17:03.503 DOIF Hausarbeit_Kochfeld cmd_seqnr: 1
2025-08-01 20:17:03.503 DOIF Hausarbeit_Kochfeld cmd: 2.1
2025-08-01 20:17:03.503 DOIF Hausarbeit_Kochfeld cmd_event: Hausarbeit_Kochfeld
2025-08-01 20:17:03.503 DOIF Hausarbeit_Kochfeld Alert
2025-08-01 20:17:03.503 DOIF Hausarbeit_Kochfeld cmd_nr: 2
2025-08-01 20:17:03.503 DOIF Hausarbeit_Kochfeld cmd_seqnr: 2
2025-08-01 20:17:03.503 DOIF Hausarbeit_Kochfeld cmd: 2.2
2025-08-01 20:17:03.503 DOIF Hausarbeit_Kochfeld cmd_event: Hausarbeit_Kochfeld
2025-08-01 20:17:03.503 DOIF Hausarbeit_Kochfeld Alert
List des Rechen-DOIF's:
Internals:
CFGFN
DEF (["^Hausarbeit.* Alert$"])
()
DOELSEIF (["^Aufgabe.* Alert$"])
()
FUUID 688686c7-f33f-7706-90e1-a1f79814bc4c2d1d
MODEL FHEM
NAME Hausarbeit_counter
NOTIFYDEV .*(^Hausarbeit.* Alert$).*,.*(^Aufgabe_.*).*,.*(^Hausarbeit_.*).*,global,.*(^Aufgabe.* Alert$).*
NR 75618
NTFY_ORDER 50-Aufgabencounter
STATE 4 / 0
TYPE DOIF
VERSION 29460 2024-12-29 20:25:48
eventCount 467
OLDREADINGS:
READINGS:
2025-08-01 20:13:44 Aufgaben 0
2025-08-01 20:17:03 Hausarbeiten 4
2025-08-01 20:06:40 cmd 0
2025-08-01 20:06:40 mode enabled
2025-08-01 20:06:40 state initialized
Regex:
accu:
bar:
barAvg:
collect:
cond:
:
0:
"^Hausarbeit.* Alert$" ^Hausarbeit.* Alert$
1:
"^Aufgabe.* Alert$" ^Aufgabe.* Alert$
event_Readings:
:
Aufgaben:
"^Aufgabe_.*" ^Aufgabe_.*
Hausarbeiten:
"^Hausarbeit_.*" ^Hausarbeit_.*
attr:
cmdState:
wait:
waitdel:
condition:
0 ::EventDoIf('^Hausarbeit.* Alert$',$hash,'',0)
1 ::EventDoIf('^Aufgabe.* Alert$',$hash,'',0)
do:
0:
0
1:
0
2:
event_Readings:
Aufgaben ::AggregateDoIf($hash,'#sum:a:','^Aufgabe_.*','counter')
Hausarbeiten ::AggregateDoIf($hash,'#sum:a:','^Hausarbeit_.*','counter')
helper:
NOTIFYDEV .*(^Hausarbeit.* Alert$).*,.*(^Aufgabe_.*).*,.*(^Hausarbeit_.*).*,global,.*(^Aufgabe.* Alert$).*
event checkall
globalinit 1
last_timer 0
sleeptimer -1
triggerDev Hausarbeit_counter
triggerEvents:
checkall
Hausarbeiten: 4
triggerEventsState:
checkall
Hausarbeiten: 4
uiState:
uiTable:
Attributes:
alias Zähler für Hausarbeiten
do always
event-on-change-reading .*
event_Readings Hausarbeiten:[#sum:a:"^Hausarbeit_.*":counter],
Aufgaben:[#sum:a:"^Aufgabe_.*":counter],
room Dummy
stateFormat Hausarbeiten / Aufgaben
timestamp-on-change-reading .*
verbose 5
Ich habe in dem DOIF in dem gerechnet wird noch die zweite Gruppe (Aufgabe) hinzugefügt und sowohl für die Hausarbeiten als auch die Aufgabe jeweils ein Event ausgelöst wie es auch von der automatik passieren würde. Interessanterweise funktoniert es bei den Hausarbeiten mit dem Checkall, bei den Aufgaben nicht mal das.
Habe auch noch mal ein aktualisiertes List des Rechen-DOIF's angehangen.
Vielleicht kann ja hier jemand was daraus herauslesen.
So wie ich das commandref zu den eventReadings verstehe, erfolgt die Berechnung automatisch sobald eines der überwachten Devices/Readings sich ändert, egal was im DEF steht oder ob das DOIF irgendwie getriggert wird.
Warum reagieren die anderen DOIF-Devices auf Checkall DOIF-Device Hausarbeit_counter? Hier gibt es offenbar Abhängigkeiten, die ich nicht kenne.
Ich habe Folgendes definiert:
defmod Aufgabe_Fiesta dummy
setstate Aufgabe_Fiesta 2025-08-01 21:25:59 counter 2
und
defmod aggregat DOIF (["^Aufgabe_.*"])
attr aggregat event-on-change-reading .*
attr aggregat event_Readings Hausarbeiten:[#sum:a:"^Hausarbeit_.*":counter],\
Aufgaben:[#sum:a:"^Aufgabe_.*":counter],
setstate aggregat cmd_2
setstate aggregat 2025-08-01 21:25:59 Aufgaben 2
setstate aggregat 2025-08-01 21:25:59 Device Aufgabe_Fiesta
setstate aggregat 2025-08-01 21:24:36 Hausarbeiten 0
setstate aggregat 2025-08-01 21:30:14 cmd 2
setstate aggregat 2025-08-01 21:30:14 cmd_event aggregat
setstate aggregat 2025-08-01 21:30:14 cmd_nr 2
setstate aggregat 2025-08-01 21:24:36 mode enabled
setstate aggregat 2025-08-01 21:30:14 state cmd_2
Ein "setreading Aufgabe_Fiesta counter 2" führt zum obigen Ergebnis. Es funktioniert bei mir, wie programmiert.
Übrigens .* kann man sich am Ende einer Regex-Angabe im DOIF sparen.
PS. Offtopic-Posts werden in diesem Thread von mir sofort gelöscht.
Zitat von: Damian am 01 August 2025, 21:43:00Offtopic-Posts werden in diesem Thread von mir sofort gelöscht.
Dafür wäre ich dankbar, das verhindert jede Menge Ärger. Die zwei verfolgen mich regelrecht und tauchen früher oder später in allen meinen Beiträgen auf.
Zitat von: Damian am 01 August 2025, 21:43:00defmod Aufgabe_Fiesta dummy
Da habe ich ehrlich gesagt ein Problem mit, da von der Definition als DOIF andere Sachen abhängen. Es wird ja z.B. abhängig vom Reading days der Fall und damit der STATE unterschieden. Mir ist nicht bekannt, dass etwas ähnliches mit einem Dummy funktionieren würde ohne wieder ein zusätzliches notify zu nutzen.
Was mich wundert ist der Punkt, dass mein Counter-Device, was ja per eventReading lediglich die Summe aller counter-Readings der Hausarbeiten/Aufgaben-Devices berechnen soll, diese Berechnung nicht durchführt bzw. nur ausführt wenn das DEF aktualisiert wird. Ein solches Verhalten habe ich ehrlich gesagt noch nie gesehen.
Ist es falsch, dass die Berechnung bei Änderung einer der einzelnen Quellen reagiert? Ich habe es immer so verstanden, dass wenn sich irgendein überwachtes Reading ändert, das eventReading automatisch neu berechnet wird.
Hier mal zur Vollständigkeit ein List eines der Auslöser-DOIF's (sind alle gleich, bis auf den Punkt, dass einige statt mit Hausarbeit_... mit Aufgabe_... benannt sind. Funktionsschema ist aber bei allen gleich):
Internals:
DEF ## Kein Alarm
([Aufgabe_Fiesta:days] > 0)
(setreading Aufgabe_Fiesta days [settings_hausarbeit:array_autocheck_marion]) (setreading Aufgabe_Fiesta counter 0)
## Alarm
DOELSEIF ([Aufgabe_Fiesta:days] eq 0)
(setreading Aufgabe_Fiesta counter 1) (set Hausarbeit_counter checkall)
## Überfällig
DOELSEIF ([Aufgabe_Fiesta:days] < [settings_hausarbeit:array_autocheck_marion_overdue])
(setreading Aufgabe_Fiesta counter 1)
FUUID 687b7cb5-f33f-7706-71d4-0827295c0b1526b5
FVERSION 98_DOIF.pm:0.294600/2024-12-29
MODEL FHEM
NAME Aufgabe_Fiesta
NOTIFYDEV global,settings_hausarbeit,Aufgabe_Fiesta
NR 569
NTFY_ORDER 50-Hausarbeit_Fiesta
STATE Alert
TYPE DOIF
VERSION 29460 2024-12-29 20:25:48
eventCount 38
READINGS:
2025-08-01 20:41:48 cmd 2.2
2025-08-01 20:41:48 cmd_event Aufgabe_Fiesta
2025-08-01 20:41:48 cmd_nr 2
2025-08-01 20:41:48 cmd_seqnr 2
2025-08-01 20:41:48 counter 1
2025-08-01 20:41:48 days 0
2025-08-01 20:41:48 e_Aufgabe_Fiesta_days 0
2025-08-01 19:47:31 mode enabled
2025-08-01 20:41:48 state Alert
Regex:
accu:
bar:
barAvg:
collect:
cond:
Aufgabe_Fiesta:
0:
days ^Aufgabe_Fiesta$:^days:
1:
days ^Aufgabe_Fiesta$:^days:
2:
days ^Aufgabe_Fiesta$:^days:
settings_hausarbeit:
2:
array_autocheck_marion_overdue ^settings_hausarbeit$:^array_autocheck_marion_overdue:
attr:
cmdState:
0:
None
1:
Alert
2:
Priority
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'Aufgabe_Fiesta','days') > 0
1 ::ReadingValDoIf($hash,'Aufgabe_Fiesta','days') eq 0
2 ::ReadingValDoIf($hash,'Aufgabe_Fiesta','days') < ::ReadingValDoIf($hash,'settings_hausarbeit','array_autocheck_marion_overdue')
do:
0:
0 setreading Aufgabe_Fiesta days [settings_hausarbeit:array_autocheck_marion]
1 setreading Aufgabe_Fiesta counter 0
1:
0 setreading Aufgabe_Fiesta counter 1
1 set Hausarbeit_counter checkall
2:
0 setreading Aufgabe_Fiesta counter 1
3:
helper:
NOTIFYDEV global,settings_hausarbeit,Aufgabe_Fiesta
event days: 0
globalinit 1
last_timer 0
sleeptimer -1
timerdev Aufgabe_Fiesta
timerevent days: 0
triggerDev Aufgabe_Fiesta
timerevents:
days: 0
e_Aufgabe_Fiesta_days: 0
counter: 1
cmd_nr: 2
cmd_seqnr: 1
cmd: 2.1
cmd_event: Aufgabe_Fiesta
Alert
cmd_nr: 2
cmd_seqnr: 2
cmd: 2.2
cmd_event: Aufgabe_Fiesta
Alert
timereventsState:
days: 0
e_Aufgabe_Fiesta_days: 0
counter: 1
cmd_nr: 2
cmd_seqnr: 1
cmd: 2.1
cmd_event: Aufgabe_Fiesta
Alert
cmd_nr: 2
cmd_seqnr: 2
cmd: 2.2
cmd_event: Aufgabe_Fiesta
Alert
triggerEvents:
days: 0
e_Aufgabe_Fiesta_days: 0
counter: 1
cmd_nr: 2
cmd_seqnr: 1
cmd: 2.1
cmd_event: Aufgabe_Fiesta
Alert
cmd_nr: 2
cmd_seqnr: 2
cmd: 2.2
cmd_event: Aufgabe_Fiesta
Alert
triggerEventsState:
days: 0
e_Aufgabe_Fiesta_days: 0
counter: 1
cmd_nr: 2
cmd_seqnr: 1
cmd: 2.1
cmd_event: Aufgabe_Fiesta
Alert
cmd_nr: 2
cmd_seqnr: 2
cmd: 2.2
cmd_event: Aufgabe_Fiesta
Alert
internals:
readings:
all Aufgabe_Fiesta:days settings_hausarbeit:array_autocheck_marion_overdue
trigger:
uiState:
uiTable:
Attributes:
alias Wartung Fiesta
cmdState None|Alert|Priority
group Aufgaben
room Steuerung->Hausarbeiten
verbose 0
Ich kann ehrlicherweise auch nie auseinanderhalten ob es sich um ein Fhem-DOIF handelt oder ein Perl-DOIF bzw. wann das Device dazwischen wechselt. Hatte schon häufiger Probleme das die Perl-Variante nicht funktionierte und es dann als neues Fhem-DOIF-Device lief. Gibt es da eine eindeutige Erkennbarkeit?
Ich gehe davon aus, dass du dir Schleifen/Rekursionen eingebaut hast. So etwas wird vom FHEM-System unterbunden bevor es zu einer Endlosschleife wird.
([Aufgabe_Fiesta:days] > 0)
(setreading Aufgabe_Fiesta days [settings_hausarbeit:array_autocheck_marion]) (setreading Aufgabe_Fiesta counter 0)
Hier reagierst du auf ein Reading "days", welches du selbst setzt - das kann nicht gutgehen. So etwas kann auch über mehrere DOIF passieren:
DOIF1 triggert DOIF2 triggert DOIF1
Das musst du verhindern. Ob man in einem dummy ein counter-Reading setzt oder in einem DOIF ist hier unerheblich. Wichtig ist nur, dass es immer nur in eine Richtung geht und keine Schleife entsteht, sprich dein Hausarbeit_counter-Device darf auf andere DOIF-Devices reagieren, diese dürfen aber nicht direkt oder indirekt auf Änderungen von Hausarbeit_counter-Device regieren.
In welchem DOIF-Modus sich ein DOIF-Device befindet siehst du am Internal Model, die Syntax ist unterschiedlich und in der Dokumentation genau beschrieben.
Du kannst dein Hausarbeit_counter-Device erst mal mit einem dummy-Device testen und dann Schritt für Schritt das Problem einkreisen. Dass es grundsätzlich funktioniert habe ich bei mir ja gezeigt.