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
Ein List des Devices?
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
falsches Device, das ist das richtige:
(von HIER (https://forum.fhem.de/index.php/topic,123506.msg1228084.html#msg1228084) 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}
Bist Du Dir bei dem userReadings sicher??
ja, wieso?
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
Sorry da war ich auf dem Holzweg .. da kann ich Dir nicht (im Moment) weiter helfen .. da müssen andere ran ...
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
Zitat von: betateilchen am 06 Januar 2024, 18:33:42...weil Du keine eindeutigen Readingnames definiert hast
Und wie definiert man eindeutige Readingsnamen?
matze1999
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.
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
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.