FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: Dr. Boris Neubert am 10 August 2019, 15:12:59

Titel: "Uncaught TypeError: Cannot convert undefined or null to object" aufspüren
Beitrag von: Dr. Boris Neubert am 10 August 2019, 15:12:59
Hallo,

seit ich FHEM mit RSS hier auf einem Raspberry Pi 2B mit original Raspberry-Display laufen lasse, plagt mich ein Problem, das ich nun soweit eingrenzen konnte:

Auf dem Raspberry-Desktop läuft der Chromium-Browser im Vollbild und zeigt über RSS mit HTML durchlaufend Bilder mit überblendeten Informationen zum Wetter und zu Terminen. Regelmäßig etwa einmal pro Tag bleibt der Durchlauf hängen. Im Chromium-Browser-Log steht dann:

[820:820:0810/124554.251890:INFO:CONSOLE(10)] "Uncaught TypeError: Cannot convert undefined or null to object", source: http://localhost:8083/fhem/rss/pipad.html (10)


pipad.html enthält

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>pipad</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"/>
<script type="text/javascript" src="/fhem/pgm2/RSS.js"></script>
</head>
<body data-confirmDelete='1' data-confirmJSError='1' data-addHtmlTitle='1' data-styleData='' data-availableJs='iconLabel,iconButtons,colorpicker,iconSwitch,fbcalllist,weekprofile,knob,readingsGroup,sortable,uzsu,iconRadio,readingsHistory' data-webName='WEB ' topmargin="0" leftmargin="0" margin="0" padding="0"  style="overflow:hidden">
<div id="rss_pipad" style="z-index:1;" >
<img id="img0" src="http://pipad.rs65.neubert-volmar.de:8083/fhem/rss/pipad.jpg" usemap="#map" onload="setTimeout(function(){reloadImage('img0')},15*1000);" onerror="setTimeout(function(){reloadImage('img0')},15*1000);"/>
<map name="map" id="map">
<area shape="rect" coords="5,5,45,45" href="http://localhost:8083/fhem" target="_top"/>
</map>
</div>

</body>
</html>


