Fehler in Parameterverarbeitung bei DbRep reduceLog

Begonnen von franz27, 30 April 2024, 09:14:33

Vorheriges Thema - Nächstes Thema

franz27

Hallo,

ich glaube ich habe einen Bug in der Parameterverarbeitung in DbRep reduceLog gefunden.
Aufgefallen ist es bei diesem Aufruf:
set my_dbrep reduceLog 30:60 average INCLUDE=ht.og.ez.1:desired-temp
Was passiert ist, daß der Include-Filter nicht angewendet wird und als Datumsbereich gestern (also 1 Tag zurück) bis vor 60 Tagen verwendet wird.

Verantwortlich scheint das Herausfiltern der Zeitangaben ab Zeile 9740 in der aktuellen Version von 93_DbRep.pm zu sein.
Die Regex in next if($w =~ /\b(\d+(:\d+)?)\b/); erwischt auch das Include aus den Befehl, da der Devicename mit .1 endet.

Später wird dann noch der Include-Teil als zweite Zeitangabe interpretiert und die untere Grenze mit 1 überschrieben.
Dazu habe ich die Stelle im Code noch nicht gefunden, aber bei Aufruf mit z.B. INCLUDE=ht.og.ez.2:desired-temp wird die untere Grenze mit 2 überschrieben.

Ich verstehe nicht warum die Regex \b(\d+...ist (\b ist eine Wortgrenze), wäre um Zahlen zu erkennen nicht [+-]\d+... ausreichend?

Evtl. wäre es auch sicherer Parameter die mit include bzw. exclude anfangen auf keinen Fall auszuschließen, da der Fehler schon recht schwer ist, da sämtliche Datenbankwerte in einem falschen Zeitbereich reduziert werden.

Grüße Franz.

DS_Starter

Hallo Franz,

das ist ja wirklich eine böse Falle. Danke für die Voranalyse.
Ich habe den Regex Code entsprechend abgeändert und die neue DbRep Version eingecheckt.

Falls du es gleich testen möchtest, kannst du diese Version sofort aus meinem contrib laden (Fußtext Link) und FHEM neu starten.

Grüße,
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