addlog() => Perl warnung bei numerischen Werten

Begonnen von Rampler, 01 Februar 2024, 08:20:01

Vorheriges Thema - Nächstes Thema

Rampler

Hallo zusammen,
um Plotabriss zu vermeiden, verwende ich die addlog() Funktion in der 99_myUtils.pm:
sub
addLog($$$)
{
my ($logdevice, $reading, $logreadingname) = @_; # device and reading to be used
my $logentry = ReadingsVal($logdevice,$reading,"addLog: invalid reading");
if ( $logreadingname eq "logrn" )
    {fhem "trigger $logdevice $reading: $logentry   << addLog";}
else {fhem "trigger $logdevice $logentry   << addLog";}
}

Wenn ich aber nun das addLog für numerischen Werte verwende bekomme ich eine Perl Warnung:

2024.02.01 08:00:22 1: PERL WARNING: Argument " 12.31  << addlog" isn't numeric in numeric gt (>) at (eval 23108) line 8.
Diese Warnung kam von diesem Trigger:
trigger Gartenhaus Voltage: 12.31  << addLog

So wie es aussieht kann das addlog() nicht für numerische Werte verwendet werden, zumindest nicht ohne Warning.

Habe ich da was übersehen oder falsch gemacht ?

VG Klaus

EDIT:
Hier mal das Listing des betroffenen Gerätes:
Internals:
   DEF        Gartenhaus
   FUUID      5c489c1c-f33f-b6d9-78c0-e824abfb90fb2370
   IODev      MQTT
   NAME       Gartenhaus
   NOTIFYDEV  Gartenhaus
   NR         410
   STATE      <div style="text-align:left">Wind: 0 km/h</div>
<div style="text-align:left">Temp: 9.4 °C</div>
<div style="text-align:left">Luftdruck: 1027 mbar</div>
<div style="text-align:left">Luftdruck Tendenz 3h: +1 mbar</div>
<div style="text-align:left">Batterie: 12.35 V</div>
<div style="text-align:left">Regen heute: 2.1 l/qm</div>
<div style="text-align:left">Regen Monat: 2.1 l/qm</div>
<div style="text-align:left">Regen Jahr: 60.3 l/qm</div>
<div style="text-align:left">DC/AC Konverter: 0</div>
<div style="text-align:left">Infrarotlicht: 0</div>
<div style="text-align:left">Ventilator: 0</div>
   TYPE       MQTT_DEVICE
   eventCount 1063
   READINGS:
     2023-11-03 19:38:32   Converter       0
     2024-02-01 09:01:22   Count_Rain      0
     2024-02-01 09:02:42   Count_Wind      0
     2024-02-01 09:01:37   Humidity        52
     2024-01-31 19:46:47   IODev           MQTT
     2024-02-01 06:54:41   IR              0
     2023-10-15 17:08:03   Lueftung        0
     2024-02-01 09:01:37   Pressure        1027
     2024-02-01 07:01:22   Rainmonth       2.1
     2024-01-31 23:59:58   Rainmonth_avg   58.2
     2024-02-01 07:01:22   Raintoday       2.1
     2024-02-01 07:01:22   Rainyear        60.3
     2024-01-31 23:59:59   Rainyesterday   0.0
     2024-02-01 09:01:37   Temperature     9.4
     2024-02-01 08:57:22   Voltage         12.35
     2024-02-01 09:01:33   Windspeed       0
     2024-02-01 08:57:18   alive           alive
     2024-02-01 08:59:55   statPressureTendency 1h: +1 2h: +1 3h: +1 6h: +0
     2024-02-01 08:59:55   statPressureTendency3h +1
     2024-02-01 09:02:42   transmission-state incoming publish received
   helper:
     _98_statistics Statistics
   message_ids:
   sets:
   subscribe:
     /Gartenhaus/Converter
     /Gartenhaus/Count_Rain
     /Gartenhaus/Count_Wind
     /Gartenhaus/Humidity
     /Gartenhaus/IR
     /Gartenhaus/Lueftung
     /Gartenhaus/Pressure
     /Gartenhaus/Temperature
     /Gartenhaus/Voltage
   subscribeExpr:
     ^\/Gartenhaus\/Converter$
     ^\/Gartenhaus\/Count_Rain$
     ^\/Gartenhaus\/Count_Wind$
     ^\/Gartenhaus\/Humidity$
     ^\/Gartenhaus\/IR$
     ^\/Gartenhaus\/Lueftung$
     ^\/Gartenhaus\/Pressure$
     ^\/Gartenhaus\/Temperature$
     ^\/Gartenhaus\/Voltage$
   subscribeQos:
     /Gartenhaus/Converter 0
     /Gartenhaus/Count_Rain 0
     /Gartenhaus/Count_Wind 0
     /Gartenhaus/Humidity 0
     /Gartenhaus/IR 0
     /Gartenhaus/Lueftung 0
     /Gartenhaus/Pressure 0
     /Gartenhaus/Temperature 0
     /Gartenhaus/Voltage 0
   subscribeReadings:
     /Gartenhaus/Converter:
       cmd       
       name       Converter
     /Gartenhaus/Count_Rain:
       cmd       
       name       Count_Rain
     /Gartenhaus/Count_Wind:
       cmd       
       name       Count_Wind
     /Gartenhaus/Humidity:
       cmd       
       name       Humidity
     /Gartenhaus/IR:
       cmd       
       name       IR
     /Gartenhaus/Lueftung:
       cmd       
       name       Lueftung
     /Gartenhaus/Pressure:
       cmd       
       name       Pressure
     /Gartenhaus/Temperature:
       cmd       
       name       Temperature
     /Gartenhaus/Voltage:
       cmd       
       name       Voltage
