Ich möchte für meine Heizungsanlage die Jahresarbeitszahl (JAZ) ermitteln. Diese möchte ich für jeden Tag und Monat berechnen. Die Daten für Wärmemenge und Stromverbrauch sind in FHEM bereits integriert. Sobald sich die Werte verändern, erfolgt über DbLog die Hinterlegung in einer SQLITE-DB.
Mit DbRep möchte ich nun eine Auswertung erstellen, die mir den Stromverbrauch, Wärmemenge und die JAZ abbilden.
Ich verstehe DbRep scheinbar noch nicht richtig. Sicherlich muss ich je ein DbRep-Device für die Tages- bzw. Monatsaggregation erstellen. Wie ist das nun aber mit den Readings?
Aus dem folgenden Device beziehe ich meine Quelldaten
Internals:
DEF 3
EXCEPT_FD 13
FUUID 5dcc19bf-f33f-8b20-6459-05622a4fb601fda2
GPIO_Basedir /sys/class/gpio
GPIO_Nr 3
NAME GPIO3
NR 253
STATE off
TYPE RPI_GPIO
WiringPi_gpio /usr/bin/gpio
lasttrg 1573677299.63618
Helper:
DBLOG:
Counter:
dbLogStromzaehler:
TIME 1573677299.65502
VALUE 3972
READINGS:
2019-11-13 21:34:59 Counter 3972
2019-11-13 21:03:40 Dblclick on
2019-11-13 21:34:59 Pinlevel low
2019-11-13 21:34:59 actualEnergyUnitValue 5033.172
2019-11-13 21:34:59 actualFullThermicEnergy 20010
2019-11-13 20:42:16 initialEnergyUnitValue 5029.20
2019-11-13 21:34:59 state off
fhem:
interfaces switch
Attributes:
active_low no
alias DimplexEngeryCalculator
direction input
event-on-change-reading .*
event-on-update-reading .*
interrupt falling
room Dimplex
userReadings actualEnergyUnitValue { ReadingsVal("GPIO3","initialEnergyUnitValue",0) + (ReadingsVal("GPIO3","Counter",0)/1000) },
actualFullThermicEnergy {(ReadingsVal("dim_WaermemengeHeizen01", "state","") + (ReadingsVal("dim_WaermemengeHeizen02", "state","") * 10000) + (ReadingsVal("dim_WaermemengeHeizen03", "state","") * 100000)) + (ReadingsVal("dim_WaermemengeWarmwasser01", "state","") + (ReadingsVal("dim_WaermemengeWarmwasser02", "state","") * 10000) + (ReadingsVal("dim_WaermemengeWarmwasser03", "state","") * 100000))}
Wenn ich nun ein DbRep erstellen, welches die Differenzen im Monat/Tag für Stromverbrauch und Wärmemenge ermittelt. Anbei der Auszug für den Monatsteil.
Internals:
CFGFN
DATABASE /opt/fhem/fhem.db
DEF dbLogStromzaehler
FUUID 5dcc272e-f33f-8b20-cc5f-40db2abbf8398c53
FVERSION 93_DbRep.pm:v8.28.2-s20379/2019-10-18
LASTCMD diffValue display
MODEL Client
NAME dbReportDimplexDaily
NOTIFYDEV global,dbReportStromzaehler
NR 354
NTFY_ORDER 50-dbReportStromzaehler
ROLE Client
STATE done
TYPE DbRep
UTF8 0
HELPER:
DBLOGDEVICE dbLogStromzaehler
IDRETRIES 3
MINTS 2019-09-05 22:08:57
PACKAGE main
VERSION 8.28.2
CV:
aggregation month
aggsec 2678400
destr 2019-11-30
dsstr 2019-11-01
epoch_seconds_end 1575154799
mestr 11
msstr 11
testr 23:59:59
tsstr 00:00:00
wdadd 259200
yestr 2019
ysstr 2019
DBREPCOL:
COLSET 1
DEVICE 64
EVENT 512
READING 64
TYPE 64
UNIT 32
VALUE 128
OLDREADINGS:
READINGS:
2019-11-13 21:37:24 2019-11-13_21-36-33__GPIO3__Counter/actualFullThermicEnergy/actualEnergyUnitValue__DIFF__2019-11 3925.0000
2019-11-13 21:37:24 state done
Attributes:
aggregation month
device GPIO3
reading Counter,actualFullThermicEnergy,actualEnergyUnitValue
timestamp_begin current_month_begin
timestamp_end current_month_end
Was hat es mit dem Attribut "reading" bei DbRep auf sich? Wenn ich dort mehrere Readings des Devices GPIO3 hinterlege, hätte ich erwartet, dass für jedes Reading ein Eintrag mit den Differenzen in der Datenbank hinterlegt wird. Dem ist offenbar nicht so. Muss ich für jeden Fall ein eigenes DbRep wie folgt definieren?
Monat
DbRep Stromverbrauch Differenz monatlich
DbRep Wärmemenge Differenz monatlich
Tag
DbRep Stromverbrauch Differenz täglich
DbRep Wärmemenge Differenz täglich
Aus den ermittelten Werten möchte in dann die JAZ ermitteln wie z.B. Wärmemenge Tag : Stromverbrauch Tag = JAZ oder Wärmemenge Monat : Stromverbrauch Monat = JAZ
Ich hoffe ich konnte mein Problem deutlich beschreiben und mir kann geholfen werden. ;-) Danke
Hallo und guten Abend,
hast du verständlich dargelegt. :)
Zitat
Was hat es mit dem Attribut "reading" bei DbRep auf sich? Wenn ich dort mehrere Readings des Devices GPIO3 hinterlege, hätte ich erwartet, dass für jedes Reading ein Eintrag mit den Differenzen in der Datenbank hinterlegt wird. Dem ist offenbar nicht so. Muss ich für jeden Fall ein eigenes DbRep wie folgt definieren?
Du hast den Sachverhalt korrekt erfasst, d.h. extra Devices definieren.
Der Zusammenhang ist relativ einfach. Wenn man meherere Readings angeibt, werden die erstellten Selects aus der DB diese Readings berücksichtigen. Das macht zum Beispiel Sinn wenn man mit fetchrows nur bestimmte Readings anschauen will oder mit den Exportfunktionen nur diese Readings exportieren möchte etc.
Aber für ein Diff ist es nicht sinnvoll, da alle angegebenen Readings zusammengefasst berücksichtigt würden.
In diesem Fall also einzelne Devices erstellen, entsprechend einstellen und laufen lassen.
Im Wiki hatte ich mal ein recht umfangreiches Projekt beschrieben um PV Bilanzen zu erstellen. Kann m.M. nach als Erklärung der Arbeitsweise nützlich sein. (https://wiki.fhem.de/wiki/Datenbankgest%C3%BCtzte_Erstellung_der_Energiebilanz_einer_SMA_PV-Anlage_mit_%C3%9Cberschusseinspeisung)
Grüße,
Heiko
Gut, dann verstehe ich es und lege für die verschiedenen Aggregationen eigenen Devices an. Vielen Dank!