Autor Thema: Modul 93_DbRep - Reporting und Management von Datenbankinhalten (DbLog)  (Gelesen 223224 mal)

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7809
Ich werde gleich noch die neue Version V3.4 in den Anfangsbeitrag einhängen. Es ist die Funktion "insert" zum manuellen Input von DB-Einträgen hinzugekommen. Wie es zu benutzen ist ergänze ich auch im Eingangsbeitrag.

Kannst du ja morgen mit dieser Version noch einmal testen.

Grüße und gute Nacht
Heiko
« Letzte Änderung: 04 August 2016, 01:14:38 von DS_Starter »
ESXi 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf VM
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7809
Hallo zusammen, hallo Frickler,

um die Gefahr der Verwendung nicht numerischer Werte  in den DbRep-Funktionen mit mathematischen Berechnungen zu umgehen, habe ich in der Version 3.4.1 (im ersten Beitrag) einen Check eingebaut.
Sollte ein solcher Wert entdeckt werden, geht die Funktion auf "error" und im Log (verbose 2) wird der Überltäter ausgeschrieben:

DbRep test - ERROR - found value = 'Total:' isn't numeric in diffval function. Leaving ...
Bitte teste die Version mit deinem Problemfall. Ich vermute nach wie vor dass der Input und Auswertung von nichtnumerischen Werten mit diffValue / maxValue das eigentliche Problem darstellt.

Grüße
Heiko
ESXi 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf VM
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline DerFrickler

  • Sr. Member
  • ****
  • Beiträge: 587
Hallo,

ich werde gleich mal einen DbRep aktivieren.

Gruß!

Offline DerFrickler

  • Sr. Member
  • ****
  • Beiträge: 587
das "-" Problem wird wie erwartet durch die readingsGroup und den darin enthaltenen Berechnungen ausgelöst:

2016.08.04 19:52:29 1: PERL WARNING: Argument "-" isn't numeric in subroutine entry at (eval 769) line 1.
2016.08.04 19:52:29 3: stacktrace:
2016.08.04 19:52:29 3:     main::__ANON__                      called by (eval 769) (1)
2016.08.04 19:52:29 3:     (eval)                              called by ./FHEM/33_readingsGroup.pm (498)
2016.08.04 19:52:29 3:     readingsGroup::rgCalc               called by ./FHEM/33_readingsGroup.pm (513)
2016.08.04 19:52:29 3:     main::readingsGroup_value2html      called by ./FHEM/33_readingsGroup.pm (998)
2016.08.04 19:52:29 3:     main::readingsGroup_2html           called by ./FHEM/33_readingsGroup.pm (1087)
2016.08.04 19:52:29 3:     main::readingsGroup_detailFn        called by ./FHEM/01_FHEMWEB.pm (2811)
2016.08.04 19:52:29 3:     main::FW_devState                   called by ./FHEM/01_FHEMWEB.pm (1519)
2016.08.04 19:52:29 3:     main::FW_makeDeviceLine             called by ./FHEM/01_FHEMWEB.pm (1627)
2016.08.04 19:52:29 3:     main::FW_showRoom                   called by ./FHEM/01_FHEMWEB.pm (909)
2016.08.04 19:52:29 3:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (454)
2016.08.04 19:52:29 3:     main::FW_Read                       called by fhem.pl (3199)
2016.08.04 19:52:29 3:     main::CallFn                        called by fhem.pl (667)

durch z.B.

DbRep.elektrische.Energie.FBDECT_fritz.box.*:.*-01,.*-02,.*-03,.*-04,.*-05,.*-06,.*-07,.*-08,.*-09,.*-10,.*-11,.*-12,$sum($ROW:1..$COLUMN-1),<100%>

im Zusammenhang mit

valueFormat { ($VALUE ne "-") ? "%.2f" : "-" }\

Offline DerFrickler

  • Sr. Member
  • ****
  • Beiträge: 587
und jetzt das eval:

