ElectricityCalculator und DbLog

Begonnen von Kai-Alfonso, 26 September 2019, 17:19:54

Vorheriges Thema - Nächstes Thema

Kai-Alfonso

Hallo,

ich habe mal eine Frage, was die Module und ElectricityCalculator und DbLog betrifft.

Vorher habe ich die Werte aus dem ElectricityCalculator mit DbLog in die DB geschrieben und die Graphen (Balkendiagramme) mir mit Grafana anzeigen lassen. In Grafana kann Timestamp Manipulation machen, so das ich den Wert  für den Monatsverbrauch, der einen Timestamp von    2019-09-01 00:00:01 hat, auf den Monat August "shiften" kann, damit im Diagramm der Balken auch richtigen Monat erscheint.

Jetzt baue ich grade mir eine Visu mit SmartVisu und nutze das dort enthaltene plot.period mit einem angepassten Fronthem https://forum.fhem.de/index.php/topic,86584.0.html, um den Graphen mit anzeigen zu lassen. Leider gibt es weder in Smartvisu noch im Converter eine Möglichkeit, manipulativ auf den Timestamp einzugreifen.

Eine Möglichkeit wäre, dass der Maintainer von ElectricityCalculator die Erstellung der Readings um Zeit x nach vorne setzt, wobei ich nicht weiß, ob es da vielleicht andere Probleme ergibt. Kann ich da mit DbLog/DbRep irgendwie in den Prozess beim schreiben in die DB eingreifen?

Wie könnte man das noch lösen? Bin um Tipps dankbar.

LG

Kai
Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

DS_Starter

Hallo Kai,

ja du kannst im DbLog mit dem Attribut valueFn oder im Device selbst  mit dem Attr DbLogValueFn in den Schreibprozess eingreifen und den Timestamp über die Variable $TIMESTAMP verändern.
Schau dir das mal an.

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

Kai-Alfonso

Zitat von: DS_Starter am 01 Oktober 2019, 00:42:38
Hallo Kai,

ja du kannst im DbLog mit dem Attribut valueFn oder im Device selbst  mit dem Attr DbLogValueFn in den Schreibprozess eingreifen und den Timestamp über die Variable $TIMESTAMP verändern.
Schau dir das mal an.

Grüße,
Heiko

Guten Morgen Heiko,

vielen Dank für den Tipp - hatte zwar nach sowas gesucht im commandref, aber irgendwie ist mir der Befehl durch die Lappen gegangen. 8)

Ich vermute, das das müsste in etwas so aussehen dann, wenn ich 10 Sekunden vom Timestamp abziehen will?

{
  if ($READING eq "Stromzaehler_total_consumption_EnergyCostDayLast")
  $NEWTIMESTAMP=time_str2num($TIMESTAMP) - 10
    $TIMESTAMP=$NEWTIMESTAMP;
}


Also Umrechnung von Fhem-Timestamp nach  Sekunden, davon dann 10 abziehen. Nur wie komm von Sekunden wieder auf den Fhem Timestamp.

Da werde ich auch mit https://wiki.fhem.de/wiki/Zeitangaben,_rechnen_mit  nicht schlauer.
Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

DS_Starter

#3
Moin Kai,

ZitatNur wie komm von Sekunden wieder auf den Fhem Timestamp.
So:

$NEWTIMESTAMP= FmtDateTime($NEWTIMESTAMP);

Steht im Wiki an anderer Stelle: https://wiki.fhem.de/wiki/DevelopmentModuleAPI#FmtDateTime

In Summe also so, Klammern waren nicht richtig:


{
  if ($READING eq "Stromzaehler_total_consumption_EnergyCostDayLast") {
    my $NEWTIMESTAMP=time_str2num($TIMESTAMP) - 10;
    $NEWTIMESTAMP= FmtDateTime($NEWTIMESTAMP);
    $TIMESTAMP=$NEWTIMESTAMP;
  }
}


Bisschen einkürzen geht noch mit:

    my $NEWTIMESTAMP= FmtDateTime(time_str2num($TIMESTAMP) - 10);


EDIT: my hat gefehlt.

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

Kai-Alfonso

Ja cool - vielen Dank Heiko. Werde ich gleich mal testen
Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

Kai-Alfonso

Moin Heiko  8)

so, hab es mal getestet, aber leider scheint es keinen Unterschied in der DB zu geben  ???

Eingetragen hatte ich im Device "myElectricityCalculator" das Attribut DbLogValueFn mit folgenden Inhalt

