Hallo zusammen,
ich habe ein Problem in der Anwendung der DOIF Readings. Ich möchte eine Durchschnittslwert bilden um dadurch eine Trend zu erkennen. Hier mein List:
Internals:
DEF ([$SELF.COL:value])
(
set $SELF Koeln [$SELF.COL:value] ) DOELSEIF
([$SELF.DUS:value])
(
set $SELF Dus [$SELF.DUS:value] ,setreading $SELF HW1 710
)
FUUID 60a0f927-f33f-e93f-2bfb-eac8e024582e29f5
MODEL FHEM
NAME Rheinpegel
NOTIFYDEV Rheinpegel.COL,Rheinpegel.DUS,global,Rheinpegel
NR 239
NTFY_ORDER 50-Rheinpegel
STATE cmd_1
TYPE DOIF
VERSION 26444 2022-09-25 16:29:19
eventCount 558
DOIF_Readings:
TrendCol ::ReadingValDoIf($hash,'Rheinpegel','Koeln','','avg5')
TrendDus ::ReadingValDoIf($hash,'Rheinpegel','Dus','','avg5')
READINGS:
2022-11-22 08:56:37 Device Rheinpegel.COL
2022-11-22 08:56:37 Dus 295
2022-11-22 08:56:37 HW1 710
2022-11-22 08:56:37 Koeln 343
2022-11-22 03:28:36 TrendCol 342
2022-11-22 03:28:36 TrendDus 290
2022-11-22 08:56:37 cmd 1
2022-11-22 08:56:37 cmd_event Rheinpegel.COL
2022-11-22 08:56:37 cmd_nr 1
2022-11-22 08:56:37 e_Rheinpegel.COL_value 343
2022-11-22 08:56:37 e_Rheinpegel.DUS_value 295
2022-01-06 11:11:56 mode enabled
2022-11-22 08:56:37 state cmd_1
Regex:
DOIF_Readings:
Rheinpegel:
TrendCol:
Koeln ^Rheinpegel$:^Koeln:
TrendDus:
Dus ^Rheinpegel$:^Dus:
accu:
Rheinpegel:
accu:
Dus ^Rheinpegel$:^Dus:
Koeln ^Rheinpegel$:^Koeln:
collect:
cond:
Rheinpegel.COL:
0:
value ^Rheinpegel.COL$:^value:
Rheinpegel.DUS:
0:
1:
value ^Rheinpegel.DUS$:^value:
accu:
Rheinpegel Dus:
dim 9
value:
290
Rheinpegel Koeln:
dim 9
value:
342
attr:
cmdState:
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'Rheinpegel.COL','value')
1 ::ReadingValDoIf($hash,'Rheinpegel.DUS','value')
do:
0:
0 set Rheinpegel Koeln [Rheinpegel.COL:value]
1:
0 set Rheinpegel Dus [Rheinpegel.DUS:value] ,setreading Rheinpegel HW1 710
2:
helper:
NOTIFYDEV Rheinpegel.COL,Rheinpegel.DUS,global,Rheinpegel
event value: 343
globalinit 1
last_timer 0
sleeptimer -1
timerdev Rheinpegel.COL
timerevent value: 343
triggerDev Rheinpegel.COL
DOIF_eventa:
cmd_nr: 1
cmd: 1
cmd_event: Rheinpegel.COL
cmd_1
DOIF_eventas:
cmd_nr: 1
cmd: 1
cmd_event: Rheinpegel.COL
state: cmd_1
timerevents:
value: 343
timereventsState:
value: 343
triggerEvents:
value: 343
triggerEventsState:
value: 343
internals:
perlblock:
readings:
all Rheinpegel.COL:value Rheinpegel.DUS:value
trigger:
uiState:
uiTable:
Attributes:
DOIF_Readings TrendDus:[Rheinpegel:Dus:avg5],TrendCol:[Rheinpegel:Koeln:avg5]
do always
event-on-update-reading Dus,HW1,Koeln
readingList Koeln Dus
userReadings HW1
und ein Auszug des Logs in dem Zeitraum:
2022-11-22_03:56:37 Rheinpegel Dus: 292
2022-11-22_03:56:37 Rheinpegel HW1: 710
2022-11-22_03:56:37 Rheinpegel Koeln: 343
2022-11-22_04:56:37 Rheinpegel Dus: 293
2022-11-22_04:56:37 Rheinpegel HW1: 710
2022-11-22_05:56:37 Rheinpegel Koeln: 343
2022-11-22_06:56:37 Rheinpegel Dus: 294
2022-11-22_06:56:37 Rheinpegel HW1: 710
2022-11-22_08:56:37 Rheinpegel Dus: 295
2022-11-22_08:56:37 Rheinpegel HW1: 710
2022-11-22_08:56:37 Rheinpegel Koeln: 343
Erwartet hätte ich einen Durchschnitt von 293.5. Was mache ich falsch?
Gruß
Roman
Hast du jeweils von allen 5 letzten Werten (avg5) den Durchschnitt berechnet? Ich sehe im Auszug jeweils nur 3.
Sind bisher nur 4. Meinst Du es liegt an der Anzahl und meiner Ungeduld?
Auch mit 6 Werten ergibt sich keine Änderung?!
2022-11-22_03:56:37 Rheinpegel Dus: 292
2022-11-22_03:56:37 Rheinpegel HW1: 710
2022-11-22_03:56:37 Rheinpegel Koeln: 343
2022-11-22_04:56:37 Rheinpegel Dus: 293
2022-11-22_04:56:37 Rheinpegel HW1: 710
2022-11-22_05:56:37 Rheinpegel Koeln: 343
2022-11-22_06:56:37 Rheinpegel Dus: 294
2022-11-22_06:56:37 Rheinpegel HW1: 710
2022-11-22_08:56:37 Rheinpegel Dus: 295
2022-11-22_08:56:37 Rheinpegel HW1: 710
2022-11-22_08:56:37 Rheinpegel Koeln: 343
2022-11-22_09:56:37 Rheinpegel Dus: 296
2022-11-22_09:56:37 Rheinpegel HW1: 710
2022-11-22_11:56:37 Rheinpegel Dus: 297
2022-11-22_11:56:37 Rheinpegel HW1: 710
2022-11-22_11:56:37 Rheinpegel Koeln: 343
Deine geposteten Ausgaben insb.
2022-11-22 03:28:36 TrendDus 290
ist von 03:28 Uhr, dafür sind die letzten 5 Werte davor, die per Event im DOIF ankamen von Bedeutung.
Sorry, das ist der Timestamp der Anlage des DOIF_Readings.
Irgendetwas stimmt mit deiner Definition nicht. Dort steht nur ein Wert drin mit 290 und die Anzahl der Werte statt 5 9.
Hier ein Auszug meiner Testdefinition.
Internals:
CFGFN
DEF ##
FUUID 637d0fea-f33f-c0d4-e7bf-c2abb086fccabcbf
MODEL FHEM
NAME di_avg
NOTIFYDEV global,bla
NR 2034
NTFY_ORDER 50-di_avg
STATE initialized
TYPE DOIF
VERSION 26655 2022-11-05 18:33:59
CHANGED:
avg: 28
CHANGEDWITHSTATE:
avg: 28
DOIF_Readings:
avg ::ReadingValDoIf($hash,'bla','state','','avg4')
READINGS:
2022-11-22 19:12:31 avg 28
2022-11-22 19:11:58 cmd 0
2022-11-22 19:11:58 mode enabled
2022-11-22 19:11:58 state initialized
Regex:
DOIF_Readings:
bla:
avg:
state ^bla$:^state:
accu:
bla:
accu:
state ^bla$:^state:
collect:
accu:
bla state:
dim 4
value:
32
24
condition:
do:
0:
helper:
NOTIFYDEV global,bla
event 24
globalinit 1
last_timer 0
sleeptimer -1
triggerDev bla
triggerEvents:
24
triggerEventsState:
state: 24
uiState:
uiTable:
Attributes:
DOIF_Readings avg:[bla:state:avg4]
hier:
Zitataccu:
bla state:
dim 4
value:
32
24
unter accu sieht man die Dimension von avg und darunter die gesammelten Werte, bei mir sind es zwei 32, 24, daher steht im DOIF_Reading korrekterweise 28.
Bin jetzt außer Haus. Prüfe morgen mal die Definition. Nimmt wohl nur den ersten Wert. Weiß jetzt wonach ich suchen muss. Danke