Um unnötige Schaltvorgänge zu vermeiden, beschäftige ich mich wieder neu mit den Aggregatsfunktionen und habe dafür das Beispiel aus dem Forum eingebunden. Dabei stellte ich fest, dass bei mir in derselben logischen Sekunde jede der Funktionen zwei Events mit unterschiedlichen Werten erzeugte. Beispiel:
2024-02-22 14:35:53 DOIF accu med3: 31.8125
2024-02-22 14:35:53 DOIF accu diff5: 1.25
2024-02-22 14:35:53 DOIF accu avg5: 31.275
2024-02-22 14:35:53 DOIF accu med: 32.0625
2024-02-22 14:35:53 DOIF accu diff3: 0.3125
2024-02-22 14:35:53 DOIF accu avg: 32.0625
2024-02-22 14:35:53 DOIF accu med5: 31.5
2024-02-22 14:35:53 DOIF accu diff: -0.5
2024-02-22 14:35:53 DOIF accu avg3: 31.875
2024-02-22 14:35:53 DOIF accu med3: 32.3125
2024-02-22 14:35:53 DOIF accu diff5: 2.5
2024-02-22 14:35:53 DOIF accu avg5: 31.7
2024-02-22 14:35:53 DOIF accu med: 32.25
2024-02-22 14:35:53 DOIF accu diff3: 0.375
2024-02-22 14:35:53 DOIF accu avg: 32.25
2024-02-22 14:35:53 DOIF accu med5: 31.8125
2024-02-22 14:35:53 DOIF accu diff: 0.875
2024-02-22 14:35:53 DOIF accu avg3: 32.2708333333333
2024-02-22 14:38:53 DOIF accu med3: 32.3125
2024-02-22 14:38:53 DOIF accu diff5: 2.5
2024-02-22 14:38:53 DOIF accu avg5: 31.7
2024-02-22 14:38:53 DOIF accu med: 32.25
2024-02-22 14:38:53 DOIF accu diff3: 0.375
2024-02-22 14:38:53 DOIF accu avg: 32.25
2024-02-22 14:38:53 DOIF accu med5: 31.8125
2024-02-22 14:38:53 DOIF accu diff: 0.875
2024-02-22 14:38:53 DOIF accu avg3: 32.2708333333333
2024-02-22 14:38:53 DOIF accu med3: 32.6875
2024-02-22 14:38:53 DOIF accu diff5: 1.8125
2024-02-22 14:38:53 DOIF accu avg5: 32.325
2024-02-22 14:38:53 DOIF accu med: 33
2024-02-22 14:38:53 DOIF accu diff3: 1.5
2024-02-22 14:38:53 DOIF accu avg: 33
2024-02-22 14:38:53 DOIF accu med5: 32.3125
2024-02-22 14:38:53 DOIF accu diff: 0.625
2024-02-22 14:38:53 DOIF accu avg3: 32.6041666666667
Mein Listing:
Internals:
.FhemMetaInternals 1
DEF ##
FUUID 65d72411-f33f-e1df-a056-e70a9358d9137c70
FVERSION 98_DOIF.pm:0.277400/2023-07-10
MODEL FHEM
NAME accu
NOTIFYDEV global,T_Kollektor
NR 320
NTFY_ORDER 50-accu
STATE ???
TYPE DOIF
VERSION 27740 2023-07-10 09:31:11
eventCount 333
.attraggr:
.attrminint:
Helper:
DBLOG:
avg:
logdb:
TIME 1708609230.75012
VALUE 33.15625
avg3:
logdb:
TIME 1708609230.78119
VALUE 33
avg5:
logdb:
TIME 1708609230.71903
VALUE 32.625
diff:
logdb:
TIME 1708609230.77081
VALUE -0.3125
diff3:
logdb:
TIME 1708609230.7398
VALUE 0.3125
diff5:
logdb:
TIME 1708609230.70872
VALUE 0.6875
med:
logdb:
TIME 1708609230.72948
VALUE 33.15625
med3:
logdb:
TIME 1708609230.69839
VALUE 33
med5:
logdb:
TIME 1708609230.76049
VALUE 32.6875
READINGS:
2024-02-22 14:40:30 avg 33.15625
2024-02-22 14:40:30 avg3 33
2024-02-22 14:40:30 avg5 32.625
2024-02-22 14:40:30 diff -0.3125
2024-02-22 14:40:30 diff3 0.3125
2024-02-22 14:40:30 diff5 0.6875
2024-02-22 14:40:30 med 33.15625
2024-02-22 14:40:30 med3 33
2024-02-22 14:40:30 med5 32.6875
Regex:
accu:
T_Kollektor:
accu:
temperature ^T_Kollektor$:^temperature:
bar:
barAvg:
collect:
event_Readings:
T_Kollektor:
avg:
temperature ^T_Kollektor$:^temperature:
avg3:
temperature ^T_Kollektor$:^temperature:
avg5:
temperature ^T_Kollektor$:^temperature:
diff:
temperature ^T_Kollektor$:^temperature:
diff3:
temperature ^T_Kollektor$:^temperature:
diff5:
temperature ^T_Kollektor$:^temperature:
med:
temperature ^T_Kollektor$:^temperature:
med3:
temperature ^T_Kollektor$:^temperature:
med5:
temperature ^T_Kollektor$:^temperature:
accu:
T_Kollektor temperature:
dim 5
value:
32.3125
31.8125
32.6875
33.3125
33
condition:
do:
0:
event_Readings:
avg ::ReadingValDoIf($hash,'T_Kollektor','temperature','','avg')
avg3 ::ReadingValDoIf($hash,'T_Kollektor','temperature','','avg3')
avg5 ::ReadingValDoIf($hash,'T_Kollektor','temperature','','avg5')
diff ::ReadingValDoIf($hash,'T_Kollektor','temperature','','diff')
diff3 ::ReadingValDoIf($hash,'T_Kollektor','temperature','','diff3')
diff5 ::ReadingValDoIf($hash,'T_Kollektor','temperature','','diff5')
med ::ReadingValDoIf($hash,'T_Kollektor','temperature','','med')
med3 ::ReadingValDoIf($hash,'T_Kollektor','temperature','','med3')
med5 ::ReadingValDoIf($hash,'T_Kollektor','temperature','','med5')
helper:
NOTIFYDEV global,T_Kollektor
event temperature: 33
globalinit 1
last_timer 0
sleeptimer -1
triggerDev T_Kollektor
triggerEvents:
temperature: 33
triggerEventsState:
temperature: 33
perlblock:
uiState:
uiTable:
Attributes:
DbLogInclude avg,avg3,avg5,med,med3,med5,diff,diff3,diff5
event_Readings avg:[T_Kollektor:temperature:avg],
avg3:[T_Kollektor:temperature:avg3],
avg5:[T_Kollektor:temperature:avg5],
med:[T_Kollektor:temperature:med],
med3:[T_Kollektor:temperature:med3],
med5:[T_Kollektor:temperature:med5],
diff:[T_Kollektor:temperature:diff],
diff3:[T_Kollektor:temperature:diff3],
diff5:[T_Kollektor:temperature:diff5]
room Solarwaerme
Das Verhalten beobachte ich auf zwei verschiedenen Systemen in unterschiedlichen Updateständen auch mit der Funktion INC. Die Beispiele stammen aus einem System, das DOIF-mäßig auf neusten Release-Stand ist. Was übersehe ich bzw. habe ich falsch gemacht?
Und noch eine Detailfrage: Hätte erwartet, dass die Events im Intervall des Quell-Device (interval=90 sec) kommen. Woher kommt denn nun der Takt 60 sec, in dem die DOIF-Events gefeuert werden. Wie könnte ich den reduzieren?
Christian
Merkwürdig. Normalerweise ist der Trigger das Reading selbst, warum alle 10 Sekunden der Trigger kommt, kann ich nicht sehen.
Kannst du mal das System durchstarten und noch mal testen? Dann wäre die Frage: Passiert das auch, wenn du nur ein Eventreading definierst?
Hier muss man wohl das Problem einkreisen, um es genau zu identifizieren.
Hey, Blitzreaktion, Damian! Neustart hatte ich sicherheitshalber gemacht und jetzt noch einmal wiederholt. Keine Änderung.
Das zweite System, das ich erwähnte, hat nur zwei Funktionen (DIFF und INC zum Vergleich) und da ist es auch doppelt.
Und mit einer einzigen Funktion ist das Ergebnis auch wie beschrieben:
Events (Filter: accu_d.*) FHEM log
2024-02-22 15:19:09 DOIF accu_d med3: 32.125
2024-02-22 15:19:09 DOIF accu_d med3: 32
2024-02-22 15:20:50 DOIF accu_d med3: 32
2024-02-22 15:20:50 DOIF accu_d med3: 31.875
Aufgefallen war mir das in einem Graphen, der trotz avg und med "zappelte" und da schaute ich mir den "processed input" an, der sich auch in der Datenbank bestätigte.
Ich konnte das Problem nachvollziehen. Ich werde es morgen beheben.
Neue Version wurde eingecheckt.
Treffer! Mit dem heutigen Update auf [28543 2024-02-22 23:10:54] kommen je Zyklus die Werte nur noch einmal, egal wie viele ich in einem DOIF gleichzeitig rechnen lassen.
Der update erfolgt im Interval des Quell-Devices, also auch das ist nun ok.
Vielen Dank!
Christian