Umgang mit DbRep und dem Attribut "reading"

Begonnen von h002, 13 November 2019, 21:44:51

Vorheriges Thema - Nächstes Thema

h002

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

DS_Starter

#1
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
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

h002

Gut, dann verstehe ich es und lege für die verschiedenen Aggregationen eigenen Devices an. Vielen Dank!