Bei Stacktrace Invalid conversion in sprintf: end of string

Begonnen von stefanru, 31 Januar 2025, 20:39:22

Vorheriges Thema - Nächstes Thema

stefanru

Hi,

ich habe ein Problem.
Ich möchte gerne Stacktrace verwenden um einem Fehler auf den Grund zu kommen.
Ohne Stacktrace ist mein Log sauber.

Sobald ich den Stacktrace aktiviere bekomme ich eine menge Fehler.

Die Fehler kommen aus ReadingsGroups in denen ich eine Prozentzahl erzeuge.
Ich weiß, dass man % als %% angeben muss.

Ich habe folgende Versionen Probiert:
return sprintf("%.0f %%", $VALUE)
return sprintf("%.0f%%", $VALUE)
return sprintf("%.0f%%", $VALUE)." %"

Alles führt zu dem Stacktrace, nur wenn ich
return sprintf("%.0f Proz", $VALUE)
schreibe verschwindet der Stacktrace.

Ich vermute hier wird weiter unten nochmal etwas mit dem String gemacht.

Der Trace ist:
2025.01.31 20:37:27 1: PERL WARNING: Invalid conversion in sprintf: end of string at ./FHEM/33_readingsGroup.pm line 1450.
2025.01.31 20:37:27 1: stacktrace:
2025.01.31 20:37:27 1:     main::__ANON__                      called by ./FHEM/33_readingsGroup.pm (1447)
2025.01.31 20:37:27 1:     main::readingsGroup_Notify          called by ./FHEM/98_apptime.pm (178)
2025.01.31 20:37:27 1:     main::apptime_getTiming             called by ./FHEM/98_apptime.pm (138)
2025.01.31 20:37:27 1:     main::CallFn                        called by fhem.pl (3900)
2025.01.31 20:37:27 1:     main::DoTrigger                     called by fhem.pl (5017)
2025.01.31 20:37:27 1:     main::readingsEndUpdate             called by ./FHEM/98_fronius.pm (770)
2025.01.31 20:37:27 1:     main::fronius_Parse                 called by FHEM/HttpUtils.pm (755)
2025.01.31 20:37:27 1:     main::__ANON__                      called by fhem.pl (786)

Meine ReadingsGroup sieht so aus:
defmod pv.runge.rg readingsGroup InverterDummy:PowerFlow_Load:r0\
InverterDummy:PowerFlow_PV:r0\
PV_Runge:PowerFlow_Site_P_PV:r0\
Symo:PowerFlow_Site_P_PV:r0 \
InverterDummy:PowerFlow_Akku:r0\
PV_Runge:PowerFlow_Inverters_1_SOC\
InverterDummy:PowerFlow_Grid:r0\
InverterDummy:Energy_Total_Real:r0\
PV_Runge:PowerFlow_Site_E_Total:r0\
Symo:PowerFlow_Site_E_Total:r0
attr pv.runge.rg alias Verbrauch
attr pv.runge.rg alwaysTrigger 1
attr pv.runge.rg cellStyle { \
"r:1,c:0"=>'style="font-weight:bold;;text-align:right;;"',\
"r:1,c:1"=>'style="font-weight:bold;;text-align:right;;"',\
"r:2,c:0"=>'style="font-weight:bold;;text-align:right;;"',\
"r:2,c:1"=>'style="font-weight:bold;;text-align:right;;"',\
"r:3,c:0"=>'style="font-weight:bold;;text-align:right;;"',\
"r:3,c:1"=>'style="font-weight:bold;;text-align:right;;"',\
"r:4,c:0"=>'style="font-weight:bold;;text-align:right;;"',\
"r:4,c:1"=>'style="font-weight:bold;;text-align:right;;"',\
"r:5,c:0"=>'style="font-weight:bold;;text-align:right;;"',\
"r:5,c:1"=>'style="font-weight:bold;;text-align:right;;"',\
"r:6,c:0"=>'style="font-weight:bold;;text-align:right;;"',\
"r:6,c:1"=>'style="font-weight:bold;;text-align:right;;"',\
"r:7,c:0"=>'style="font-weight:bold;;text-align:right;;"',\
"r:7,c:1"=>'style="font-weight:bold;;text-align:right;;"',\
"r:8,c:0"=>'style="font-weight:bold;;text-align:right;;"',\
"r:8,c:1"=>'style="font-weight:bold;;text-align:right;;"',\
"r:9,c:0"=>'style="font-weight:bold;;text-align:right;;"',\
"r:9,c:1"=>'style="font-weight:bold;;text-align:right;;"',\
"r:10,c:0"=>'style="font-weight:bold;;text-align:right;;"',\
"r:10,c:1"=>'style="font-weight:bold;;text-align:right;;"',\
}
attr pv.runge.rg group PV_Runge
attr pv.runge.rg icon stromzaehler_icon
attr pv.runge.rg mapping {\
if ($ROW == 1) {return "Verbrauch Aktuell "}\
elsif ($ROW == 2) {return "PV Erzeugung"}\
elsif ($ROW == 3) {return "PV Erzeugung Gen24"}\
elsif ($ROW == 4) {return "PV Erzeugung Symo"}\
elsif ($ROW == 5) {return "Batterieentladung "}\
elsif ($ROW == 6) {return "Batterie "}\
elsif ($ROW == 7) {return "Netzbezug "}\
elsif ($ROW == 8) {return "Erzeugt"}\
elsif ($ROW == 9) {return "Erzeugt Gen24"}\
elsif ($ROW == 10) {return "Erzeugt Symo"}\
}
attr pv.runge.rg noheading 1
attr pv.runge.rg notime 1
attr pv.runge.rg room Strom
attr pv.runge.rg valueFormat {\
if ($READING =~ m/Site_E/) \
 {return sprintf("%.0f kW", $VALUE/1000 )}\
elsif ($READING =~ m/Total_Real/) \
 {return sprintf("%.0f kW", $VALUE)}\
elsif ($READING =~ m/PowerFlow_Inverters_1_SOC/ or $READING =~ m/Autonomy/ or $READING =~ m/SelfConsumption/)  \
  {return sprintf("%.0f %%", $VALUE)}\
elsif ($READING =~ m/Temperature/) \
 {return sprintf("%.2f C", $VALUE )}\
else\
 {\
   if ($VALUE =~ /^\d+\.?\d*$/) { \
    return sprintf("%.0f W", $VALUE);;\
   } else {\
    return $VALUE;; \
   }\
 }\
}

Kann mir jemand helfen?

Danke und Gruß,
Stefan

stefanru

Ok,

habe eine Lösung gefunden, aber nur mit HTML Steuerzeichen.
So kommt nichts im Stacktrace:
return sprintf("%.2f %", $VALUE)

Trotzdem würde mich eine Erklärung freuen.

Gruß,
Stefan