Hallo,
ich speichere die Daten meiner Kaffeemaschine mit einem Homematic Powermeter und visualisiere das mit Grafana. Dieses Powermeter führt zu reichlich viel Einträgen in der Datenbank, die ich natürlich nicht dauerhaft halten möchte. Gerne würde ich einfach nur den Durchschnittsverbrauch behalten. Aber meiner Meinung nach funktioniert das nicht wie gewünscht. Hier das Ergebnis einer Woche ohne Durchschnittswerte:
https://ibb.co/vLVWpcp (https://ibb.co/vLVWpcp)
Danach hab ich folgendes ausgeführt:
Internals:
DATABASE fhem
DEF logdb
FUUID 5e063ece-f33f-b0f8-a4ab-35bd6299ab5429d9
FVERSION 93_DbRep.pm:v8.30.3-s20610/2019-11-28
LASTCMD reduceLogNbl average
MODEL Client
NAME DbRep_BuiltAvgTimeWeight
NOTIFYDEV global,DbRep_BuiltAvgTimeWeight
NR 945
NTFY_ORDER 50-DbRep_BuiltAvgTimeWeight
ROLE Client
STATE reduceLog of fhem finished
TYPE DbRep
UTF8 0
HELPER:
DBLOGDEVICE logdb
GRANTS USAGE,ALL PRIVILEGES
IDRETRIES 3
MINTS 2019-11-27 00:00:01
PACKAGE main
VERSION 8.30.3
CV:
aggregation no
aggsec 1
destr 2019-12-20
dsstr 2019-11-27
epoch_seconds_end 1576867420.69304
mestr 12
msstr 11
testr 19:43:40
tsstr 00:00:01
wdadd 432000
yestr 2019
ysstr 2019
DBREPCOL:
COLSET 1
DEVICE 64
EVENT 512
READING 64
TYPE 64
UNIT 32
VALUE 128
REDUCELOG:
DbRep_BuiltAvgTimeWeight
reduceLogNbl
average
Helper:
DBLOG:
reduceLogState:
logdb:
TIME 1577472222.20276
VALUE reduceLog finished. Rows processed: 402, deleted: 375, updated: 6
state:
logdb:
TIME 1577467598.17556
VALUE initialized
OLDREADINGS:
READINGS:
2019-12-27 19:43:42 background_processing_time 0.47
2019-12-27 19:43:42 reduceLogState reduceLog finished. Rows processed: 402, deleted: 375, updated: 6
2019-12-27 19:43:42 state reduceLog of fhem finished
Attributes:
DbLogExclude .*
DbLogInclude number_rows_deleted,reduceLogState
averageCalcForm avgTimeWeightMean
executeBeforeProc set logdb commitCache
optimizeTablesBeforeDump 1
reading power
room System->Logs
timeOlderThan d:7
Und das führt dann zu so einem Ergebnis:
https://ibb.co/hZrj58z (https://ibb.co/hZrj58z)
Meiner Meinung nach müssten die Striche immer einfach runter bis auf 0 gehen, dann wäre es ja auch ok. Kann man DbRep so beeinflussen, dass nur Werte > 0 W beachtet werden? Am Besten wäre es noch, wenn der erste und der letzte 0W-Wert in der DB bleiben würde, die dazwischen können gelöscht werden. Somit würde grafana ja die Durchschnittswerte richtig berechnen.
Hallo persching,
ich denke reduceLog ist für dein Ziel nicht das richtige Mittel. Es heißt übrigens nur reduceLog , nicht reduceLogNbl obwohl es nicht zum Fehler führt.
Wenn du nur einen Anfangs- und Endwert behalten willst, kannst du das Kommando delSeqDoublets verwenden. Wenn du das Attribut seqDoubletsVariance hinreichend hoch einstellst, bleibt jeweils nur der erste und letzte Werte der zu berücksichtigenden Periode (aggregation = day,week,...) in der DB.
Alternativ könntest du dir auch mit averageValue writeToDB einen Durchschnittswert für die relevante Periode berechnen und in die DB zurückschreiben. Da dieser berechnete Wert mit einem anderen Readingnamen in der DB gespeichert wird, kannst du mit einem anderen DbRep-Device danach deine ganzen Ausgangswerte aus der DB löschen. Das neue Reading nimmst du dann als Grundlage zur Anzeige.
Lies dir mal die Comref zu beiden Befehlen durch. Denke es ist das was zu nutzen könntest.
Grüße,
Heiko
Hallo Heiko,
danke für die Info. Ich werde mir dann wohl mal das mit dem averageValue writeToDB ansehen und versuchen das zu implementieren. :)