{
  if ($READING eq "Stromzaehler_total_consumption_EnergyCostDayLast") {
my $NEWTIMESTAMP= FmtDateTime(time_str2num($TIMESTAMP) - 10);
    $TIMESTAMP=$NEWTIMESTAMP;
  }


- es scheint aber keinen Unterscheid zum Vortag zu geben.

Vor der Änderung:

"2019-10-01 00:00:00" "myElectricityCalculator" "ELECTRICITYCALCULATOR" "Stromzaehler_total_consumption_EnergyDayLast: 10.673" "Stromzaehler_total_consumption_EnergyDayLast" "10.673" "kWh"


Nach der Änderung:

"2019-10-02 00:00:00" "myElectricityCalculator" "ELECTRICITYCALCULATOR" "Stromzaehler_total_consumption_EnergyDayLast: 8.153" "Stromzaehler_total_consumption_EnergyDayLast" "8.153" "kWh"


Ich hätte jetzt beim zweiten DB Eintrag einen Timestamp von 2019-10-01 23:59:50 erwartet
Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

DS_Starter

Moin Kai,

das Reading heißt ja auch Stromzaehler_total_consumption_EnergyDayLast. In deiner if-Bedingung
hast du Stromzaehler_total_consumption_EnergyCostDayLast angegeben ?

LG,
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

Kai-Alfonso

Zitat von: DS_Starter am 02 Oktober 2019, 08:05:41
Moin Kai,

das Reading heißt ja auch Stromzaehler_total_consumption_EnergyDayLast. In deiner if-Bedingung
hast du Stromzaehler_total_consumption_EnergyCostDayLast angegeben ?

LG,
Heiko

Ok, das ist jetzt aber peinlich - ich hab das nicht gesehen, obwohl ich es mir mehrmals angeschaut habe. Typisches Copy/Paste Phänomen :-)  Ja, dann macht das Sinn, das es nicht geklappt hat
Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

DS_Starter

Jo, sowas kenn ich zur Genüge. Starre stundenlang auf einen Code und finde nichts  ;D
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

Kai-Alfonso

Zitat von: DS_Starter am 02 Oktober 2019, 08:17:07
Jo, sowas kenn ich zur Genüge. Starre stundenlang auf einen Code und finde nichts  ;D

Ich mach bei sowas immer eine Pause - wenn ich bei einer Sache nicht weiterkomme, versuche ich 30 Minuten Abstand vom Problem zu nehmen, und dann noch mal frisch dran zu gehen. Hat mir schon oft Nerven und Zeit gespart - oder einfach nicht Müde wichtige Sachen machen. Es gibt einen Zeitpunkt, da baut man nur noch scheisse :-)
Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

Kai-Alfonso

Moin und nen schönen Feiertag  8)

Hatte den Fehler gestern berichtigt, trotzdem hat er am Timestamp nix geändert  :o :o



{
  if ($READING eq "Stromzaehler_total_consumption_EnergyDayLast") {
my $NEWTIMESTAMP= FmtDateTime(time_str2num($TIMESTAMP) - 10);
    $TIMESTAMP=$NEWTIMESTAMP;
  }



2019-10-03 00:00:00 myElectricityCalculator ELECTRICITYCALCULATOR Stromzaehler_total_consumption_EnergyDayLast: 12.609 Stromzaehler_total_consumption_EnergyDayLast 12.609 kWh
Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

DS_Starter

#11
Hallo Kai,

naja, ich habe einen Check im DbLog der die Rückgabe von $TIMESTAMP kontrolliert. Dieser Check war nicht gut.
Ich habe es ihn geändert und getestet.

Zieh dir die neue DbLog Version aus meinem contrib. Zum Download in der FHEMWEB Kommandozeile inklusive der Ausführungszeichen angeben:

"wget -qO ./FHEM/93_DbLog.pm https://svn.fhem.de/fhem/trunk/fhem/contrib/DS_Starter/93_DbLog.pm"

Btw ... In deinem Ausschitt fehlt unter wieder eine "}" oder ist nur nicht mit gepostet.

Dir auch einen schönen Feiertag,

LG,
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

Kai-Alfonso

Zitat von: DS_Starter am 03 Oktober 2019, 13:59:14

Btw ... In deinem Ausschitt fehlt unter wieder eine "}" oder ist nur nicht mit gepostet.

Dir auch einen schönen Feiertag,

LG,
Heiko

Hey,

Ich teste das mal und gebe dir morgen eine Rückmeldung. Die } war das, hatte sie nur vergessen zu kopieren  ;D
Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

Kai-Alfonso

#13
Guten Morgen,

wollte nur kurz Bescheid geben, das es jetzt geklappt hat. Vielen Dank noch mal dafür.

"2019-10-03 23:59:50" "myElectricityCalculator" "ELECTRICITYCALCULATOR" "Stromzaehler_total_consumption_EnergyDayLast: 12.646" "Stromzaehler_total_consumption_EnergyDayLast" "12.646" "kWh"


Vielleicht kannst Du mir bei einem SQL Befehl helfen, um die bisher vorhandenen Timestamp Einträge um 10 Sekunden zu verringern?

Mein Select zum testen ist

SELECT * from history where Device = 'myElectricityCalculator' and READING like '%EnergyDayLast' and Timestamp like '%2019-10-02%'

Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

DS_Starter

Morgen Kai,

na das sieht doch gut aus.  :)
Dann checke ich den jetzigen Stand von DbLog ein. Hat sich ja schon ein bisschen was verändert.

Dein Statement kann so aussehen:


UPDATE history SET TIMESTAMP=DATE_SUB(TIMESTAMP, INTERVAL 10 SECOND) where Device = 'myElectricityCalculator' AND READING LIKE '%EnergyDayLast' AND TIMESTAMP >= '2019-10-04 00:00:00' AND TIMESTAMP < '2019-10-05 00:00:00';


Aus Performance Sicht ist LIKE nicht so gut. Wenn du auch das Reading bestimmen kannst, benutze besser READING=''.
Wenn es nicht anders geht, dann eben tut es auch LIKE.

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