[gelöst] 98_HTTPMOD.pm PERL WARNING

Begonnen von matze1999, 06 Januar 2024, 15:58:42

Vorheriges Thema - Nächstes Thema

matze1999

Hallo, ich nutze HTTPMOD und habe regelmäßig diese Perl Warnungen im Log:

2024.01.06 15:50:06 1: PERL WARNING: Use of uninitialized value $val in concatenation (.) or string at ./FHEM/98_HTTPMOD.pm line 1705.
2024.01.06 15:50:06 1: stacktrace:
2024.01.06 15:50:06 1:     main::__ANON__                      called by ./FHEM/98_HTTPMOD.pm (1705)
2024.01.06 15:50:06 1:     HTTPMOD::ExtractReading             called by ./FHEM/98_HTTPMOD.pm (2439)
2024.01.06 15:50:06 1:     HTTPMOD::ReadCallback               called by FHEM/HttpUtils.pm (755)
2024.01.06 15:50:06 1:     main::__ANON__                      called by fhem.pl (783)
2024.01.06 15:50:06 1: PERL WARNING: Use of uninitialized value $val in unpack at ./FHEM/98_HTTPMOD.pm line 1706.
2024.01.06 15:50:06 1: stacktrace:
2024.01.06 15:50:06 1:     main::__ANON__                      called by ./FHEM/98_HTTPMOD.pm (1706)
2024.01.06 15:50:06 1:     HTTPMOD::ExtractReading             called by ./FHEM/98_HTTPMOD.pm (2439)
2024.01.06 15:50:06 1:     HTTPMOD::ReadCallback               called by FHEM/HttpUtils.pm (755)
2024.01.06 15:50:06 1:     main::__ANON__                      called by fhem.pl (783)
2024.01.06 15:50:06 1: PERL WARNING: Use of uninitialized value $val in concatenation (.) or string at ./FHEM/98_HTTPMOD.pm line 1705.
2024.01.06 15:50:06 1: stacktrace:
2024.01.06 15:50:06 1:     main::__ANON__                      called by ./FHEM/98_HTTPMOD.pm (1705)
2024.01.06 15:50:06 1:     HTTPMOD::ExtractReading             called by ./FHEM/98_HTTPMOD.pm (2439)
2024.01.06 15:50:06 1:     HTTPMOD::ReadCallback               called by FHEM/HttpUtils.pm (755)
2024.01.06 15:50:06 1:     main::__ANON__                      called by fhem.pl (783)
2024.01.06 15:50:06 1: PERL WARNING: Use of uninitialized value $val in unpack at ./FHEM/98_HTTPMOD.pm line 1706.
2024.01.06 15:50:06 1: stacktrace:
2024.01.06 15:50:06 1:     main::__ANON__                      called by ./FHEM/98_HTTPMOD.pm (1706)
2024.01.06 15:50:06 1:     HTTPMOD::ExtractReading             called by ./FHEM/98_HTTPMOD.pm (2439)
2024.01.06 15:50:06 1:     HTTPMOD::ReadCallback               called by FHEM/HttpUtils.pm (755)
2024.01.06 15:50:06 1:     main::__ANON__                      called by fhem.pl (783)
2024.01.06 15:50:06 1: PERL WARNING: Use of uninitialized value $val in concatenation (.) or string at ./FHEM/98_HTTPMOD.pm line 1705.
2024.01.06 15:50:06 1: stacktrace:
2024.01.06 15:50:06 1:     main::__ANON__                      called by ./FHEM/98_HTTPMOD.pm (1705)
2024.01.06 15:50:06 1:     HTTPMOD::ExtractReading             called by ./FHEM/98_HTTPMOD.pm (2439)
2024.01.06 15:50:06 1:     HTTPMOD::ReadCallback               called by FHEM/HttpUtils.pm (755)
2024.01.06 15:50:06 1:     main::__ANON__                      called by fhem.pl (783)
2024.01.06 15:50:06 1: PERL WARNING: Use of uninitialized value $val in unpack at ./FHEM/98_HTTPMOD.pm line 1706.
2024.01.06 15:50:06 1: stacktrace:
2024.01.06 15:50:06 1:     main::__ANON__                      called by ./FHEM/98_HTTPMOD.pm (1706)
2024.01.06 15:50:06 1:     HTTPMOD::ExtractReading             called by ./FHEM/98_HTTPMOD.pm (2439)
2024.01.06 15:50:06 1:     HTTPMOD::ReadCallback               called by FHEM/HttpUtils.pm (755)
2024.01.06 15:50:06 1:     main::__ANON__                      called by fhem.pl (783)

Was kann ich tun, um das zu verhindern, oder einfach ignorieren?

matze1999

Wernieman

- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

matze1999

Hallo,

ich bin nicht ganz sicher, aber ich denke das hier:

