Debug Problem: PERL WARNING: Use of uninitialized value in sprintf at (eval 3518

Begonnen von chem, 20 Juni 2020, 22:23:14

Vorheriges Thema - Nächstes Thema

chem

Hallo,

ich habe nach 3-Jahren (never touch a running System) ein großes Update gewagt, von Raspi 2 nach Raspi 4B und FHEM von 2017 zur aktuellen Version.

Am Anfang ging gar nichts, aber mittlerweile (mein freier Freitag und der halbe Samstag ist dabei draufgegangen) funktioniert wieder alles.

Allerdings bleibt ein Problem: Es tauchen jede Menge PERL WARNINGS im log-file auf. Dabei kann man zwei Arten unterscheiden

Typ I:

2020.06.20 13:32:55 1: PERL WARNING: Use of uninitialized value in sprintf at (eval 35183) line 1.
2020.06.20 13:32:55 1: stacktrace:
2020.06.20 13:32:55 1:     main::__ANON__                      called by (eval 35183) (1)
2020.06.20 13:32:55 1:     (eval)                              called by fhem.pl (4667)
2020.06.20 13:32:55 1:     main::evalStateFormat               called by fhem.pl (4770)
2020.06.20 13:32:55 1:     main::readingsEndUpdate             called by fhem.pl (4960)
2020.06.20 13:32:55 1:     main::readingsSingleUpdate          called by ./FHEM/00_MQTT.pm (548)
2020.06.20 13:32:55 1:     MQTT::__ANON__                      called by FHEM/GPUtils.pm (75)
2020.06.20 13:32:55 1:     GPUtils::GP_ForallClients           called by ./FHEM/00_MQTT.pm (560)
2020.06.20 13:32:55 1:     MQTT::Read                          called by fhem.pl (3793)
2020.06.20 13:32:55 1:     main::CallFn                        called by fhem.pl (762)


Typ II:

2020.06.20 13:32:55 1: PERL WARNING: Use of uninitialized value in sprintf at (eval 35185) line 1.
2020.06.20 13:32:55 1: stacktrace:
2020.06.20 13:32:55 1:     main::__ANON__                      called by (eval 35185) (1)
2020.06.20 13:32:55 1:     (eval)                              called by fhem.pl (4667)
2020.06.20 13:32:55 1:     main::evalStateFormat               called by fhem.pl (4770)
2020.06.20 13:32:55 1:     main::readingsEndUpdate             called by ./FHEM/98_expandJSON.pm (189)
2020.06.20 13:32:55 1:     main::expandJSON_decode             called by ./FHEM/98_expandJSON.pm (164)
2020.06.20 13:32:55 1:     main::__ANON__                      called by fhem.pl (3328)
2020.06.20 13:32:55 1:     main::HandleTimeout                 called by fhem.pl (684)


Wie kann ich das debuggen? Insbesondere die Typ I (MQTT)?

Beim Typ II kann ich mir vorstellen die expandJSONs (habe 10 Stück) solange zu deaktivieren bis die Meldung nicht mehr kommt, ist aber aufwändig weil die im Vergleich zum Typ I seltener kommen.

Ich würde mich über Tips sehr freuen....


Die expandJSON DEF's (Typ II) sehen z.B. so aus:

Waschmaschine2019.*:Sensor.*:.\{.*} (ENERGY_Voltage|ENERGY_Current|ENERGY_Power|ENERGY_Total|ENERGY_Today)

Der Sensor liefert solche Daten
Zitat{"Time":"2020-06-20T21:17:20","Epoch":1592684240,"ENERGY":{"TotalStartTime":"2019-10-25T13:26:26","Total":89.305,"Yesterday":0.000,"Today":0.000,"Period":0,"Power":0,"ApparentPower":0,"ReactivePower":0,"Factor":0.00,"Voltage":234,"Current":0.000}}



amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

chem


GHSolarMQTT                                NAME            GHSolarMQTT
                                           stateFormat     {sprintf("Phase 1: %.0f W Phase 2: %.0f W Phase 3: %.0f W", ReadingsVal($name,"ph1_Power","-1"), ReadingsVal($name,"ph2_Power","-1"), ReadingsVal($name,"ph3_Power","-1"))}
HausPowerMQTT                              NAME            HausPowerMQTT
                                           stateFormat     {sprintf("Total Energy: %.2f kWh, Power: %.2f W", ReadingsVal($name,"total_Energy","-1"), ReadingsVal($name,"current_Power","-1") )}
KellerKuehlPow                             NAME            KellerKuehlPow
                                           stateFormat     {sprintf("aktuell: %.1f W Tag: %.2f kW/h Total: %.1f kW/h", ReadingsVal ($name, "Power", undef), ReadingsVal($name,"Today",undef), ReadingsVal($name,"Total",undef))}
KuecheKuehlschrankPow                       NAME            KuecheKuehlschrankPow
                                           stateFormat     {sprintf("aktuell: %.1f W Tag: %.2f kW/h Total: %.1f kW/h", ReadingsVal ($name, "Power", undef), ReadingsVal($name,"Today",undef), ReadingsVal($name,"Total",undef))}
Luminea1                                   NAME            Luminea1
                                           stateFormat     {sprintf("State: %s, Power: %.0f", ReadingsVal("Luminea1","state",undef), ReadingsVal("Luminea1","ENERGY_Power",undef))  }
Luminea2                                   NAME            Luminea2
                                           stateFormat     {sprintf("State: %s, Power: %.0f", ReadingsVal("Luminea2","state",undef), ReadingsVal("Luminea2","ENERGY_Power",undef))  }
Luminea3                                   NAME            Luminea3
                                           stateFormat     {sprintf("State: %s, Power: %.0f", ReadingsVal("Luminea3","state",undef), ReadingsVal("Luminea3","ENERGY_Power",undef))  }
MQTTSolarPowerFlow                         NAME            MQTTSolarPowerFlow
                                           stateFormat     transmission-state
NetworkPow                                 NAME            NetworkPow
                                           stateFormat     {sprintf("aktuell: %.1f W Tag: %.2f kW/h Total: %.1f kW/h", ReadingsVal ($name, "Power", undef), ReadingsVal($name,"Today",undef), ReadingsVal($name,"Total",undef))}
SolarFronius                               NAME            SolarFronius
                                           stateFormat     STATE
SolarMeter                                 NAME            SolarMeter
                                           stateFormat     STATE
SolarPowerFlow                             NAME            SolarPowerFlow
                                           stateFormat     STATE
ThermArbKeller_WindowRec                       NAME            ThermArbKeller_WindowRec
                                           stateFormat     last:trigLast
ThermFlurKeller_WindowRec                       NAME            ThermFlurKeller_WindowRec
                                           stateFormat     last:trigLast
ThermKilian_WindowRec                       NAME            ThermKilian_WindowRec
                                           stateFormat     last:trigLast
ThermSchlaf_WindowRec                       NAME            ThermSchlaf_WindowRec
                                           stateFormat     last:trigLast
ThermSpitzLinks_WindowRec                       NAME            ThermSpitzLinks_WindowRec
                                           stateFormat     last:trigLast
ThermSpitzRechts_WindowRec                       NAME            ThermSpitzRechts_WindowRec
                                           stateFormat     last:trigLast
ThermTobi_WindowRec                        NAME            ThermTobi_WindowRec
                                           stateFormat     last:trigLast
ThermWaschKeller_WindowRec                       NAME            ThermWaschKeller_WindowRec
                                           stateFormat     last:trigLast
TrocknerPow                                NAME            TrocknerPow
                                           stateFormat     {sprintf("aktuell: %.1f W Tag: %.2f kW/h Total: %.1f kW/h State: %s", ReadingsVal ($name, "ENERGY_Power", undef), ReadingsVal($name,"ENERGY_Today",undef), ReadingsVal($name,"ENERGY_Total",undef), ReadingsVal($name,"state",undef))}
Waschmaschine2019Pow                       NAME            Waschmaschine2019Pow
                                           stateFormat     {sprintf("aktuell: %.1f W Tag: %.2f kW/h Total: %.1f kW/h State: %s", ReadingsVal ($name, "ENERGY_Power", undef), ReadingsVal($name,"ENERGY_Today",undef), ReadingsVal($name,"ENERGY_Total",undef), ReadingsVal($name,"state",undef))}
WaschmaschinePow                           NAME            WaschmaschinePow
                                           stateFormat     {sprintf("aktuell: %.1f W Tag: %.2f kW/h Total: %.1f kW/h", ReadingsVal ($name, "Power", undef), ReadingsVal($name,"Today",undef), ReadingsVal($name,"Total",undef))}
dust1Read                                  NAME            dust1Read
                                           stateFormat     {sprintf("PM2.5 %.1f µg/m3, PM10 %.1f µg/m3, Temperature %.1f C, rel. Luftfeuchte %.1f %%", ReadingsVal($name,"PM2dot5",0), ReadingsVal($name,"PM10",0), ReadingsVal($name,"Temperatur",0), ReadingsVal($name,"Luftfeuchte",0)) }
rssiRead                                   NAME            rssiRead
                                           stateFormat     {sprintf("RSSI12sec %.1f dB, RSSI_30sec %.1f dB, RSSI_Alert %s", ReadingsVal($name,"RSSI12SEC",0), ReadingsVal($name,"RSSI30SEC",0), ReadingsVal($name,"RSSIALERT",0)) }


Hmm, ob das die "undef" sein können?

amenomade

Ja, das ist bestimmt die undefs.
0 wäre auf jeden Fall besser. Das heisst aber, dass die entspr. Readings nicht mehr existieren. Das müsstest Du kontrollieren.

Genauso stat ReadingsVal wäre ReadingsNum besser, falls irgendwann eine Einheit o.ä. in den Readings kommt. Da wäre aber die Fehlermeldung anders ("Argument "xxxxx" isn't numeric in sprintf")
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

chem

Danke für die Hilfe! Die Ursache war, das ich bisher immer auch die State Variable geprinted habe, das scheint mit der aktuellen FHEM Version nicht mehr zu gehen und daher wurde undef geprintet und die Fehlermeldung generiert