Hallo! Als langjähriger Nutzer von FHEM habe ich einige Erfahrung sammeln dürfen, bin aber jetzt nach 3 Tagen Fehlersuche ratlos.
Nach Neuinstallation von FHEM bekomme ich zu folgendem, bislang funktionierendem DOIF
define Batteriestatus DOIF ([D1_Min_160_INA219_2:Mittelwert] >= 27.3)(set Batt_status state 100%) \
DOELSEIF ([D1_Min_160_INA219_2:Mittelwert] < 27.3 and [D1_Min_160_INA219_2:Mittelwert] >= 26)(set Batt_status state 50-100%) \
DOELSEIF ([D1_Min_160_INA219_2:Mittelwert] < 26 and [D1_Min_160_INA219_2:Mittelwert] >= 25.6)(set Batt_status state 33-50%) \
DOELSEIF ([D1_Min_160_INA219_2:Mittelwert] < 25.6)(set Batt_status state <33%) \
DOELSE
attr Batteriestatus room Controller->D1_Mini_160,PV Batteriespeicher
trotz vieler Alternativversuche folgende Fehlermeldung mit der ich überfordert bin:
2023.02.13 00:44:37 1: PERL WARNING: Argument "" isn't numeric in numeric ge (>=) at (eval 33189) line 1.
2023.02.13 00:44:37 3: eval: Batteriestatus: warning in condition c01
2023.02.13 00:44:37 1: stacktrace:
2023.02.13 00:44:37 1: main::__ANON__ called by (eval 33189) (1)
2023.02.13 00:44:37 1: (eval) called by ./FHEM/98_DOIF.pm (2826)
2023.02.13 00:44:37 1: main::DOIF_CheckCond called by ./FHEM/98_DOIF.pm (3170)
2023.02.13 00:44:37 1: main::DOIF_Trigger called by ./FHEM/98_DOIF.pm (4433)
2023.02.13 00:44:37 1: main::DOIF_Set called by fhem.pl (3971)
2023.02.13 00:44:37 1: main::CallFn called by fhem.pl (1964)
2023.02.13 00:44:37 1: main::DoSet called by fhem.pl (1996)
2023.02.13 00:44:37 1: main::CommandSet called by fhem.pl (1276)
2023.02.13 00:44:37 1: main::AnalyzeCommand called by ./FHEM/01_FHEMWEB.pm (2848)
2023.02.13 00:44:37 1: main::FW_fC called by ./FHEM/01_FHEMWEB.pm (1024)
2023.02.13 00:44:37 1: main::FW_answerCall called by ./FHEM/01_FHEMWEB.pm (609)
2023.02.13 00:44:37 1: main::FW_Read called by fhem.pl (3976)
2023.02.13 00:44:37 1: main::CallFn called by fhem.pl (784)
Das zugrunde liegende Reading kommt von ESPEASY als normaler Wert "Voltage" und wird mittels Userreading modifiziert:
attr D1_Mini_160_INA219 userReadings Voltage-Mittelwert_10 {sprintf("%.2f",movingAverage("D1_Mini_160_INA219","Voltage",600))},
Spannung {sprintf("%.2f",ReadingsNum("D1_Mini_160_INA219","Voltage",0))}
Aber auch das direkt ankommende "Voltage"-Signal oder das vorstehende Userreading "Spannung" wird nicht als numerisch interpretiert.
Die Änderung der Operatoren >= zu ge oder > zu gt beseitigt zwar die Fehlermeldungen, aber das DOIF interpretiert die Logik falsch.
define Batteriestatus DOIF ([D1_Min_160_INA219:Voltage-Mittelwert_10] ge "27.3")(set Batt_status state 100%)
DOELSEIF ([D1_Min_160_INA219:Voltage-Mittelwert_10] gt "27.3" and [D1_Min_160_INA219:Voltage-Mittelwert_10] le "26")(set Batt_status state 50-100%)
DOELSEIF ([D1_Min_160_INA219:Voltage-Mittelwert_10] gt "26" and [D1_Min_160_INA219:Voltage-Mittelwert_10] le "25.6")(set Batt_status state 33-50%)
DOELSEIF ([D1_Min_160_INA219:Voltage-Mittelwert_10] gt "25.6")(set Batt_status state <33%)
DOELSE
Ich bin für jeden Hinweis dankbar!
hast du mal
:d versucht?
Zitatd - Der Buchstabe "d" ist ein Synonym für das Filtern nach Dezimalzahlen, es entspricht intern dem regulären Ausdruck "(-?\d+(\.\d+)?)". Ebenfalls lässt sich eine Dezimalzahl auf eine bestimmte Anzahl von Nachkommastellen runden. Dazu wird an das "d" eine Ziffer angehängt. Mit der Angabe d0 wird die Zahl auf ganze Zahlen gerundet.
https://fhem.de/commandref_DE.html#DOIF_Filtern_nach_Zahlen (https://fhem.de/commandref_DE.html#DOIF_Filtern_nach_Zahlen)
define Batteriestatus DOIF ([D1_Min_160_INA219_2:Mittelwert:d] >= 27.3)(set Batt_status state 100%) \
DOELSEIF ([D1_Min_160_INA219_2:Mittelwert:d] < 27.3 and [D1_Min_160_INA219_2:Mittelwert:d] >= 26)(set Batt_status state 50-100%) \
DOELSEIF ([D1_Min_160_INA219_2:Mittelwert:d] < 26 and [D1_Min_160_INA219_2:Mittelwert:d] >= 25.6)(set Batt_status state 33-50%) \
DOELSEIF ([D1_Min_160_INA219_2:Mittelwert:d] < 25.6)(set Batt_status state <33%) \
DOELSE
attr Batteriestatus room Controller->D1_Mini_160,PV Batteriespeicher
ge bzw gt sind für string vergleiche => https://en.perlzemi.com/blog/20080318120585.html (https://en.perlzemi.com/blog/20080318120585.html)
Die Warnung ist eindeutig:
Zitat2023.02.13 00:44:37 1: PERL WARNING: Argument "" isn't numeric in numeric ge (>=) at (eval 33189) line 1.
2023.02.13 00:44:37 3: eval: Batteriestatus: warning in condition c01
bedeutet:
[D1_Min_160_INA219_2:Mittelwert] ist leer, vermutlich weil das Reading nicht existiert.
guter Hinweis, wenn man richtig hinschaut:
D1_Min_160_INA219_2
vs
D1_Mini_160_INA219
Wenn das Device richtig ist, müsste das DOIF leicht angepasst
define Batteriestatus DOIF ([D1_Mini_160_INA219:Mittelwert:d] >= 27.3)(set Batt_status state 100%) \
DOELSEIF ([D1_Mini_160_INA219:Mittelwert:d] < 27.3 and [D1_Mini_160_INA219:Mittelwert:d] >= 26)(set Batt_status state 50-100%) \
DOELSEIF ([D1_Mini_160_INA219:Mittelwert:d] < 26 and [D1_Mini_160_INA219:Mittelwert:d] >= 25.6)(set Batt_status state 33-50%) \
DOELSEIF ([D1_Mini_160_INA219:Mittelwert:d] < 25.6)(set Batt_status state <33%) \
DOELSE
attr Batteriestatus room Controller->D1_Mini_160,PV Batteriespeicher
funktionieren.
Vielen Dank an die schnellen Rückmeldungen!
Zunächst muss ich Asche auf mein Haupt streuen, da ich versehentlich von den vielen ausprobierten Codes die falschen zusammengestellt habe :-((
Hier jetzt die richtigen aus der fhem.cfg:
define D1_Mini_160_INA219 ESPEasy 10.10.10.160 80 espbridge4 D1_Mini_160_INA219
setuuid D1_Mini_160_INA219 63ea04f1-f33f-04e2-e546-0467e65d12143ed5
attr D1_Mini_160_INA219 IODev espbridge4
attr D1_Mini_160_INA219 Interval 700
attr D1_Mini_160_INA219 group ESPEasy Device
attr D1_Mini_160_INA219 icon measure_voltage
attr D1_Mini_160_INA219 presenceCheck 1
attr D1_Mini_160_INA219 readingSwitchText 1
attr D1_Mini_160_INA219 room Controller->D1_Mini_160,PV Batteriespeicher
attr D1_Mini_160_INA219 setState 7
attr D1_Mini_160_INA219 userReadings Voltage-Mittelwert_10 {sprintf("%.2f",movingAverage("D1_Mini_160_INA219","Voltage",600))},
Spannung {sprintf("%.2f",ReadingsNum("D1_Mini_160_INA219","Voltage",0))}
define Batteriestatus DOIF ([D1_Min_160_INA219:Voltage-Mittelwert_10:d1] >= 27.3)(set Batt_status state 100%)\
DOELSEIF ([D1_Min_160_INA219:Voltage-Mittelwert_10:d1] < 27.3 and [D1_Min_160_INA219:Voltage-Mittelwert_10:d1] >= 26)(set Batt_status state 50-100%)\
DOELSEIF ([D1_Min_160_INA219:Voltage-Mittelwert_10:d1] < 26 and [D1_Min_160_INA219:Voltage-Mittelwert_10:d1] >= 25.6)(set Batt_status state 33-50%)\
DOELSEIF ([D1_Min_160_INA219:Voltage-Mittelwert_10:d1] < 25.6)(set Batt_status state <33%) \
DOELSE
setuuid Batteriestatus 63e55153-f33f-04e2-e185-b68869228cc54380
attr Batteriestatus room Controller->D1_Mini_160,PV Batteriespeicher
Hatte aber schon die richtigen Readings jeweils gesetzt.
Habe auch zuvor schon und jetzt wieder auch :d bzw. :d1 versucht, negativ.
Das mit den String-Operatoren ist mir weitgehend bewusst. Seltsamerweise bekomme ich dann keine Fehlermeldungen mehr.
Also kann der movingAverage-Wert "Voltage-Mittelwert_10" (oben ohne _10) und auch der zugrunde liegend "Voltage"-Wert wohl nicht numerisch sein.
Hab's auch mit dem UserReading "Spannung" versucht, immer diesselben Fehlermeldungen....
@ Damian: die movingAverage-Readings kommen sauber im Log, auch in den Graphs.
Leider kommen mit den obigen Codes bei "set Batteriestatus checkall" immer noch die Fehlermeldungen im Logfile:
2023-02-13_18:01:45 Logfile clear
2023.02.13 18:16:09 1: PERL WARNING: Argument "" isn't numeric in numeric ge (>=) at (eval 18460) line 1.
2023.02.13 18:16:09 3: eval: Batteriestatus: warning in condition c01
2023.02.13 18:16:09 1: stacktrace:
2023.02.13 18:16:09 1: main::__ANON__ called by (eval 18460) (1)
2023.02.13 18:16:09 1: (eval) called by ./FHEM/98_DOIF.pm (2826)
2023.02.13 18:16:09 1: main::DOIF_CheckCond called by ./FHEM/98_DOIF.pm (3170)
2023.02.13 18:16:09 1: main::DOIF_Trigger called by ./FHEM/98_DOIF.pm (4433)
2023.02.13 18:16:09 1: main::DOIF_Set called by fhem.pl (3971)
2023.02.13 18:16:09 1: main::CallFn called by fhem.pl (1964)
2023.02.13 18:16:09 1: main::DoSet called by fhem.pl (1996)
2023.02.13 18:16:09 1: main::CommandSet called by fhem.pl (1276)
2023.02.13 18:16:09 1: main::AnalyzeCommand called by ./FHEM/01_FHEMWEB.pm (2848)
2023.02.13 18:16:09 1: main::FW_fC called by ./FHEM/01_FHEMWEB.pm (1024)
2023.02.13 18:16:09 1: main::FW_answerCall called by ./FHEM/01_FHEMWEB.pm (609)
2023.02.13 18:16:09 1: main::FW_Read called by fhem.pl (3976)
2023.02.13 18:16:09 1: main::CallFn called by fhem.pl (784)
2023.02.13 18:16:09 1: PERL WARNING: Argument "" isn't numeric in numeric lt (<) at (eval 18461) line 1.
2023.02.13 18:16:09 3: eval: Batteriestatus: warning in condition c02
2023.02.13 18:16:09 1: stacktrace:
2023.02.13 18:16:09 1: main::__ANON__ called by (eval 18461) (1)
2023.02.13 18:16:09 1: (eval) called by ./FHEM/98_DOIF.pm (2826)
2023.02.13 18:16:09 1: main::DOIF_CheckCond called by ./FHEM/98_DOIF.pm (3170)
2023.02.13 18:16:09 1: main::DOIF_Trigger called by ./FHEM/98_DOIF.pm (4433)
2023.02.13 18:16:09 1: main::DOIF_Set called by fhem.pl (3971)
2023.02.13 18:16:09 1: main::CallFn called by fhem.pl (1964)
2023.02.13 18:16:09 1: main::DoSet called by fhem.pl (1996)
2023.02.13 18:16:09 1: main::CommandSet called by fhem.pl (1276)
2023.02.13 18:16:09 1: main::AnalyzeCommand called by ./FHEM/01_FHEMWEB.pm (2848)
2023.02.13 18:16:09 1: main::FW_fC called by ./FHEM/01_FHEMWEB.pm (1024)
2023.02.13 18:16:09 1: main::FW_answerCall called by ./FHEM/01_FHEMWEB.pm (609)
2023.02.13 18:16:09 1: main::FW_Read called by fhem.pl (3976)
2023.02.13 18:16:09 1: main::CallFn called by fhem.pl (784)
2023.02.13 18:16:09 1: PERL WARNING: Argument "" isn't numeric in numeric ge (>=) at (eval 18461) line 1.
2023.02.13 18:16:09 3: eval: Batteriestatus: warning in condition c02
2023.02.13 18:16:09 1: stacktrace:
2023.02.13 18:16:09 1: main::__ANON__ called by (eval 18461) (1)
2023.02.13 18:16:09 1: (eval) called by ./FHEM/98_DOIF.pm (2826)
2023.02.13 18:16:09 1: main::DOIF_CheckCond called by ./FHEM/98_DOIF.pm (3170)
2023.02.13 18:16:09 1: main::DOIF_Trigger called by ./FHEM/98_DOIF.pm (4433)
2023.02.13 18:16:09 1: main::DOIF_Set called by fhem.pl (3971)
2023.02.13 18:16:09 1: main::CallFn called by fhem.pl (1964)
2023.02.13 18:16:09 1: main::DoSet called by fhem.pl (1996)
2023.02.13 18:16:09 1: main::CommandSet called by fhem.pl (1276)
2023.02.13 18:16:09 1: main::AnalyzeCommand called by ./FHEM/01_FHEMWEB.pm (2848)
2023.02.13 18:16:09 1: main::FW_fC called by ./FHEM/01_FHEMWEB.pm (1024)
2023.02.13 18:16:09 1: main::FW_answerCall called by ./FHEM/01_FHEMWEB.pm (609)
2023.02.13 18:16:09 1: main::FW_Read called by fhem.pl (3976)
2023.02.13 18:16:09 1: main::CallFn called by fhem.pl (784)
2023.02.13 18:16:09 1: PERL WARNING: Argument "" isn't numeric in numeric lt (<) at (eval 18462) line 1.
2023.02.13 18:16:09 3: eval: Batteriestatus: warning in condition c03
2023.02.13 18:16:09 1: stacktrace:
2023.02.13 18:16:09 1: main::__ANON__ called by (eval 18462) (1)
2023.02.13 18:16:09 1: (eval) called by ./FHEM/98_DOIF.pm (2826)
2023.02.13 18:16:09 1: main::DOIF_CheckCond called by ./FHEM/98_DOIF.pm (3170)
2023.02.13 18:16:09 1: main::DOIF_Trigger called by ./FHEM/98_DOIF.pm (4433)
2023.02.13 18:16:09 1: main::DOIF_Set called by fhem.pl (3971)
2023.02.13 18:16:09 1: main::CallFn called by fhem.pl (1964)
2023.02.13 18:16:09 1: main::DoSet called by fhem.pl (1996)
2023.02.13 18:16:09 1: main::CommandSet called by fhem.pl (1276)
2023.02.13 18:16:09 1: main::AnalyzeCommand called by ./FHEM/01_FHEMWEB.pm (2848)
2023.02.13 18:16:09 1: main::FW_fC called by ./FHEM/01_FHEMWEB.pm (1024)
2023.02.13 18:16:09 1: main::FW_answerCall called by ./FHEM/01_FHEMWEB.pm (609)
2023.02.13 18:16:09 1: main::FW_Read called by fhem.pl (3976)
2023.02.13 18:16:09 1: main::CallFn called by fhem.pl (784)
2023.02.13 18:16:09 1: PERL WARNING: Argument "" isn't numeric in numeric ge (>=) at (eval 18462) line 1.
2023.02.13 18:16:09 3: eval: Batteriestatus: warning in condition c03
2023.02.13 18:16:09 1: stacktrace:
2023.02.13 18:16:09 1: main::__ANON__ called by (eval 18462) (1)
2023.02.13 18:16:09 1: (eval) called by ./FHEM/98_DOIF.pm (2826)
2023.02.13 18:16:09 1: main::DOIF_CheckCond called by ./FHEM/98_DOIF.pm (3170)
2023.02.13 18:16:09 1: main::DOIF_Trigger called by ./FHEM/98_DOIF.pm (4433)
2023.02.13 18:16:09 1: main::DOIF_Set called by fhem.pl (3971)
2023.02.13 18:16:09 1: main::CallFn called by fhem.pl (1964)
2023.02.13 18:16:09 1: main::DoSet called by fhem.pl (1996)
2023.02.13 18:16:09 1: main::CommandSet called by fhem.pl (1276)
2023.02.13 18:16:09 1: main::AnalyzeCommand called by ./FHEM/01_FHEMWEB.pm (2848)
2023.02.13 18:16:09 1: main::FW_fC called by ./FHEM/01_FHEMWEB.pm (1024)
2023.02.13 18:16:09 1: main::FW_answerCall called by ./FHEM/01_FHEMWEB.pm (609)
2023.02.13 18:16:09 1: main::FW_Read called by fhem.pl (3976)
2023.02.13 18:16:09 1: main::CallFn called by fhem.pl (784)
2023.02.13 18:16:09 1: PERL WARNING: Argument "" isn't numeric in numeric lt (<) at (eval 18463) line 1.
2023.02.13 18:16:09 3: eval: Batteriestatus: warning in condition c04
2023.02.13 18:16:09 1: stacktrace:
2023.02.13 18:16:09 1: main::__ANON__ called by (eval 18463) (1)
2023.02.13 18:16:09 1: (eval) called by ./FHEM/98_DOIF.pm (2826)
2023.02.13 18:16:09 1: main::DOIF_CheckCond called by ./FHEM/98_DOIF.pm (3170)
2023.02.13 18:16:09 1: main::DOIF_Trigger called by ./FHEM/98_DOIF.pm (4433)
2023.02.13 18:16:09 1: main::DOIF_Set called by fhem.pl (3971)
2023.02.13 18:16:09 1: main::CallFn called by fhem.pl (1964)
2023.02.13 18:16:09 1: main::DoSet called by fhem.pl (1996)
2023.02.13 18:16:09 1: main::CommandSet called by fhem.pl (1276)
2023.02.13 18:16:09 1: main::AnalyzeCommand called by ./FHEM/01_FHEMWEB.pm (2848)
2023.02.13 18:16:09 1: main::FW_fC called by ./FHEM/01_FHEMWEB.pm (1024)
2023.02.13 18:16:09 1: main::FW_answerCall called by ./FHEM/01_FHEMWEB.pm (609)
2023.02.13 18:16:09 1: main::FW_Read called by fhem.pl (3976)
2023.02.13 18:16:09 1: main::CallFn called by fhem.pl (784)
Gibt's noch weitere Hinweise?
Wenn das nun wirklich die richtigen Auszüge sind und das DOIF zum gezeigten ESPEasy Device gehören soll, dann hat das DOIF Device immernoch einen typo - das i fehlt im Devicenamen:
D1_Mini_160_INA219
vs
D1_Min_160_INA219
Ich würde erstmal hier nochmal genauer hinschauen.
yersinia, allerbesten Dank!
Ich mag es fast nicht glauben, aber das war's!
Shame on me...