ElectricityCalculator und DbLog

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

Vorheriges Thema - Nächstes Thema

Kai-Alfonso

Zitat von: DS_Starter am 04 Oktober 2019, 09:10:42
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

Vielen dank - hat geklappt - jetzt stimmt auch der Timestamp der historischen Daten. Ging auch mit =, da war es tatsächlich erheblich schneller

Vielen Dank
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

mir fällt grad auf beim commandref eintrag zu DbLogValueFn Beispiel. Dort fehlt wohl ein "}"


Example
attr SMA_Energymeter DbLogValueFn
{
  if ($READING eq "Bezug_WirkP_Kosten_Diff"){
    $UNIT="Diff-W";
  }
  if ($READING =~ /Einspeisung_Wirkleistung_Zaehler/ && $VALUE < 2){
    $IGNORE=1;
}
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

Jepp, hast du recht. Danke, ändere ich gleich mit.
:D
ESXi@NUC+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

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,

ich hatte valueFn noch mal um ein Reading erweitert, aber leider ist es beim Schreiben wieder nicht gelaufen. Ist da irgendwo ein Fehler drin? Klammern müssten doch richtig sein, oder?

{
  if ($READING eq "Stromzaehler_total_consumption_EnergyDayLast") {
my $NEWTIMESTAMP= FmtDateTime(time_str2num($TIMESTAMP) - 10);
    $TIMESTAMP=$NEWTIMESTAMP;
  }
  if ($READING eq "Stromzaehler_total_consumption_EnergyMonthLast") {
my $NEWTIMESTAMP= FmtDateTime(time_str2num($TIMESTAMP) - 10);
    $TIMESTAMP=$NEWTIMESTAMP;
  }
}
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,

da gibt es ein paar Fragen ...

1. was ging nicht ? Timestamp eines der beiden Readings oder beide nicht verändert ?
2. DbLogValueFn oder valueFn ?
3. gibts es Fehler im Log ? wenn mit dem Timestamp etwas nicht stimmt wird nun mit verbose 2 ausgeschrieben:
    ... TIMESTAMP got from DbLogValueFn in <device> is invalid: <TIMESTAMP>
4. sicher dass es nicht funktioniert hat ?  ;)

Die Klammern sind richtig, ja. Wobei man dann "my $NEWTIMESTAMP;" nur einmal vor em ersten if initialisiert. Aber das ist nur eine Schönheitssache, hat nichts mit dem Prob zu tun.
Probiere es doch mal mit Readings die öfter kommen. Sonst muss man immer einen Tag warten.
ESXi@NUC+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

Hey


Zitat von: DS_Starter am 05 Oktober 2019, 10:08:51
Moin Kai,

da gibt es ein paar Fragen ...

1. was ging nicht ? Timestamp eines der beiden Readings oder beide nicht verändert ?
2. DbLogValueFn oder valueFn ?
3. gibts es Fehler im Log ? wenn mit dem Timestamp etwas nicht stimmt wird nun mit verbose 2 ausgeschrieben:
    ... TIMESTAMP got from DbLogValueFn in <device> is invalid: <TIMESTAMP>
4. sicher dass es nicht funktioniert hat ?  ;)

Die Klammern sind richtig, ja. Wobei man dann "my $NEWTIMESTAMP;" nur einmal vor em ersten if initialisiert. Aber das ist nur eine Schönheitssache, hat nichts mit dem Prob zu tun.
Probiere es doch mal mit Readings die öfter kommen. Sonst muss man immer einen Tag warten.

1. Stromzaehler_total_consumption_EnergyDayLast ging nicht - tags zuvor ging es noch - hatte nur das zweite if eingefügt - das Readings dazu wird nur einmal im Monat aktualisiert.
2. DbLogValueFn beim Device
3. Verbose 2 bei welchem Device? Im DbLog Device ist Verbose 2, es wurde aber beim Update des Readings nichts geloggt
4. das Select sagte jedenfalls

2019-10-05 00:00:00 myElectricityCalculator ELECTRICITYCALCULATOR Stromzaehler_total_consumption_EnergyDayLast: 10.674 Stromzaehler_total_consumption_EnergyDayLast 10.674 kWh

bin mir fast sicher, das es nicht gelaufen ist  :o
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