Attributes:
   IODev      MQTT
   comment    Solarladeregler:
Abschaltung: 10.8 V | Wiedereinschalten: 12.5 V | Boost: 14.3 V | Normalladen (Float): 13.7 V | Ausgleichsladen (EQU): 14.7 V
Default Float von 13.9 V auf 13.7 V geändert
Default Boost von 14.4 V auf 14.3 V geändert
Default Entladeschlußspannung von 11.1 V auf 10.8 V geändert
Default LI auf GEL geändert

Daten zur Ladeendspannung abhängig von eingestellter Batterieart:
                                                Gel-Akku (GEL)                                   Flüssiger Elektrolyt (Li)
Normalladen (float)                    13,7 V                                                13,9 V
Boost-Laden (boost) für 2 h        14,3 V                                                14,4 V
Ausgleichsladen (equal) für 2 h    ---                                                     14,7 V
30 täg. Wartungsladen,              14,3 V                                                14,7 V
wenn kein Boost bzw Ausgleichsladen
aktiv war  (für 2 h)


Aktivierungsschwellen der Ladearten:
SOC Steuerung                           Spannungssteuerung
Normalladen SOC ≥ 70 %              ≥ 12,7 V
Boost-Laden SOC 40 % – 69 %       11,7 V – 12,7 V
Ausgleichsladen SOC < 40 %         < 11,7 V  (nicht bei GEL )

30-tägiges Wartungsladen, wenn innerhalb 30 Tagen kein Ausgleichs bzw. Boost-Laden aktiv war.

Lastabschaltung
                                                SOC Steuerung                           Spannungssteuerung
Vorwarnung Lastabschaltung       SOC < 40 %                                < 11,7 V / 23,4 V
Lastabschaltung                         SOC < 30 %                                < 11,1 V / 22,2 V
Wiedereinschalten der Last        SOC > 50 %                                 > 12,5 V / 25,0 V

Skalierung der Balkenanzeige:
(nur Betriebsart Spannungssteuerung mit Balkenanzeige)
> 13,0 V / 26,0 V 10 Balken
> 12,9 V / 25,8 V 9 Balken
> 12,8 V / 25,6 V 8 Balken
> 12,7 V / 25,4 V 7 Balken
> 12,5 V / 25,0 V 6 Balken
> 12,0 V / 24,0 V 5 Balken
> 11,7 V / 23,4 V 4 Balken
> 11,1 V / 22,2 V 3 Balken
> 11,0 V / 22,0 V 2 Balken
≤ 11,0 V / 22,0 V 1 Balken

Achtung Temperaturausgleich:
0,004 V/K pro Zelle (Referenz 25 Grad)
Macht bei -5 Grad 0,004 * 30 * 6 ==>  + 0,72 V höhere Ladespannungen ==> 15,32 V !!! (14,6 + 0,72)
   event-aggregator Count_Wind:130:none:max
   event-min-interval Windspeed:900,Temperature:900
   event-on-change-reading Converter,IR,Windspeed:2,statPressureTendency3h,Lueftung
   event-on-update-reading Count_Wind,Voltage,Count_Rain,Rainyear,Raintoday,Rainmonth,Rainmonth_avg,Pressure,Humidity,Temperature
   icon       control_building_empty
   readingsWatcher 900,,Count_Wind
   room       Garten
   stateFormat <div style="text-align:left">Wind: Windspeed km/h</div>