defmod VVO HTTPMOD none 0
attr VVO devStateStyle style="text-align:left;;font-weight:bold;;"
attr VVO get01Name Niederwaldplatz
attr VVO get01Regex (\[\[.*\]\]).*
attr VVO get01URL http://widgets.vvo-online.de/abfahrtsmonitor/Abfahrten.do?ort=Dresden&hst=Niederwaldplatz&vz=0&lim=10
attr VVO get02Name Altenberger
attr VVO get02Regex (\[\[.*\]\]).*
attr VVO get02URL http://widgets.vvo-online.de/abfahrtsmonitor/Abfahrten.do?ort=Dresden&hst=Altenberger%20Str&vz=0&lim=10
attr VVO get03Name Heinrich-Schütz-Str
attr VVO get03Regex (\[\[.*\]\]).*
attr VVO get03URL http://widgets.vvo-online.de/abfahrtsmonitor/Abfahrten.do?ort=Dresden&hst=Heinrich-Schütz-Str&vz=0&lim=10
attr VVO room System
attr VVO timeout 30


matze1999

matze1999

#3
falsches Device, das ist das richtige:

(von HIER kopiert)

defmod Solar HTTPMOD http://user:Passwort@192.168.2.15/status.html 60
attr Solar devStateStyle style="text-align:left;;font-weight:bold;;"
attr Solar group Schalter-Schalter
attr Solar icon sani_solar
attr Solar reading01Name current_power
attr Solar reading01Regex var webdata_now_p = "([+-]?(?=\.\d|\d)(?:\d+)?(?:\.?\d*))(?:[eE]([+-]?\d+))?"
attr Solar reading02Name yield_today
attr Solar reading02Regex var webdata_today_e = "([+-]?(?=\.\d|\d)(?:\d+)?(?:\.?\d*))(?:[eE]([+-]?\d+))?"
attr Solar reading03Name total_yield
attr Solar reading03Regex var webdata_total_e = "([+-]?(?=\.\d|\d)(?:\d+)?(?:\.?\d*))(?:[eE]([+-]?\d+))?"
attr Solar room Obach,Schalter
attr Solar stateFormat Aktuelle Leistung: current_power-1 W;; Tagesproduktion: yield_today-1 kWh;; Gesamtproduktion: total_yield-1 kWh
attr Solar userReadings Betrag:total_yield-1.* {round(ReadingsNum($NAME,'total_yield-1',0)*0.4809,2)},\
GesamtBetrag:total_yield-1.* {ReadingsNum('Solar','Betrag',0)-ReadingsNum('MQTT2_DVES_5585FD','Betrag',0)},\
FilterLK13BE_Power_total_in:LK13BE_Power_total_in.* {(ReadingsNum($name,"LK13BE_Power_total_in",40) > 10000) ? ReadingsNum($name,"LK13BE_Power_total_in",0) : undef},\
FilterLK13BE_Power_total_in:LK13BE_Power_total_in.* {(ReadingsNum($name,"LK13BE_Power_total_in",40) < 0) ? ReadingsNum($name,"LK13BE_Power_total_in",0) : undef}

Wernieman

Bist Du Dir bei dem userReadings sicher??
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

matze1999


matze1999

hier ein Auszug aus dem zugehörigen Log:

2024-01-06_15:44:06 Solar current_power-1: 4
2024-01-06_15:44:06 Solar yield_today-1: 0.30
2024-01-06_15:44:06 Solar total_yield-1: 482.6
2024-01-06_15:45:06 Solar current_power-1: 4
2024-01-06_15:45:06 Solar yield_today-1: 0.30
2024-01-06_15:45:06 Solar total_yield-1: 482.6
2024-01-06_15:46:06 Solar current_power-1: 4
2024-01-06_15:46:06 Solar yield_today-1: 0.30
2024-01-06_15:46:06 Solar total_yield-1: 482.6
2024-01-06_15:47:06 Solar current_power-1: 4
2024-01-06_15:47:06 Solar yield_today-1: 0.30
2024-01-06_15:47:06 Solar total_yield-1: 482.6
2024-01-06_15:48:06 Solar current_power-1: 4
2024-01-06_15:48:06 Solar yield_today-1: 0.30
2024-01-06_15:48:06 Solar total_yield-1: 482.6
2024-01-06_15:48:32 MQTT2_DVES_5585FD LK13BE_Power_total_in: 382.3
2024-01-06_15:49:06 Solar current_power-1: 4
2024-01-06_15:49:06 Solar yield_today-1: 0.30
2024-01-06_15:49:06 Solar total_yield-1: 482.6
2024-01-06_15:50:06 Solar current_power-1: 4
2024-01-06_15:50:06 Solar yield_today-1: 0.30
2024-01-06_15:50:06 Solar total_yield-1: 482.6
2024-01-06_15:51:06 Solar current_power-1: 4
2024-01-06_15:51:06 Solar yield_today-1: 0.30
2024-01-06_15:51:06 Solar total_yield-1: 482.6
2024-01-06_15:52:06 Solar current_power-1: 4
2024-01-06_15:52:06 Solar yield_today-1: 0.30
2024-01-06_15:52:06 Solar total_yield-1: 482.6
2024-01-06_15:53:07 Solar current_power-1: 4
2024-01-06_15:53:07 Solar yield_today-1: 0.30
2024-01-06_15:53:07 Solar total_yield-1: 482.6
2024-01-06_15:53:32 MQTT2_DVES_5585FD LK13BE_Power_total_in: 382.3

