[gelöst]DBLog + DbLogValueFn - negative Werte filtern

Begonnen von frober, 22 Januar 2023, 17:20:16

Vorheriges Thema - Nächstes Thema

frober

Zitat von: DS_Starter am 22 Januar 2023, 21:08:57
Ich habe den Syntaxcheck im DbLog erweitert.
Die Attr valueFn und DbLogValueFn werden bei der Eingabe direkt gepfüft (sofern DbLogValueFn im DbLog-Device selbst gesetzt wird).

Das Attr DbLogValueFn in einem Quellendevice kann ich, wie geschrieben, nicht direkt bei der Eingabe prüfen.
Aber jetzt erfolgt in diesem Fall eine Prüfung der Syntax vor der Anwendung des Codes.
Bei einem Fehler erfolgt die Ausgabe im Log unter Angabe welches Device die fehlerhafte Attributsyntax enthält:

    2023.01.22 20:59:23.704 1: DbLog LogSQLITE3 - Syntaxcheck <MySTP_5000> attribute DbLogValueFn:
    Bareword "failureval" not allowed while "strict subs" in use at (eval 3739) line 7.

Die V liegt zunächst in meinem contrib zum Gegencheck wenn Bernd oder ein anderer User es mal ausprobieren möchte.

LG

Hallo Heiko,

getestet und für gut befunden, danke.  :)

Bei valueFn und DbLogValueFn direkt im DbLog-Device erfolgt eine Warnmeldung und das attr wird nicht gesetzt.


Im Quellendevice ergibt...

...die vergessene Klammer folgendes im Log:
2023.01.23 18:22:09 1: ERROR evaluating my $CN=   $evalSpecials->{'%CN'};my $DEVICE=   $evalSpecials->{'%DEVICE'};my $DEVICETYPE=   $evalSpecials->{'%DEVICETYPE'};my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $IGNORE=   $evalSpecials->{'%IGNORE'};my $LASTTIMESTAMP=   $evalSpecials->{'%LASTTIMESTAMP'};my $LASTVALUE=   $evalSpecials->{'%LASTVALUE'};my $READING=   $evalSpecials->{'%READING'};my $TIMESTAMP=   $evalSpecials->{'%TIMESTAMP'};my $UNIT=   $evalSpecials->{'%UNIT'};my $VALUE=   $evalSpecials->{'%VALUE'};{return undef; {if ($READING eq "temperature" && $VALUE < 10) {
$IGNORE=1;
}
elsif ($READING eq "voltage" && ($VALUE < 0 || $VALUE > 20)) {
$IGNORE=1;
}
elsif ($READING eq "current" && ($VALUE < -1000 || $VALUE > 1000)) {
$IGNORE=1;
}
elsif ($READING eq "capacity" && ($VALUE < 0 || $VALUE > 2600)) {
$IGNORE=1;
}}: Missing right curly or square bracket at (eval 4575) line 12, at end of line
syntax error at (eval 4575) line 12, at EOF

2023.01.23 18:22:09 1: DbLog syncdb - Syntaxcheck <USV_Batterie> attribute DbLogValueFn:
Missing right curly or square bracket at (eval 4575) line 12, at end of line
syntax error at (eval 4575) line 12, at EOF


...ein Tippfehler:
Zitat2023.01.23 18:14:09 1: ERROR evaluating my $CN=   $evalSpecials->{'%CN'};my $DEVICE=   $evalSpecials->{'%DEVICE'};my $DEVICETYPE=   $evalSpecials->{'%DEVICETYPE'};my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $IGNORE=   $evalSpecials->{'%IGNORE'};my $LASTTIMESTAMP=   $evalSpecials->{'%LASTTIMESTAMP'};my $LASTVALUE=   $evalSpecials->{'%LASTVALUE'};my $READING=   $evalSpecials->{'%READING'};my $TIMESTAMP=   $evalSpecials->{'%TIMESTAMP'};my $UNIT=   $evalSpecials->{'%UNIT'};my $VALUE=   $evalSpecials->{'%VALUE'};{return undef; {if ($READING eq "temperature" && $VALUE < 10) {
$IGNORE=1;
}
elif ($READING eq "capacity" && ($VALUE < 0 || $VALUE > 2600)) {
$IGNORE=1;
}
}}: syntax error at (eval 1307) line 10, near ") {"
Ist etwas verwirrend, liegt aber am Syntaxcheck und nicht an deinem Code, denke ich.

LG
Bernd
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

betateilchen

Zitat von: frober am 23 Januar 2023, 18:44:10
Zitat

elif ($READING eq "capacity" && ($VALUE < 0 || $VALUE > 2600)) {
...
}}: syntax error at (eval 1307) line 10, near ") {"

Tippfehler: Ist etwas verwirrend, liegt aber am Syntaxcheck und nicht an deinem Code, denke ich.

Nein, das ist völlig ok so. Perl erkennt erst an den beiden rot markierten Klammern, dass irgendwo davor ein Fehler aufgetreten ist.
Deshalb sagt die Fehlermeldung ja auch "near" und nicht "at" - die genaue Stelle kann von perl in diesem Fall nicht ermittelt werden.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

DS_Starter

Danke für das Gegenchecken.

Mir war es wichtig dem User die Quelle des Fehlers auszugeben:

    DbLog ..... - Syntaxcheck <USV_Batterie> attribute DbLogValueFn ...

weil es ansonsten schwierig werden kann die Quelle zu finden wenn viele DbLogValueFn gesetzt sind.
Sonst hätte die im fhem.pl eingebaute Ausgabe:

  ERROR evaluating ....

ausgereicht.
Aber ich denke der User wird normalerweise umgehend  versuchen seinen Fehler zu beseitigen.

Ich checke die Version ein und ist morgen im Update enthalten.
Danke euch.

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

betateilchen

Zitat von: DS_Starter am 23 Januar 2023, 19:29:09
Ich checke die Version ein und ist morgen im Update enthalten.
Danke euch.

dann hast Du ja jetzt Zeit, als nächstes Log2Syslog gegen Rudis heutige Änderung zu fixen  8)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

DS_Starter

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