verbose 2 im dblog device.
passt also wenn ich es richtig sehe. heisst aber auch es wurde kein Fehler bei der timestamp veränderung festgestellt.
hmm ...
ESXi@NUC+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

DS_Starter

Moin Kai,

ich habe jetzt mal die Zeit gefunden dein Szenario bei mir nachzustellen.
Dazu habe ich DbLogValueFn im Device SMA_Energymeter ganz bewußt auf die gleiche Weise wie du gesetzt:


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

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


Im cache von DbLog sieht man die beiden veränderten Timestamps von L1_Spannung, L2_Spannung gegenüber den anderen.

Zitat
50932 => 2019-10-06 07:42:57|SMA_Energymeter|SMAEM|Einspeisung_WirkP_Verguet_Diff: 0.0000|Einspeisung_WirkP_Verguet_Diff|0.0000|
50933 => 2019-10-06 07:42:57|SMA_Energymeter|SMAEM|state: -212.2|state|-212.2|
50934 => 2019-10-06 07:42:57|SMA_Energymeter|SMAEM|Saldo_Wirkleistung: -212.2|Saldo_Wirkleistung|-212.2|W
50935 => 2019-10-06 07:42:57|SMA_Energymeter|SMAEM|Bezug_Wirkleistung_Zaehler: 9261.7989|Bezug_Wirkleistung_Zaehler|9261.7989|kWh
50936 => 2019-10-06 07:42:57|SMA_Energymeter|SMAEM|Einspeisung_Wirkleistung: 0.0|Einspeisung_Wirkleistung|0.0|W
50937 => 2019-10-06 07:42:57|SMA_Energymeter|SMAEM|Einspeisung_Wirkleistung_Zaehler: 14677.5471|Einspeisung_Wirkleistung_Zaehler|14677.5471|kWh
50938 => 2019-10-06 07:42:47|SMA_Energymeter|SMAEM|L1_Spannung: 233.9|L1_Spannung|233.9|V
50939 => 2019-10-06 07:42:47|SMA_Energymeter|SMAEM|L2_Spannung: 234.0|L2_Spannung|234.0|V
50940 => 2019-10-06 07:42:57|SMA_Energymeter|SMAEM|L3_Spannung: 235.2|L3_Spannung|235.2|V

Ich wüßte nicht warum das bei dir nicht funktionionieren sollte. Die Ursache verbirgt sich dann wahrscheinlich irgendwo anders.

Nebenbei, man kann die Funktion auch so schreiben:


{
  if ($READING =~ /^L1_Spannung$|^L2_Spannung$/) {
    my $NEWTIMESTAMP= FmtDateTime(time_str2num($TIMESTAMP) - 10);
    $TIMESTAMP=$NEWTIMESTAMP;
  }
}


LG,
Heiko
ESXi@NUC+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 06 Oktober 2019, 07:58:12



Im cache von DbLog sieht man die beiden veränderten Timestamps von L1_Spannung, L2_Spannung gegenüber den anderen.

Ich wüßte nicht warum das bei dir nicht funktionionieren sollte. Die Ursache verbirgt sich dann wahrscheinlich irgendwo anders.

Deine Vermutung ist richtig - es hatte ja mal funktioniert und ich habe ein Rollback auf die funktionierende Version gemacht. Was soll ich sagen, geht auch nicht mehr - im fhemlog sind auch keine Einträge um die Uhrzeit, DB Eintrag wird aber unverändert geschrieben. Hmmm

Zitat von: DS_Starter am 06 Oktober 2019, 07:58:12
Nebenbei, man kann die Funktion auch so schreiben:


{
  if ($READING =~ /^L1_Spannung$|^L2_Spannung$/) {
    my $NEWTIMESTAMP= FmtDateTime(time_str2num($TIMESTAMP) - 10);
    $TIMESTAMP=$NEWTIMESTAMP;
  }
}


LG,
Heiko

Ah cool - ein or geht also auch . mal testen. Hatte ich noch gar nicht  dran gedacht
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

Nur zur Info, falls es wen noch interessiert.

Ich hab das jetzt so gelöst und funktioniert wie erwartet:


{
if ($READING  =~ /.*_EnergyDayLast$|.*_EnergyMonthLast$/) {
my $NEWTIMESTAMP= FmtDateTime(time_str2num($TIMESTAMP) - 10);   
$TIMESTAMP=$NEWTIMESTAMP;
  }
}
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)