2016.08.04 20:00:40 3: eval: {diffval_ParseDone('DbRep.elektrische.Energie.FBDECT_fritz.box.AHA.Wohnzimmer_17|TWpB<gekürzt>0wMQo=|FBDECT_fritz.box.AHA.Wohnzimmer_17|energy|0.027858|0')}
2016.08.04 20:00:40 3: stacktrace:
2016.08.04 20:00:40 3:     main::__ANON__                      called by (eval 4058) (1)
2016.08.04 20:00:40 3:     (eval)                              called by ./FHEM/33_readingsGroup.pm (498)
2016.08.04 20:00:40 3:     readingsGroup::rgCalc               called by ./FHEM/33_readingsGroup.pm (513)
2016.08.04 20:00:40 3:     main::readingsGroup_value2html      called by ./FHEM/33_readingsGroup.pm (1373)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1395)
2016.08.04 20:00:40 3:     main::readingsGroup_Notify          called by fhem.pl (3199)
2016.08.04 20:00:40 3:     main::CallFn                        called by fhem.pl (3121)
2016.08.04 20:00:40 3:     main::DoTrigger                     called by fhem.pl (4012)
2016.08.04 20:00:40 3:     main::readingsEndUpdate             called by ./FHEM/93_DbRep.pm (1265)
2016.08.04 20:00:40 3:     main::diffval_ParseDone             called by (eval 2210) (1)
2016.08.04 20:00:40 3:     (eval)                              called by fhem.pl (1002)
2016.08.04 20:00:40 3:     main::AnalyzePerlCommand            called by fhem.pl (1021)
2016.08.04 20:00:40 3:     main::AnalyzeCommand                called by fhem.pl (950)
2016.08.04 20:00:40 3:     main::AnalyzeCommandChain           called by ./FHEM/98_telnet.pm (275)
2016.08.04 20:00:40 3:     main::telnet_Read                   called by fhem.pl (3199)
2016.08.04 20:00:40 3:     main::CallFn                        called by fhem.pl (667)
2016.08.04 20:00:40 1: PERL WARNING: Argument "-" isn't numeric in subroutine entry at (eval 4058) line 1.
2016.08.04 20:00:40 3: eval: {diffval_ParseDone('DbRep.elektrische.Energie.FBDECT_fritz.box.AHA.Wohnzimmer_17|TWpB<gekürzt>0wMQo=|FBDECT_fritz.box.AHA.Wohnzimmer_17|energy|0.027858|0')}
2016.08.04 20:00:40 3: stacktrace:
2016.08.04 20:00:40 3:     main::__ANON__                      called by (eval 4058) (1)
2016.08.04 20:00:40 3:     (eval)                              called by ./FHEM/33_readingsGroup.pm (498)
2016.08.04 20:00:40 3:     readingsGroup::rgCalc               called by ./FHEM/33_readingsGroup.pm (513)
2016.08.04 20:00:40 3:     main::readingsGroup_value2html      called by ./FHEM/33_readingsGroup.pm (1373)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1384)
2016.08.04 20:00:40 3:     main::updateRefs                    called by ./FHEM/33_readingsGroup.pm (1395)
2016.08.04 20:00:40 3:     main::readingsGroup_Notify          called by fhem.pl (3199)
2016.08.04 20:00:40 3:     main::CallFn                        called by fhem.pl (3121)
2016.08.04 20:00:40 3:     main::DoTrigger                     called by fhem.pl (4012)
2016.08.04 20:00:40 3:     main::readingsEndUpdate             called by ./FHEM/93_DbRep.pm (1265)
2016.08.04 20:00:40 3:     main::diffval_ParseDone             called by (eval 2210) (1)
2016.08.04 20:00:40 3:     (eval)                              called by fhem.pl (1002)
2016.08.04 20:00:40 3:     main::AnalyzePerlCommand            called by fhem.pl (1021)
2016.08.04 20:00:40 3:     main::AnalyzeCommand                called by fhem.pl (950)
2016.08.04 20:00:40 3:     main::AnalyzeCommandChain           called by ./FHEM/98_telnet.pm (275)
2016.08.04 20:00:40 3:     main::telnet_Read                   called by fhem.pl (3199)
2016.08.04 20:00:40 3:     main::CallFn                        called by fhem.pl (667)

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7809
Dann setz für deine Readingsgroup verbose mal runter. Dann sollten die Warnungen weg sein... als Notlösung.

