DbLog DbLogValueFn PERL WARNING $LASTVALUE

Begonnen von aaameyer, 23 Dezember 2025, 21:31:28

Vorheriges Thema - Nächstes Thema

aaameyer

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;;\
  }\
}

frober

#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;;\
  }\
}
Raspi 3b mit Raspbian Bullseye 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...

aaameyer

Danke für den Gedankenanstoß! Das Umdrehen des Vergleichs führt ebenfalls zu einer Warnung. Ich habe es jetzt so gelöst, da dass auf 0 setzen immer zu einem Logeintrag am Start führen würde:
attr KNX_Klima DbLogValueFn {\
    $LASTVALUE = $VALUE if !$LASTVALUE;\
    if ($READING eq "brightness-get" && ($LASTVALUE+5 >= $VALUE && $LASTVALUE-5 <= $VALUE)) {\
        $IGNORE=1;;\
  }\
}