Hallo zusammen,
Um mit DbLog nur Werteänderungen zu loggen welche größer als ein bestimmter Schwellwert sind habe ich eine Funktion mit DbLogValueFn umgesetzt. Am einfachsten wäre es natürlich wenn man den Schwellwert wie bei event-on-change-reading mit einem Doppelpunkt bei dem DbLogInclude mit angeben könnte und gar keine eigene Schwellwertfunktion bräuchte. Da ich für meine Steuerungstechnik (via DOIF's) bei jeder Änderungen ein Event benötige, kann ich es nicht die Logging-Schwellwerte nicht über event-on-change-reading limitieren. Das ganze funktioniert auch ganz gut, nur dass beim Starten oder Neustarten von FHEM immer Warnungen kommen. Ich gehe davon aus, das kommt daher, dass die Variable $LASTVALUE am Anfang leer oder nicht definiert ist. Hat jemand eine Idee wie man das Schwellwert-Problem eleganter lösen kann oder die Warnungen beim Initialisieren weg bekommt?
2025.12.23 21:35:03 1: PERL WARNING: Argument "" isn't numeric in addition (+) at (eval 1512) line 2.
2025.12.23 21:35:03 1: stacktrace:
2025.12.23 21:35:03 1: main::__ANON__ called by (eval 1512) (2)
2025.12.23 21:35:03 1: (eval) called by ./FHEM/93_DbLog.pm (1390)
2025.12.23 21:35:03 1: (eval) called by ./FHEM/93_DbLog.pm (1241)
2025.12.23 21:35:03 1: main::DbLog_Log called by fhem.pl (3994)
2025.12.23 21:35:03 1: main::CallFn called by fhem.pl (3906)
2025.12.23 21:35:03 1: main::DoTrigger called by fhem.pl (4296)
2025.12.23 21:35:03 1: main::Dispatch called by ./FHEM/00_KNXIO.pm (1096)
2025.12.23 21:35:03 1: KNXIO::KNXIO_processFIFO called by ./FHEM/00_KNXIO.pm (1073)
2025.12.23 21:35:03 1: KNXIO::KNXIO_dispatch called by ./FHEM/00_KNXIO.pm (540)
2025.12.23 21:35:03 1: KNXIO::__ANON__ called by ./FHEM/00_KNXIO.pm (557)
2025.12.23 21:35:03 1: KNXIO::KNXIO_ReadH called by ./FHEM/00_KNXIO.pm (314)
2025.12.23 21:35:03 1: KNXIO::KNXIO_Read called by fhem.pl (3994)
2025.12.23 21:35:03 1: main::CallFn called by fhem.pl (789)
attr KNX_Klima event-on-change-reading moisture-get:2,temperature-get:0.5,brightness-get
attr KNX_Klima DbLogInclude moisture-get,temperature-get,brightness-get
attr KNX_Klima DbLogValueFn {\
if ($READING eq "brightness-get" && ($LASTVALUE+5 >= $VALUE && $LASTVALUE-5 <= $VALUE)) {\
$IGNORE=1;;\
}\
}
attr KNX_Klima DbLogValueFn {\
$LASTVALUE = 0 if !$LASTVALUE;\
if ($READING eq "brightness-get" && ($LASTVALUE+5 >= $VALUE && $LASTVALUE-5 <= $VALUE)) {\
$IGNORE=1;;\
}\
}
Probier's mal so, sollte keine Nebenwirkungen haben.
$LASTVALUE wird auf 0 gesetzt, wenn es leer ist. Kannst natürlich auch einen anderen Wert nehmen.
Das ist aber eigentlich ein dblog Thema...
Edit:
...oder du drehst den Vergleich um und zählst die 5 zum $VALUE. Bzw. ziehst sie ab.
attr KNX_Klima DbLogValueFn {\
if ($READING eq "brightness-get" && ($LASTVALUE >= $VALUE-5 && $LASTVALUE <= $VALUE+5)) {\
$IGNORE=1;;\
}\
}