Das Valueformat habe ich bei mir genauso wie du (ohne "\"):
{ ($VALUE ne "-") ? "%.2f" : "-" }
Bei mir gibt es deswegen keine Einträge im Log der Art :

PERL WARNING: Argument "-" isn't numeric ....
Hast du mit der V3.4.1 festgestellt dass es noch irgendwelche nichtnumerischen Werte in dem Auswertungsstring gibt ?  Wenn nicht ist es an dieser Stelle sauber.

Die Aufrufe mit eval:

eval: {diffval_ParseDone('DbRep.elektrische.Energi ....
werden so wie es aussieht durch fhem.pl selbst ausgeführt. Wieso die Einträge im Log erscheinen ist mir trotzdem noch nicht transparent geworden.
Wie sieht es denn aus wenn du die Readingsgroup temprorär auf disable=1 setzt ?



ESXi 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf VM
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline DerFrickler

  • Sr. Member
  • ****
  • Beiträge: 587
es scheint alles mit den Berechnungen in readingsGroup zusammen zu hängen. D.h., Funktionen wie z.B. $sum($ROW:1..$COLUMN-1) sind wegen der "-" nicht nutzbar.

Wie gehst Du bei Deiner Auswertung vor? Werden Ertrag und Kosten innerhalb oder ausserhalb der readingsGroup ermittelt?

Gruß!

Nachtrag:

was jetzt noch im Log steht:
DBD::SQLite::st fetchall_arrayref failed: database disk image is malformed at ./FHEM/93_DbRep.pm line 1129.
DBD::SQLite::st fetchall_arrayref failed: database disk image is malformed at ./FHEM/93_DbRep.pm line 1129.

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7809
Guten Morgen,

Zitat
]Funktionen wie z.B. $sum($ROW:1..$COLUMN-1) sind wegen der "-" nicht nutzbar.

Du könntest in der Readingsgroup das valueFormat so umformulieren:

{ ($VALUE ne "-") ? "%.2f" : 0.00 }
Damit wären Weiterberechnungen wohl möglich, da du immer numerische Werte bekommst.

Prinzipiell sehe ich zu alle auszuwertenden Größen gleich in der Datenbank in der benötigten Form zu speichern. So ist es auch mit Ertrag und Kosten. Das verwendete SMAEM Modul hat Attribute an Bord die eine Berechnung dieser Werte gleich intern erledigen und als Readings ausgeben.

Wo das nicht der Fall ist, würde ich immer versuchen mit userreadings im jeweiligen Modul  die abzuspeichernden Größen zu berechnen und zu loggen. Readingsgroup dient dann nur noch der strukturierten Aufbereitung.

Nach deinem Fehler:

DBD::SQLite::st fetchall_arrayref failed: database disk image is malformed
habe ich mal gegoogelt und einige Reparaturhinweise gefunden. Möglicherweise hast du eine DB / Datenfile Korruption.
Schau mal ob etwas für dich zutrifft (ein Hinweis ist für Windows).

http://stackoverflow.com/questions/26962287/how-to-fix-activeperls-ppm-database-disk-image-is-malformed-error
http://stackoverflow.com/questions/5274202/sqlite3-database-or-disk-is-full-the-database-disk-image-is-malformed
http://stackoverflow.com/questions/13675615/svn-cleanup-sqlite-database-disk-image-is-malformed

Es gibt noch etliche Treffer mehr. Such mal ein bisschen falls dir diese Hinweise nicht helfen sollten.

Hast du denn die manuelle Insertfunktion ausprobiert ? Sollte dir helfen deine Werte problemlos in die DB zu bekommen.

Grüße
Heiko



« Letzte Änderung: 05 August 2016, 12:26:18 von DS_Starter »
ESXi 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf VM
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline DerFrickler

  • Sr. Member
  • ****
  • Beiträge: 587
Guten Morgen,

Du könntest in der Readingsgroup das valueFormat so umformulieren:

{ ($VALUE ne "-") ? "%.2f" : 0.00 }
Damit wären Weiterberechnungen wohl möglich, da du immer numerische Werte bekommst.

Irgendwie hat es den Anschein dass die Konvertierung von "-" nach "0.00" bereits im DbReg erfolgen muss. Ich teste noch mal etwas rum und melde mich dann zurück.

Gruß!

Offline DerFrickler

  • Sr. Member
  • ****
  • Beiträge: 587
fassen wir mal zusammen... das Modul DbRep funktioniert soweit, die Probleme (bei mir) entstehen im Zusammenhang mit den Funktionen mit der readingsGroup.

Wurden Werte mit fehlerhaftem Format eingegeben wird gar nicht berechnet (diffValue). Ich hatte ja den Fall dass ich bei einem Wert ein Komma anstatt Punkt eingegeben hatte.
Meine Meinung: Ich würde vorschlagen dass man solche Werte in der Kalkulation einfach ignoriert und lediglich eine Warnung mit ausgibt. Das Modul bietet die Möglichkeit alle Datensätze zu löschen, aber keine einzelnen. Hier könnte man anhand der Warnung den fehlerhaften Wert manuell nachtragen. Alternativ kann man auch die Möglichkeit bieten einzelne Datensätze selektiv aus der DB zu löschen. Stellt sich halt die Frage was einfacher zu realisieren ist.

Manuelles Eintragen von Datensätzen in die DB...
Meine Meinung: Es funktioniert gut, nur hätte ich die Eingabe etwas reduziert... aktuell: Date,Time,Device,Reading,Value,Unit; ausreichen sollte: Date,Time,Value,Unit
Hier hätte ich erwartet dass es sich beim Device auch um das Attribut Device und beim Reading um das Attribut Reading handelt. Das würde dann die Eingabe etwas vereinfachen.

Gruß!

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7809
Danke für die Rückmeldung und konstruktiven Hinweise.

In der jetzigen Version generiere ich einen Fehler mit dem Hinweis auf den fehlerhaften String im Logfile sofern man versucht String-Werte mit mathematischen Funktionen zu verarbeiten. Diesen fehlerhaften Wert müßte man momentan mit einem Datenbank-Management-Tool bereinigen. Vielleicht bekomme ich es noch hin die Möglichkeit im Modul zu schaffen.

Beim manuellen Eintragen hatte ich bewußt die Eingabe von Reading/Device unabhängig von den Attributen gestaltet weil ich es als Vorstufe einer Weiterentwicklung in Richtung Bulk-Insert über ein File angesehen hatte. D.h. man bereitet alle einzufügenden Datensätze in einem File vor, übergibt es der Funktion und läßt die Werte reinlaufen.
Aber wenn es sich als praktischer und logischer erweist bei der insert Funktion die Attribute Device/Reading zu verwenden ändere ich es gerne um, es soll ja möglichst praktisch und hilfreich sein.

Grüße
Heiko

ESXi 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf VM
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline DerFrickler

  • Sr. Member
  • ****
  • Beiträge: 587
Aber wenn es sich als praktischer und logischer erweist bei der insert Funktion die Attribute Device/Reading zu verwenden ändere ich es gerne um, es soll ja möglichst praktisch und hilfreich sein.

Grüße
Heiko

es sind halt Vorschläge zu Funktionsweisen wie ich Sie erwartet hätte. Die anderen Funktionen beziehen sich ja auch auf das jeweils angegebene Device und das Reading, demnach hätte ich diese Funktionsweise als konsequent angesehen. Ansonsten scheint die Handhabung absolut logisch und selbsterklärend.

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7809
Zitat
Die anderen Funktionen beziehen sich ja auch auf das jeweils angegebene Device und das Reading, demnach hätte ich diese Funktionsweise als konsequent angesehen.

Nach einiger Überlegung habe ich deinen Vorschlag aufgenommen und auch schon umgesetzt. Ich muß noch etwas testen und die Doku ändern, dann kann ich die neue Version einchecken. Es werden dann auch noch mehr Informationen zu einem fehlerhaften Datensatz (String in math. Funktion) in das Logfile geschrieben.

VG
ESXi 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf VM
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7809
Zitat
Ich muß noch etwas testen und die Doku ändern, dann kann ich die neue Version einchecken.

Habe die neue Verssion eingecheckt und steht dann morgen früh zur Verfügung.
ESXi 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf VM
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline DerFrickler

  • Sr. Member
  • ****
  • Beiträge: 587
Habe die neue Verssion eingecheckt und steht dann morgen früh zur Verfügung.
werde ich dann gerne testen...

Ich hätte da noch einen Vorschlag: wenn man timestamp_begin und timestamp_end mit Werten wie z.B. current_year_begin, current_year_end sowie previous_year_begin und previous_year_end belegen könnte.