matze1999

Wernieman

Sorry da war ich auf dem Holzweg .. da kann ich Dir nicht (im Moment) weiter helfen .. da müssen andere ran ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

betateilchen

#8
Die Meldung hängt vermutlich mit den sub-readings zusammen, die erzeugt werden, weil Du keine eindeutigen Readingnames definiert hast.
Eigentlich kannst Du die Warnungen ignorieren, weil sie lediglich im Rahmen von Logausgaben im verbose level 5 relevant sind
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

matze1999

Zitat von: betateilchen am 06 Januar 2024, 18:33:42...weil Du keine eindeutigen Readingnames definiert hast

Und wie definiert man eindeutige Readingsnamen?

matze1999

betateilchen

Um das zu beantworten, müsste man den Inhalt des htmlBody kennen, den Dein device liefert.

In diesen Werten

2024-01-06_15:44:06 Solar current_power-1: 4
2024-01-06_15:44:06 Solar yield_today-1: 0.30
2024-01-06_15:44:06 Solar total_yield-1: 482.6

deutet das -1 darauf hin, dass bei der Auswertung ein array im Spiel ist und HTTPMOD versucht, darin jeweils mehrere readings (z.B. current_power) zu finden, die dann automatisch durchnummeriert werden.
Das ist das, was ich mit "nicht eindeutige Readingnames" meinte.

Ein array kann natürlich auch nur ein Element enthalten. Wenn das so ist (bei Dir gibt es offenbar nur ...-1 readings), müsste man schauen, ob man die regex für die Erzeugung des readings entsprechend anpassen kann.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

matze1999

Hallo,

meinst du das:

<div id="up_1_div">
        <div class="lab_l2" id="tx1">Inverter serial number</div>
                <div class="lab_r2" id="webdata_sn">123456789                             </div>
        <div class="cl"></div>
        <div class="line"></div>
        <div class="lab_l2" id="tx2">Firmware version (main)</div>
                <div class="lab_r2" id="webdata_msvn">                                       </div>
        <div class="cl"></div>
        <div class="line"></div>
        <div class="lab_l2" id="tx3">Firmware version (slave)</div>
                <div class="lab_r2" id="webdata_ssvn">                                       </div>
        <div class="cl"></div>
        <div class="line"></div>
        <div class="lab_l2" id="tx4">Inverter model</div>
                <div class="lab_r2" id="webdata_pv_type">---</div>
        <div class="cl"></div>
        <div class="line"></div>
        <div class="lab_l2" id="tx5">Rated power</div>
                <div class="lab_r2" id="webdata_rate_p">--- W</div>
        <div class="cl"></div>
        <div class="line"></div>
        <div class="lab_l2" style="color:#666666;font-weight:bold;" id="tx6">Current power</div>
                <div class="lab_r2" id="webdata_now_p" style="color:#666666;font-weight:bold;">192 W</div>
        <div class="cl"></div>
        <div class="line"></div>
        <div class="lab_l2" style="color:#666666;font-weight:bold;" id="tx7">Yield today</div>
                <div class="lab_r2" id="webdata_today_e" style="color:#666666;font-weight:bold;">0.10 kWh</div>
        <div class="cl"></div>
        <div class="line"></div>
        <div class="lab_l2" style="color:#666666;font-weight:bold;" id="tx8">Total yield</div>
                <div class="lab_r2" id="webdata_total_e" style="color:#666666;font-weight:bold;">484.0 kWh</div>
        <div class="cl"></div>
        <div class="line"></div>
        <div class="lab_l2" style="color:#666666;font-weight:bold;" id="tx9">Alerts</div>
                <div class="lab_r2" id="webdata_alarm" style="color:#666666;font-weight:bold;">---</div>
        <div class="cl"></div>
        <div class="line"></div>
        <div class="lab_l2" style="color:#666666;font-weight:bold;" id="tx10">Last updated</div>
                <div class="lab_r2" id="webdata_utime" style="color:#666666;font-weight:bold;">0</div>
        <div class="cl"></div>
        <div class="line"></div>
        </div>

matze1999

betateilchen

weiß ich nicht...

Aber wenn ich daraus den Wert für total-yield extrahieren wollte, würde ich als regex

tx8..[\s\S]+>(\d+\.\d+)
verwenden, um dann 484.0 als Ergebnis zu bekommen.

Deine umfangreichen readingxxRegex Konstrukte verstehe ich einfach nicht.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!