[Gelöst][DBLog] DbLogValueFn wird nicht beachtet

Begonnen von flummy1978, 06 Mai 2020, 02:01:15

Vorheriges Thema - Nächstes Thema

flummy1978

Hallöchen,

nachdem ich immer mehr mit den DbLog und DbRep Tools mache, die ich mehr als genial finde, bin ich auf n Fehler gestoßen den ich (scheinbar) ohne fremde Hilfe auch nicht lösen kann:

Mein Zähler spamt regelmäßig schön alles voll, wenn ich aus dem Stromzähler mal wieder nen Ventilator mache ;) Dabei rechnet mein Device auch entsprechende Durchschnitte etc...Funktioniert alles wie gewollt. Nun ist es so, dass ind den ersten Minuten nach 0 Uhr, die Abfrage noch kein (lesbares) Ergebnis hervorruft, weil am entsprechenden Verbraucher noch kein Verbrauch festgestellt wurde.... Das führt dazu, dass es dann ein "undef" Ergebnis in der DB gibt. Wäre soweit nicht tragisch, aber daraus folgt dann ein:
2020.05.06 01:38:16.701 1: PERL WARNING: Argument "" isn't numeric in numeric gt (>) at ./FHEM/98_SVG.pm line 1576.
wenn das Ganze im Plot verbaut ist.

Sämtliche Versuche das Abzufangen sind bisher irgendwie gescheitert ... zunächste habe ich die Zeit seit der letzten Readingänderung abgefangen. Das hat schon einige Einträge reduziert. Dann hab ich auch DbLogValueFn  und gefühlt würde ich sagen sind es noch weniger, aber 4 pro Nacht bekomme ich trotzdem (es sind 4 zähler, also kommt es genau einmal vor):

So sieht die DbLogValueFn jeweils aus:
if ($READING =~ /_current_/ && $VALUE < 0.1){ $IGNORE=1; }
if (($READING =~ /aver/) && ($VALUE < 0.1)){ $IGNORE=1; }
if (!$VALUE){ $IGNORE=1; }


Das ist die Ausgabe aus der DB
2020-05-06 00:00:34,"Hauptzaehler","ELECTRICITYCALCULATOR","wemos_kwh_aver: ","wemos_kwh_aver",,,"1760776"
2020-05-06 00:00:43,"Nebenzaehler","ELECTRICITYCALCULATOR","wemoszaehler_OG_kwh_aver: ","wemoszaehler_OG_kwh_aver",,,"1760784"
2020-05-06 00:00:52,"Nebenzaehler","ELECTRICITYCALCULATOR","wemoszaehler_KG_kwh_aver: ","wemoszaehler_KG_kwh_aver",,,"1760787"
2020-05-06 00:11:44,"Nebenzaehler","ELECTRICITYCALCULATOR","wemoszaehler_EG_kwh_aver: ","wemoszaehler_EG_kwh_aver",,,"1760944"

Man sieht also, dass sowohl VALUE als auch UNIT in der history DB leer bleiben. Da habe ich halt gedacht mit <0.1 oder !$VALUE das Ganze abfangen zu können .... funktioniert leider beides nicht ;(

Würde mich freuen, wenn mir da jemand den passenden Tipp geben könnte....

Vielen Dank im Voraus
Grüße
Andreas

DS_Starter

Moin Andreas,

wie sieht denn der Event genau aus, der diesen "undefined" Wert enthält ?

Alternativ, oder vllt. besser, setze DbLog auf verbose 4 (mit verbose4Devs auf dein relevantes Device) und versuche den relevanten Datensatz herauszufinden den du nicht loggen willst.

Mit der Info kommt man dann sicherlich weiter.

Und ein Versuch ins Blaue ... wie sieht es damit aus ? :

if ( $READING =~ /aver/ && (!$VALUE || $VALUE !~ /^\d+$/) ){ $IGNORE=1; }

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

flummy1978

Guten Morgen,

mhmm gute Frage - meinen "Ventilator Spammer" hab ich mich noch nicht getraut, mit einem hohen verbose zu aktiveren *lol*, aber stimmt jetzt wo Du es sagst, wäre es ein leichtest sowas mal mit zu loggen und mal drauf zu gucken ... Schande auf mein Haupt.
Was mir aber logischerweise nach dem Schreiben dieses Threads, heute Nacht noch so durch den Kopf gegeistert ist, als ich weiter darüber gegrübelt habe: RTFM...again RTFM...again RTFM...

Zitat
....... Es kann über einen Perl-Ausdruck auf die Variablen $TIMESTAMP, $READING, $VALUE (Wert des Readings) und $UNIT ......
attr SMA_Energymeter DbLogValueFn
{
  if ($READING eq "Bezug_WirkP_Kosten_Diff"){
    $UNIT="Diff-W";
  }
  if ($READING =~ /Einspeisung_Wirkleistung_Zaehler/ && $VALUE < 2){
    $IGNORE=1;
  }
}

Den Hinweis auf den Perl-Ausdruck und die { } hab ich in meiner erstmaligen Einrchtung von DbLogValueFn irgendwie dezent überlesen und als erfahrener copy & paste Programmierer hab ich den Fehler natürlich schön ins andere Device übertragen  ::) Wäre also durchaus Wahrscheinlich, dass es daran lag, oder ?

Deine RegExp würde ich auf jedenf all in eines der Devices packen und dann sehe ich ja ob es einen Unterschied zum anderen Device gibt. Werde es heute Abend mal testen und dann berichten :)

Vielen Dank und Viele Grüße
Andreas

DS_Starter

ZitatWäre also durchaus Wahrscheinlich, dass es daran lag, oder ?
Durchaus  ;)
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

flummy1978

Kurze Rückmeldung von meiner Seite ... RTFM hilft

Programmierung ist böse und achtet auf JEDE Klammer -> Lösung Beitrag #3

Sorry für den unnötigen Beitrag - Aber vielleicht hilft das dennoch anderen (Blinden) wie mir  8)