<div style="text-align:left">Temp: Temperature °C</div>
<div style="text-align:left">Luftdruck: Pressure mbar</div>
<div style="text-align:left">Luftdruck Tendenz 3h: statPressureTendency3h mbar</div>
<div style="text-align:left">Batterie: Voltage V</div>
<div style="text-align:left">Regen heute: Raintoday l/qm</div>
<div style="text-align:left">Regen Monat: Rainmonth l/qm</div>
<div style="text-align:left">Regen Jahr: Rainyear l/qm</div>
<div style="text-align:left">DC/AC Konverter: Converter</div>
<div style="text-align:left">Infrarotlicht: IR</div>
<div style="text-align:left">Ventilator: Lueftung</div>
   subscribeReading_Converter /Gartenhaus/Converter
   subscribeReading_Count_Rain /Gartenhaus/Count_Rain
   subscribeReading_Count_Wind /Gartenhaus/Count_Wind
   subscribeReading_Humidity /Gartenhaus/Humidity
   subscribeReading_IR /Gartenhaus/IR
   subscribeReading_Lueftung /Gartenhaus/Lueftung
   subscribeReading_Pressure /Gartenhaus/Pressure
   subscribeReading_Temperature /Gartenhaus/Temperature
   subscribeReading_Voltage /Gartenhaus/Voltage
   userReadings Windspeed:Count_Wind.* {sprintf("%.0f",(((ReadingsVal("Gartenhaus","Count_Wind",0)+2)/3)*3.6)/10)} ,
Raintoday:Count_Rain:.[^0].* {sprintf("%.1f",(ReadingsVal("Gartenhaus","Raintoday",0)+ReadingsVal("Gartenhaus","Count_Rain",0)*0.3))} ,
Rainmonth:Count_Rain:.[^0].* {sprintf("%.1f",(ReadingsVal("Gartenhaus","Rainmonth",0)+ReadingsVal("Gartenhaus","Count_Rain",0)*0.3))} ,
Rainyear:Count_Rain:.[^0].* {sprintf("%.1f",(ReadingsVal("Gartenhaus","Rainyear",0)+ReadingsVal("Gartenhaus","Count_Rain",0)*0.3))}
   verbose    0
3 HMUART (2 via ESP8266), 1 DUOFERN, 12 ESP8266, SolvisBen, GoodWE WR, RPI2 (Bullseye), ZWAVE, HM-Classic, und hoch zufrieden ...
Danke an alle, die was dazu beigetragen haben !!

betateilchen

#1
Die Fehlermeldung kommt vermutlich gar nicht aus Deinem addLog(), sondern beispielsweise aus einem SVG plot, der versucht, den geloggten numerischen Wert inklusive dem Zusatz "<< addLog" auf einer numerischen Achse darzustellen.
Natürlich kann das Problem auch an jeder anderen Stelle, an der versucht wird, mit dem geloggten Wert zu rechnen, auftreten - in den meisten Fällen passiert es aber in einem plot.

Zur Verifizierung kannst Du mal stacktrace einschalten, dann siehst Du genau, wo die Warnung ausgelöst wird.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Rampler

Ok mit stacktrace:

2024.02.01 09:53:48 3: eval: {addLog("Gartenhaus","Voltage","logrn")}
2024.02.01 09:53:48 1: stacktrace:
2024.02.01 09:53:48 1:     main::__ANON__                      called by (eval 28822) (2)
2024.02.01 09:53:48 1:     (eval)                              called by ./FHEM/33_readingsGroup.pm (357)
2024.02.01 09:53:48 1:     main::lookup2                       called by ./FHEM/33_readingsGroup.pm (1441)
2024.02.01 09:53:48 1:     main::readingsGroup_Notify          called by fhem.pl (3985)
2024.02.01 09:53:48 1:     main::CallFn                        called by fhem.pl (3897)
2024.02.01 09:53:48 1:     main::DoTrigger                     called by fhem.pl (3344)
2024.02.01 09:53:48 1:     main::CommandTrigger                called by fhem.pl (1282)
2024.02.01 09:53:48 1:     main::AnalyzeCommand                called by fhem.pl (1133)
2024.02.01 09:53:48 1:     main::AnalyzeCommandChain           called by fhem.pl (4025)
2024.02.01 09:53:48 1:     main::fhem                          called by ./FHEM/99_myUtils.pm (105)
2024.02.01 09:53:48 1:     main::addLog                        called by (eval 28821) (1)
2024.02.01 09:53:48 1:     (eval)                              called by fhem.pl (1177)
2024.02.01 09:53:48 1:     main::AnalyzePerlCommand            called by fhem.pl (1206)
2024.02.01 09:53:48 1:     main::AnalyzeCommand                called by fhem.pl (1133)
2024.02.01 09:53:48 1:     main::AnalyzeCommandChain           called by ./FHEM/01_FHEMWEB.pm (2863)
2024.02.01 09:53:48 1:     main::FW_fC                         called by ./FHEM/01_FHEMWEB.pm (1025)
2024.02.01 09:53:48 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (609)
2024.02.01 09:53:48 1:     main::FW_Read                       called by fhem.pl (3985)
2024.02.01 09:53:48 1:     main::CallFn                        called by fhem.pl (786)
2024.02.01 09:53:48 1: PERL WARNING: Argument "12.52   << addLog" isn't numeric in numeric gt (>) at (eval 28825) line 8.
2024.02.01 09:53:48 1: stacktrace:
2024.02.01 09:53:48 1:     main::__ANON__                      called by (eval 28825) (2)
2024.02.01 09:53:48 1:     (eval)                              called by ./FHEM/33_readingsGroup.pm (357)
2024.02.01 09:53:48 1:     main::lookup2                       called by ./FHEM/33_readingsGroup.pm (1441)
2024.02.01 09:53:48 1:     main::readingsGroup_Notify          called by fhem.pl (3985)
2024.02.01 09:53:48 1:     main::CallFn                        called by fhem.pl (3897)
2024.02.01 09:53:48 1:     main::DoTrigger                     called by fhem.pl (3344)
2024.02.01 09:53:48 1:     main::CommandTrigger                called by fhem.pl (1282)
2024.02.01 09:53:48 1:     main::AnalyzeCommand                called by fhem.pl (1133)
2024.02.01 09:53:48 1:     main::AnalyzeCommandChain           called by fhem.pl (4025)
2024.02.01 09:53:48 1:     main::fhem                          called by ./FHEM/99_myUtils.pm (105)
2024.02.01 09:53:48 1:     main::addLog                        called by (eval 28821) (1)
2024.02.01 09:53:48 1:     (eval)                              called by fhem.pl (1177)
2024.02.01 09:53:48 1:     main::AnalyzePerlCommand            called by fhem.pl (1206)
2024.02.01 09:53:48 1:     main::AnalyzeCommand                called by fhem.pl (1133)
2024.02.01 09:53:48 1:     main::AnalyzeCommandChain           called by ./FHEM/01_FHEMWEB.pm (2863)
2024.02.01 09:53:48 1:     main::FW_fC                         called by ./FHEM/01_FHEMWEB.pm (1025)
2024.02.01 09:53:48 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (609)
2024.02.01 09:53:48 1:     main::FW_Read                       called by fhem.pl (3985)
2024.02.01 09:53:48 1:     main::CallFn                        called by fhem.pl (786)

