FHEM stürzt ab vs. SVG Plot zusenden lassen

Begonnen von heinzfo, 28 Februar 2019, 09:25:27

Vorheriges Thema - Nächstes Thema

heinzfo


Wenn ich mir SVG Plots zusenden lasse und das innerhalb von ca. 15min. nach neustart von FHEM stürzt FHEM ab "fhem is not running"
Das kommt nun bei zwei verschiedenen RPi3/FHEM vor.

Logfile:
2019.02.28 09:16:26 1: PERL WARNING: Use of uninitialized value $pm in pattern match (m//) at ./FHEM/98_SVG.pm line 1098.
2019.02.28 09:16:26 3: eval: {plotAsPng('SVG_FileLog_Sensor_01_Temp_1')}
2019.02.28 09:16:26 1: PERL WARNING: Use of uninitialized value $pm in string eq at ./FHEM/98_SVG.pm line 1151.
2019.02.28 09:16:26 3: eval: {plotAsPng('SVG_FileLog_Sensor_01_Temp_1')}
2019.02.28 09:16:26 1: PERL WARNING: Use of uninitialized value $svgdata in substitution (s///) at ./FHEM/98_SVG.pm line 2430.
2019.02.28 09:16:26 3: eval: {plotAsPng('SVG_FileLog_Sensor_01_Temp_1')}
2019.02.28 09:16:26 1: PERL WARNING: Use of uninitialized value $svgdata in substitution (s///) at ./FHEM/98_SVG.pm line 2431.
2019.02.28 09:16:26 3: eval: {plotAsPng('SVG_FileLog_Sensor_01_Temp_1')}
2019.02.28 09:16:26 1: PERL WARNING: Use of uninitialized value in subroutine entry at /usr/lib/arm-linux-gnueabihf/perl5/5.24/Image/LibRSVG.pm line 78.
2019.02.28 09:16:26 3: eval: {plotAsPng('SVG_FileLog_Sensor_01_Temp_1')}


Gibt es hier eine Lösung?

Grüße
Heinz

rudolfkoenig

Einen Absturz konnte ich nicht feststellen, nur die gezeigten WARNINGs.
Diese kommen, weil plotAsPng vor dem ersten Aufruf einer FHEMWEB-Seite gestartet wurde.
Habs gefixt und eingecheckt.


heinzfo

Hallo Rudi

Danke das Du dich um das Thema kümmerst!

Nach FHEM neustart erst die FHEMWEB instanz aufzurufen lässt den Fehler nicht auftreten.

Aber auch nach Update heute tritt der Fehler leider immer noch auf, FHEM stürzt ab wie anfangs beschrieben.
ZitatWenn ich mir SVG Plots zusenden lasse und das innerhalb von ca. 15min. nach neustart von FHEM stürzt FHEM ab "fhem is not running"
Das kommt nun bei zwei verschiedenen RPi3/FHEM vor.

Logfile:

2019.03.03 10:28:44 1: PERL WARNING: Use of uninitialized value $ps in substitution (s///) at ./FHEM/98_SVG.pm line 856.
2019.03.03 10:28:44 1: PERL WARNING: Argument "crop" isn't numeric in subtraction (-) at ./FHEM/98_SVG.pm line 1372.
2019.03.03 10:28:44 1: PERL WARNING: Use of uninitialized value $oh in subtraction (-) at ./FHEM/98_SVG.pm line 1373.
2019.03.03 10:28:44 1: PERL WARNING: Use of uninitialized value $oh in concatenation (.) or string at ./FHEM/98_SVG.pm line 1395.
2019.03.03 10:28:44 1: PERL WARNING: Use of uninitialized value $oh in concatenation (.) or string at ./FHEM/98_SVG.pm line 1421.
2019.03.03 10:28:44 1: PERL WARNING: Use of uninitialized value $oh in division (/) at ./FHEM/98_SVG.pm line 1450.
2019.03.03 10:28:44 1: PERL WARNING: Use of uninitialized value $oh in division (/) at ./FHEM/98_SVG.pm line 1460.

(process:17489): GdkPixbuf-CRITICAL **: gdk_pixbuf_save_to_callbackv: assertion 'GDK_IS_PIXBUF (pixbuf)' failed


Vielleicht sollte ich der Vollständigkei halber erwähnen das ich FHEM update/restart per Telegram auslöse,
und deshalb die FHEMWEB instanz erstmal nich im Spiel ist.

Danke
Heinz

rudolfkoenig

Mein Testfall hat plotSize explizit gesetzt, deswegen hat es bei mir funktioniert.
Ohne plotSize reisst libRsvg perl runter mit Segmentation Fault.
Habs gefixt (die Voreinstellung ist 800,400) und eingecheckt.

heinzfo


andies

#5
Problem gelöst, siehe ganz unten.

Hallo Rudi, ich hänge mich mal hier an, weil ich eine identische Fehlermeldung habe, die ich nicht verstehe - die
aber, das muss ich zugeben, mit meiner Eigenprogrammierung zusammenhängt und ich verstehe nur zum Teil, was ich da tue (das hier, eCharts). Bis gestern konnte ich meine SVGs rendern, genau so wie es in 98_SVG.pm geschieht:
$svgdata =~ s/<\/svg>/<polyline opacity="0" points="0,0 $w,$h"\/><\/svg>/;
# Forum #32791,#116138: some lib versions cannot parse complex CSS selectors
$svgdata =~ s/\.SVGplot\./\./g if(AttrVal($name, "plotAsPngFix", 0));
$svgdata = Encode::decode("UTF-8", $svgdata) if(!$unicodeEncoding); #129693
eval {
    require Image::LibRSVG;
    my $rsvg = new Image::LibRSVG();
    $rsvg->loadImageFromString($svgdata);
    $pngImg = $rsvg->getImageBitmap(); # <== hier gibt es ein Problem
};
Seit heute gibt es ein Problem und ich kriege nicht mehr heraus, was ich da geändert habe, doch habe ich - siehe nächsten Post. Die entsprechenden Bibliotheken sind alle installiert. Das $svgdata, das übergeben wird, wird (wenn man nicht in Bitmap umwandelt, sondern an den Browser schickt) angezeigt und sieht auch "vernünftig" aus, in einem Beispiel so hier:
<svg width="1000" height="400" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" baseProfile="full" viewBox="0 0 1000 400">
<rect width="1000" height="400" x="0" y="0" fill="none"></rect>
<path d="M100 330.5L900 330.5" fill="transparent" stroke="#E0E6F1" class="zr0-cls-0"></path>
<path d="M100 291.5L900 291.5" fill="transparent" stroke="#E0E6F1" class="zr0-cls-0"></path>
<path d="M100 235.5L900 235.5" fill="transparent" stroke="#E0E6F1" class="zr0-cls-0"></path>
<path d="M100 179.5L900 179.5" fill="transparent" stroke="#E0E6F1" class="zr0-cls-0"></path>
<path d="M100 123.5L900 123.5" fill="transparent" stroke="#E0E6F1" class="zr0-cls-0"></path>
<path d="M100 68.5L900 68.5" fill="transparent" stroke="#E0E6F1" class="zr0-cls-0"></path>
<path d="M100 60.5L900 60.5" fill="transparent" stroke="#E0E6F1" class="zr0-cls-0"></path>
<text dominant-baseline="central" text-anchor="middle" style="font-size:12px;font-family:sans-serif;" y="-6" transform="translate(100 45)" fill="#6E7079">Humidity</text>
<text dominant-baseline="central" text-anchor="middle" style="font-size:12px;font-family:sans-serif;" y="-6" transform="translate(900 45)" fill="#6E7079">Temperatur</text>
<path d="M100 330.5L900 330.5" fill="transparent" stroke="#6E7079" stroke-linecap="round" class="zr0-cls-0"></path>
<text dominant-baseline="central" text-anchor="start" style="font-size:12px;font-family:sans-serif;" transform="translate(915 330)" fill="#6E7079">Zeit</text>
<path d="M249.5 330L249.5 335" fill="transparent" stroke="#6E7079" class="zr0-cls-0"></path>
<path d="M399.5 330L399.5 335" fill="transparent" stroke="#6E7079" class="zr0-cls-0"></path>
<path d="M549.5 330L549.5 335" fill="transparent" stroke="#6E7079" class="zr0-cls-0"></path>
<path d="M700.5 330L700.5 335" fill="transparent" stroke="#6E7079" class="zr0-cls-0"></path>
<path d="M850.5 330L850.5 335" fill="transparent" stroke="#6E7079" class="zr0-cls-0"></path>
<text dominant-baseline="central" text-anchor="start" style="font-size:12px;font-family:sans-serif;" transform="translate(908 330)" fill="#6E7079">36.5</text>
<text dominant-baseline="central" text-anchor="start" style="font-size:12px;font-family:sans-serif;" transform="translate(908 290.9504)" fill="#6E7079">40</text>
<text dominant-baseline="central" text-anchor="start" style="font-size:12px;font-family:sans-serif;" transform="translate(908 235.1653)" fill="#6E7079">45</text>
<text dominant-baseline="central" text-anchor="start" style="font-size:12px;font-family:sans-serif;" transform="translate(908 179.3802)" fill="#6E7079">50</text>
<text dominant-baseline="central" text-anchor="start" style="font-size:12px;font-family:sans-serif;" transform="translate(908 123.595)" fill="#6E7079">55</text>
<text dominant-baseline="central" text-anchor="start" style="font-size:12px;font-family:sans-serif;" transform="translate(908 67.8099)" fill="#6E7079">60</text>
<text dominant-baseline="central" text-anchor="middle" style="font: normal normal 12px sans-serif" y="6" transform="translate(248.9884 338)" fill="#6E7079">5</text>
<text dominant-baseline="central" text-anchor="middle" style="font: normal normal 12px sans-serif" y="6" transform="translate(399.2515 338)" fill="#6E7079">6</text>
<text dominant-baseline="central" text-anchor="middle" style="font: normal normal 12px sans-serif" y="6" transform="translate(549.5147 338)" fill="#6E7079">7</text>
<text dominant-baseline="central" text-anchor="middle" style="font: normal normal 12px sans-serif" y="6" transform="translate(699.7778 338)" fill="#6E7079">8</text>
<text dominant-baseline="central" text-anchor="middle" style="font: normal normal 12px sans-serif" y="6" transform="translate(850.041 338)" fill="#6E7079">9</text>
<g clip-path="url(#zr0-c0)">
<path d="M100 246.3L106.3 251.9L112.5 246.3L118.8 258.6L125.1 276.4L131.3 269.8L137.6 269.8L142.6 258.6L144.7 216.2L148.1 228.5L148.2 210.6L150.5 234L150.5 203.9L152.2 186.1L152.3 173.8L154.1 198.3L154.2 156L160.5 191.7L166.8 186.1L173 162.6L173.4 150.4L173.5 143.7L176.7 95.7L182.9 95.7L185 95.7L185 77.9L186.7 60L188.5 84.5L188.6 66.7L189.1 84.5L190 77.9L192 108L192.1 90.1L198.4 114.7L206.1 150.4L206.1 125.8L207.1 150.4L207.4 108L213.6 186.1L219.9 203.9L221.9 180.5L221.9 186.1L224.9 173.8L231.2 203.9L237.5 210.6L243.8 210.6L250 221.8L256.3 221.8L262.6 234L268.8 234L275.1 246.3L281.4 251.9L287.6 258.6L293.9 251.9L294.9 234L294.9 198.3L298.3 228.5L298.4 203.9L299.5 221.8L299.9 173.8L300.7 210.6L301.9 186.1L302.3 203.9L302.5 162.6L308.8 210.6L308.9 186.1L315.1 234L319.8 198.3L319.9 156L319.9 150.4L326.1 186.1L332.4 186.1L338.7 203.9L341.5 156L347.8 203.9L349.7 180.5L356 198.3L359 173.8L365.3 251.9L370.8 269.8L370.9 228.5L372.8 258.6L372.8 234L379.1 282L385.4 294.3L391.6 294.3L397.9 306.6L404.2 317.7L410.4 306.6L416.7 317.7L423 317.7L429.3 317.7L435.5 312.1L441.8 306.6L448 299.9L448.4 294.3L448.5 264.2L451.7 173.8L453.2 258.6L465.7 240.7L472 203.9L478.2 186.1L484.5 186.1L485.8 143.7L492 186.1L494.5 156L494.5 132.5L494.9 138.1L494.9 132.5L497 150.4L497.1 138.1L503.3 210.6L504.4 203.9L504.6 156L510.4 198.3L510.4 173.8L516.7 228.5L523 234L529.2 234L529.6 228.5L529.7 210.6L535.9 234L542.2 246.3L548.5 246.3L554.7 234L561 246.3L567.3 246.3L573.5 258.6L579.8 264.2L586.1 258.6L592.3 251.9L594.9 251.9L595.3 216.2L598.4 240.7L599 216.2L605.1 216.2L606.7 216.2L606.8 180.5L611.1 221.8L611.2 186.1L617.5 198.3L618.2 168.2L624.4 203.9L628.7 173.8L628.8 138.1L635.1 173.8L635.5 150.4L637 156L638.4 138.1L638.4 120.2L640.9 173.8L641 138.1L647 173.8L648.2 143.7L650.4 156L650.5 168.2L652 173.8L657.2 203.9L657.3 168.2L664.5 221.8L664.7 186.1L666.8 221.8L666.9 203.9L672.3 251.9L674.1 228.5L680.4 282L686.6 288.7L692.9 294.3L699.2 294.3L705.4 299.9L711.7 312.1L718 312.1L724.2 317.7L730.5 330L736.8 324.4L743 317.7L749.3 312.1L755.6 240.7L755.7 228.5L755.8 186.1L756.7 234L756.8 186.1L763.1 228.5L769.3 186.1L775.6 186.1L781.9 173.8L784.5 150.4L784.5 120.2L790.8 162.6L797.1 150.4L803.3 186.1L809.6 216.2L813.3 198.3L813.3 186.1L819.6 246.3L825.9 251.9L831 240.7L831.1 234L837.3 269.8L843.6 276.4L849.9 282L856.1 282L862.4 288.7L868.7 294.3L874.9 299.9L881.2 299.9L887.5 306.6L900 294.3" fill="transparent" stroke="black" stroke-width="2" stroke-opacity="0.9" stroke-linejoin="bevel" class="zr0-cls-3"></path>
</g>
<path d="M-5 -5l77.2 0l0 22l-77.2 0Z" transform="translate(15 5)" fill="rgb(0,0,0)" fill-opacity="0" stroke="#ccc" stroke-width="0" class="zr0-cls-0"></path>
<path d="M0 7L25 7" transform="translate(16 4)" fill="#000" fill-opacity="0.9" stroke="black" stroke-width="2" stroke-opacity="0.9" stroke-linecap="butt" stroke-miterlimit="10" class="zr0-cls-0"></path>
<path d="M18.1 7A5.6 5.6 0 1 1 18.1 6.4A5.6 5.6 0 0 1 18.1 7" transform="translate(16 4)" fill="black" class="zr0-cls-0"></path>
<text dominant-baseline="central" text-anchor="start" style="font-size:12px;font-family:sans-serif;" x="30" y="7" transform="translate(16 4)" fill="#333">Line_1</text>
<path d="M-1 1l67.2 0l0 12l-67.2 0Z" transform="translate(16 4)" fill="transparent" ecmeta_series_index="0" ecmeta_data_index="0" ecmeta_ssr_type="legend" class="zr0-cls-4"></path>
<path d="M-117 -5l233.9 0l0 28l-233.9 0Z" transform="translate(500 5)" fill="rgb(0,0,0)" fill-opacity="0" stroke="#ccc" stroke-width="0" class="zr0-cls-0"></path>
<text dominant-baseline="central" text-anchor="middle" style="font-size:18px;font-family:sans-serif;font-weight:bold;" y="9" transform="translate(500 5)" fill="#464646">GartentorTemp-2024-10.log</text>
<defs >
<clipPath id="zr0-c0">
<path d="M99 59l802 0l0 272l-802 0Z" fill="#000" class="zr0-cls-1 zr0-cls-2"></path>
</clipPath>
</defs>
<style ><![CDATA[
.zr0-cls-0:hover {
pointer-events:none;
}
.zr0-cls-1 {
animation:zr0-ani-0 1s linear both;
}
.zr0-cls-2:hover {
cursor:pointer;
fill:rgba(0,0,0,1);
}
.zr0-cls-3:hover {
cursor:pointer;
}
.zr0-cls-4:hover {
cursor:pointer;
fill:rgba(0,0,0,0);
}
@keyframes zr0-ani-0 {
0% {
d:path("M99 59l0 0l0 272l0 0Z");
}
100% {
d:path("M99 59l802 0l0 272l-802 0Z");
}
}
]]>

</style>
</svg>
Insbesondere sind width/height angegeben, das schien ja oben ein Problem zu sein. Wenn nun dieses SVG in Bitmap umgewandelt werden soll, erscheint die obige Fehlermeldung, die auch in eval nicht abgefangen wird:
(process:268942): GdkPixbuf-CRITICAL **: 09:00:28.013: gdk_pixbuf_save_to_callbackv: assertion 'GDK_IS_PIXBUF (pixbuf)' failedDanach stürzt FHEM ab. Ich habe schon den SVG-Code nach den angegebenen 800,400 durchforstet, finde da aber keinen Hinweis, wo ich den plotsize vergessen haben könnte. Wenn ich ausblende, erhalte ich die Meldung (also keinen Hinweis in $@)
eCharts_plotAsPng: Cannot create plot as png image for "myChart": und FHEM stürzt nicht ab.

Hast Du eine Idee, wo ich da weitersuchen kann? Die Pixbuf-Fehlermeldung ist leider kryptisch und im Netz finde ich keine richtigen Hinweise dazu.
FHEM 6.1 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

#6
OK, sorry für die Verwirrung, ich habe die Stelle und muss nun nur noch überlegen, woran das liegt. Das sollte ich hinkriegen.

In meinem Code habe ich aus 98_SVG.pm 1:1 kopiert
    my ($err, $confp, $plot, $srcDesc) = SVG_readgplotfile($name, $gplot_pgm, "SVG");
    my $da = SVG_getData($name, $f, $t, $srcDesc, 0);
    #($confp, $plot) = SVG_substcfg(1, $name, $confp, $plot, $defs{$name}->{LOGFILE}, "<OuT>"); ## <=== HIER
    my %conf = &SVG_digestConf($confp, $plot); 
und es ist die Stelle, die ich mit HIER markiert habe. Ist sie ausgeblendet, klappt das umwandeln in Bitmap. Ist sie es nicht, klappt es nicht (dabei wird dann aber leider die Überschrift, wenn nur als <TL> gesetzt, nicht ersetzt - deshalb hatte ich das eingesetzt). Ich muss jetzt nur noch rauskriegen, woran das liegt, aber da ich mich in Perl bewege, sollte das klappen.

PS Ich habe auch mal die beiden SVGs verglichen, die da entstehen und im Anhang einen Abdruck gemacht. Die letzte Zeile
<polyline opacity="0" points="0,0 1000,400"/>ist bei beiden vorhanden, das war ein Erfassungsfehler bei mir. Ich sehe da keine echten Unterschiede.

<offtopic> Ich finde es interessant und eigentlich auch ermutigend, wie solche Posts bei mir entstehen. Ich hoffe, das geht anderen auch so: Ich sitze am Rechner, bin verzweifelt (etwas) und dann sage ich mir "da musst du jetzt andere um Hilfe bitten". Das mache ich dann auch und versuche wenigstens etwas ausführlich zu sein, damit man die Frage überhaupt kapiert. Dann setze ich den Post ab, atme durch und denke "jetzt hilft mir einer" und mache mir erstmal einen Kaffee. Und sobald ich die Tasse ansetze, macht es klick... </offtopic>
FHEM 6.1 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

So, die Sache ist geklärt. Ich hatte folgendes Problem. Ich erstelle die svg mit Hilfe von
Zeile 904: my $svgdata = eval { `$cmd`};  und $cmd enthält die Javascript-Befehle, um ein Bild als SVG zu erzeugen. Das klappt theoretisch. Praktisch ergibt sich aber im Logfile
PERL WARNING: Can't exec "/bin/sh": Die Argumentliste ist zu lang at ./FHEM/98_eCharts.pm line 904.
weil die Zeilenlänge zu lang ist (konkret "getconf ARG_MAX=2097152"). Damit wird dann kein $svgdata erstellt, d.h. die Variable ist leer. Schickt man diese leere Variable dann zu librsvg, dann stürzt das ab. Also muss man leere $svgdata vorher abfangen bzw dafür sorgen, dass bei der Übergabe auf die Zeilenlänge geachtet wird.

Und nun höre ich mal auf, diesen Thread zu kapern.
FHEM 6.1 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!