wobei Zeile 10 diese hier ist (alle 15 Sekunden wird das :

<img id="img0" src="http://pipad.rs65.neubert-volmar.de:8083/fhem/rss/pipad.jpg" usemap="#map" onload="setTimeout(function(){reloadImage('img0')},15*1000);" onerror="setTimeout(function(){reloadImage('img0')},15*1000);"/>



Das einzige Javascript, aus dem das Problem kommen kann, ist reloadImage() in fhem/www/pgm2/RSS.js. Nun habe ich in RSS.js schon ein try-catch eingebaut:

// reload image with id
function reloadImage(id) {
  try {
    // we use a dummy query to trick the browser into reloading the image
    var d = new Date();
    var q = '?t=' + d.getTime();
    var image = document.getElementById(id);
    var url = image.getAttribute('src');
    image.setAttribute('src', url.replace(/\?.*/,'') + q );
  } catch(err) {
    console.log("FHEM RSS Error: "+err);
  }
}


Der Fehler kommt aber dennoch und der Output von console.log() steht auch nicht im Chromium-Browser-Log.

Wer schafft es, mir auf die Sprünge zu helfen, was die Quelle der Exception sein kann?

Vielen Dank für Eure Gedanken.
Boris
Titel: Antw:"Uncaught TypeError: Cannot convert undefined or null to object" aufspüren
Beitrag von: rudolfkoenig am 10 August 2019, 15:45:43
Ich tippe auf einem Chromim Bug auf ARM Hardware.
Ich wuerde reloadImage mit einem weiteren Attribut mitteilen, von wo es aufgerufen wurde (onload/onerror), und auch im Normalfall mehrere console.log Zeilen einbauen.
15-20 Tausend Zeilen in der Console sollte ein RPI noch verkraften.
Titel: Antw:"Uncaught TypeError: Cannot convert undefined or null to object" aufspüren
Beitrag von: Dr. Boris Neubert am 11 August 2019, 15:49:17
Danke, Rudi. Schreibe jetzt vor und nach jeder Zeile in RSS.js ins Log und logge auch die Quelle mit. Mal sehen, an welcher Stelle er aussteigt.
Titel: Antw:"Uncaught TypeError: Cannot convert undefined or null to object" aufspüren
Beitrag von: Dr. Boris Neubert am 12 August 2019, 18:37:25
Hallo,

hier RSS.js mit Logging:

// reload image with id
function reloadImage(id,quelle) {
  try {
    console.log("RSS 1 Quelle: "+quelle);
    // we use a dummy query to trick the browser into reloading the image
    var d = new Date();
    console.log("RSS 2");
    var q = '?t=' + d.getTime();
    console.log("RSS 3 Date: "+q);
    var image = document.getElementById(id);
    console.log("RSS 4");
    var url = image.getAttribute('src');
    console.log("RSS 5 url: "+url);
    image.setAttribute('src', url.replace(/\?.*/,'') + q );
    console.log("RSS 6");
  } catch(err) {
    console.log("FHEM RSS Error: "+err);
  }
}



Das Debugging zeigt, dass die Seite pipad.html schon absemmelt, bevor das RSS.js gestartet wird:

[1132:1202:0811/230922.322392:VERBOSE1:network_delegate.cc(32)] NetworkDelegate::NotifyBeforeURLRequest: http://example.com:8083/fhem/rss/pipad.jpg?t=1565557762292
[1132:1202:0811/230922.322725:VERBOSE1:network_delegate.cc(32)] NetworkDelegate::NotifyBeforeURLRequest: http://example.com:8083/fhem/rss/pipad.jpg?t=1565557762292
[820:820:0811/230937.949191:INFO:CONSOLE(4)] "RSS 1 Quelle: onload", source: http://example.com:8083/fhem/pgm2/RSS.js (4)
[820:820:0811/230937.949695:INFO:CONSOLE(7)] "RSS 2", source: http://example.com:8083/fhem/pgm2/RSS.js (7)
[820:820:0811/230937.950041:INFO:CONSOLE(9)] "RSS 3 Date: ?t=1565557777947", source: http://example.com:8083/fhem/pgm2/RSS.js (9)
[820:820:0811/230937.951377:INFO:CONSOLE(11)] "RSS 4", source: http://example.com:8083/fhem/pgm2/RSS.js (11)
[820:820:0811/230937.951890:INFO:CONSOLE(13)] "RSS 5 url: http://example.com:8083/fhem/rss/pipad.jpg?t=1565557762292", source: http://example.com:8083/fhem/pgm2/RSS.js (13)
[820:820:0811/230937.952260:INFO:CONSOLE(15)] "RSS 6", source: http://example.com:8083/fhem/pgm2/RSS.js (15)
[1132:1202:0811/230937.987153:VERBOSE1:network_delegate.cc(32)] NetworkDelegate::NotifyBeforeURLRequest: http://example.com:8083/fhem/rss/pipad.jpg?t=1565557777947
[1132:1202:0811/230937.987636:VERBOSE1:network_delegate.cc(32)] NetworkDelegate::NotifyBeforeURLRequest: http://example.com:8083/fhem/rss/pipad.jpg?t=1565557777947
[820:820:0811/230953.561769:INFO:CONSOLE(4)] "RSS 1 Quelle: onload", source: http://example.com:8083/fhem/pgm2/RSS.js (4)
[820:820:0811/230953.563172:INFO:CONSOLE(7)] "RSS 2", source: http://example.com:8083/fhem/pgm2/RSS.js (7)
[820:820:0811/230953.563932:INFO:CONSOLE(9)] "RSS 3 Date: ?t=1565557793560", source: http://example.com:8083/fhem/pgm2/RSS.js (9)
[820:820:0811/230953.564341:INFO:CONSOLE(11)] "RSS 4", source: http://example.com:8083/fhem/pgm2/RSS.js (11)
[820:820:0811/230953.564604:INFO:CONSOLE(13)] "RSS 5 url: http://example.com:8083/fhem/rss/pipad.jpg?t=1565557777947", source: http://example.com:8083/fhem/pgm2/RSS.js (13)
[820:820:0811/230953.569313:INFO:CONSOLE(15)] "RSS 6", source: http://example.com:8083/fhem/pgm2/RSS.js (15)
[1132:1202:0811/230953.585007:VERBOSE1:network_delegate.cc(32)] NetworkDelegate::NotifyBeforeURLRequest: http://example.com:8083/fhem/rss/pipad.jpg?t=1565557793560
[1132:1202:0811/230953.585322:VERBOSE1:network_delegate.cc(32)] NetworkDelegate::NotifyBeforeURLRequest: http://example.com:8083/fhem/rss/pipad.jpg?t=1565557793560
[820:820:0811/231009.185439:INFO:CONSOLE(4)] "RSS 1 Quelle: onload", source: http://example.com:8083/fhem/pgm2/RSS.js (4)
[820:820:0811/231009.186791:INFO:CONSOLE(7)] "RSS 2", source: http://example.com:8083/fhem/pgm2/RSS.js (7)
[820:820:0811/231009.187308:INFO:CONSOLE(9)] "RSS 3 Date: ?t=1565557809181", source: http://example.com:8083/fhem/pgm2/RSS.js (9)
[820:820:0811/231009.187538:INFO:CONSOLE(11)] "RSS 4", source: http://example.com:8083/fhem/pgm2/RSS.js (11)
[820:820:0811/231009.187750:INFO:CONSOLE(13)] "RSS 5 url: http://example.com:8083/fhem/rss/pipad.jpg?t=1565557793560", source: http://example.com:8083/fhem/pgm2/RSS.js (13)
[820:820:0811/231009.187974:INFO:CONSOLE(15)] "RSS 6", source: http://example.com:8083/fhem/pgm2/RSS.js (15)
[1132:1202:0811/231009.201414:VERBOSE1:network_delegate.cc(32)] NetworkDelegate::NotifyBeforeURLRequest: http://example.com:8083/fhem/rss/pipad.jpg?t=1565557809181
[1132:1202:0811/231009.201742:VERBOSE1:network_delegate.cc(32)] NetworkDelegate::NotifyBeforeURLRequest: http://example.com:8083/fhem/rss/pipad.jpg?t=1565557809181
[820:820:0811/231009.751782:INFO:CONSOLE(10)] "Uncaught TypeError: Cannot convert undefined or null to object", source: http://example.com:8083/fhem/rss/pipad.html (10)



Um der Idee eines Browser-Bugs nachzugehen, habe ich jetzt diese ältere Version vom Chromium-Browser installiert, die auf einem anderen Raspberry Pi seit 120 Tagen fehlerfrei durchrennt:

http://archive.raspberrypi.org/debian/pool/main/c/chromium-browser/chromium-browser_56.0.2924.84-0ubuntu0.14.04.1.1000_armhf.deb
(http://archive.raspberrypi.org/debian/pool/main/c/chromium-browser/chromium-browser_56.0.2924.84-0ubuntu0.14.04.1.1000_armhf.deb)

Dazu müssen auf jeden Fall noch chromium-browser-l10n rpi-chromium-mods scratch2 entfernt werden. Das Ganze ist übrigens auf Debian Buster.

Ich berichte, ob das Problem damit weggeht.

Viele Grüße
Boris

Titel: Antw:"Uncaught TypeError: Cannot convert undefined or null to object" aufspüren
Beitrag von: Dr. Boris Neubert am 15 August 2019, 15:57:15
RSS läuft seit 3 Tagen durch. Also lag's am Chromium-Browser. Danke für den Tipp, Rudi!

Problem gelöst.