Heißt also eine readingsgroup verursacht das oder ?
3 HMUART (2 via ESP8266), 1 DUOFERN, 12 ESP8266, SolvisBen, GoodWE WR, RPI2 (Bullseye), ZWAVE, HM-Classic, und hoch zufrieden ...
Danke an alle, die was dazu beigetragen haben !!

Rampler

Ich habe jetzt mal den valueStyle der readingsGroup geändert:
{
if($READING eq "VOC" && $VALUE > 200 && $VALUE < 400) {'style="color:orange"'}
elsif($READING eq "VOC" && $VALUE > 400) {'style="color:red"'}

elsif($READING eq "co2" && $VALUE > 1500 && $VALUE < 2000) {'style="color:orange"'}
elsif($READING eq "co2" && $VALUE > 2000) {'style="color:red"'}

#elsif($READING eq "Voltage" && $VALUE > 11.5 && $VALUE < 12) {'style="color:orange"'}
#elsif($READING eq "Voltage" && $VALUE < 11.5) {'style="color:red"'}
}

Die ausgesternten zwei Zeilen verursachen wohl das Problem.
Ist schon mal ein guter Hinweis.

Wie kann ich denn die Abfrage ändern, dass das << addLog nicht mehr stört ?

VG Klaus

@betateilchen
Danke für den Hinweis ..
3 HMUART (2 via ESP8266), 1 DUOFERN, 12 ESP8266, SolvisBen, GoodWE WR, RPI2 (Bullseye), ZWAVE, HM-Classic, und hoch zufrieden ...
Danke an alle, die was dazu beigetragen haben !!

betateilchen

#4
Zitat von: Rampler am 01 Februar 2024, 10:53:38Wie kann ich denn die Abfrage ändern, dass das << addLog nicht mehr stört ?

Gegenfrage: Welchen praktischen Nutzen bringt Dir der Zusatz "<< addLog" im Logfile?

Das Problem in Deiner readingsgroup entsteht ja nicht beim Auslesen des Logfiles, sondern die readingsGroup wird durch Dein "trigger..." zur Aktualisierung angestoßen. Und da ist halt der alphanumerische Anteil beim Wert des readings mit dabei.
Wenn Du das wirklich so machen möchtest, könntest Du per regex den numerischen Teil extrahieren.

Die einfachste Lösung wäre, den sinnfreien Zusatz <<addLog einfach wegzulassen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Rampler

JA klar, warum denn eigentlich nicht.

==> Schon ist Ruhe
3 HMUART (2 via ESP8266), 1 DUOFERN, 12 ESP8266, SolvisBen, GoodWE WR, RPI2 (Bullseye), ZWAVE, HM-Classic, und hoch zufrieden ...
Danke an alle, die was dazu beigetragen haben !!