02_RSS und 98_SVG verheiraten

Begonnen von betateilchen, 15 Oktober 2013, 19:46:51

Vorheriges Thema - Nächstes Thema

betateilchen

Zitat von: ChrisD am 27 Oktober 2013, 08:53:04Es wäre besser den Rückgabewert von loadImageFromString zu überprüfen, ich habe dies so gemacht:
...
Kannst du den neuen Fehler beschreiben ?

Es ist kein neuer Fehler, es ist nach wie vor der Absturz. Wobei komischerweise 20 Minuten alles funktioniert hat (bei mir werden die RSS alle 5 Minuten abgerufen und das Bild auf einen externen Webserver kopiert) und dann wieder nicht mehr. Und selbst die Variante "nur ein Plot pro RSS" hat gestern abend dann nicht mehr funktioniert. Aber ich hatte gestern einfach keine Lust mehr, weiterzusuchen.

Die Sache mit der Variablenbereinigung hatte ich auch schon probiert, ich muss nur noch die "beste" Lösung finden.

Danke für Deine Mitarbeit und Fehleranalysen :)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

#31
Im Moment läuft diese Version bei mir problemlos:


sub svgPlot(@) {
my (@plotName) = @_;
my ($mimetype, $svgdata, $rsvg, $webName, $pngImg);

my @fhts=devspec2array("TYPE=FHEMWEB");
  foreach(@fhts) {
  $webName = $_;
  }
   
$FW_RET = undef;
$FW_webArgs{dev} = $plotName[0];
$FW_webArgs{logdev} = InternalVal($plotName[0], "LOGDEVICE", "");
$FW_webArgs{gplotfile} = InternalVal($plotName[0], "GPLOTFILE", "");
$FW_webArgs{logfile} = InternalVal($plotName[0], "LOGFILE", "CURRENT");
$FW_pos{zoom} = $plotName[1] if $plotName[1];
$FW_pos{off} = $plotName[2] if $plotName[2];
$FW_wname = $webName;
($mimetype, $svgdata) = SVG_showLog("unused");

eval {
$rsvg = new Image::LibRSVG();
$rsvg->loadImageFromString($svgdata);
$pngImg = $rsvg->getImageBitmap();
};

return $pngImg if $pngImg;
return;
}


Mal sehen, ob die Variante dauerhaft durchläuft. Zumindest komplette FHEM Abstürze sollte es keine mehr geben.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Läuft nun seit 24 Stunden problemlos.

Lediglich bei der FHEMWEB-Ermittlung habe ich noch die Variante von ChrisD (Abfrage TEMPORARY) eingebaut.
Ich denke, da kann ich für mich einen "erledigt"-Haken dranmachen.

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

Dr. Boris Neubert

Hallo Udo,

Zitat von: betateilchen am 28 Oktober 2013, 10:30:04
Läuft nun seit 24 Stunden problemlos.

Lediglich bei der FHEMWEB-Ermittlung habe ich noch die Variante von ChrisD (Abfrage TEMPORARY) eingebaut.
Ich denke, da kann ich für mich einen "erledigt"-Haken dranmachen.

kannst Du bitte nochmal die letzte Fassung des stabilen Codes hier posten? Ich baue das dann bei mir ein, teste es eine Weile und integriere die Funktion dann nach 98_SVG.pm. Kann aber noch etwas dauern, da ich im Moment nicht dazu komme, mich mit FHEM zu befassen.

Danke für Deine Arbeit und viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

betateilchen

Hallo Boris,

mache ich gerne, aber erst wenn wieder zu Hause bin (langes Wochenende mit Feiertag genutzt...)

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

fossy

Hallo Udo,

heute dachte ich, ich teste die Geschichte auch mal, denn der aktuellen Weg, den ich nutze (über Inkscape und externes cron-Script), ist nicht so wirklich toll.

Ich habe also Deine svgPlot in die Utils.pm eingebaut und eine entsprechende Zeile in die RSS-Konfiguration eingetragen. Leider erzeugt er keine Grafik. In $pngImg ist nix drin...

Kann es sein, dass meine  libimage-librsvg-perl (in Lenny Version 0.07-4)  zu alt ist?

cu
Fossy

betateilchen

@Boris bitteschön :)


sub svgPlot(@) {
my (@plotName) = @_;
my (@webs, $mimetype, $svgdata, $rsvg, $pngImg);

@webs=devspec2array("TYPE=FHEMWEB");
foreach(@webs) {
if(!InternalVal($_,'TEMPORARY',undef)) {
$FW_wname=InternalVal($_,'NAME','');
last;
}
}

$FW_RET = undef;
$FW_webArgs{dev} = $plotName[0];
$FW_webArgs{logdev} = InternalVal($plotName[0], "LOGDEVICE", "");
$FW_webArgs{gplotfile} = InternalVal($plotName[0], "GPLOTFILE", "");
$FW_webArgs{logfile} = InternalVal($plotName[0], "LOGFILE", "CURRENT");
$FW_pos{zoom} = $plotName[1] if $plotName[1];
$FW_pos{off} = $plotName[2] if $plotName[2];

($mimetype, $svgdata) = SVG_showLog("unused");

eval {
$rsvg = new Image::LibRSVG();
$rsvg->loadImageFromString($svgdata);
$pngImg = $rsvg->getImageBitmap();
};

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

betateilchen

Zitat von: fossy am 03 November 2013, 14:27:02Leider erzeugt er keine Grafik. In $pngImg ist nix drin...
Kann es sein, dass meine  libimage-librsvg-perl (in Lenny Version 0.07-4)  zu alt ist?

Kannst Du mal prüfen, ob in $svgdata Daten stehen?

Die Version von librsvg sollte eigentlich passen. Die Konvertierung funktioniert nur, wenn die Library gegen gdk-pixbuf mindestens in der Version 2.4 kompiliert ist.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

fossy

Zitat von: betateilchen am 03 November 2013, 20:36:47
Kannst Du mal prüfen, ob in $svgdata Daten stehen?
...

Dort stehen Daten drin.

cu
Fossy

betateilchen

ok, dann liegt es an der eigentliche Konvertierung.

Auf welcher Plattform?
Wie hast Du die librsvg installiert?

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

fossy

Zitat von: betateilchen am 04 November 2013, 09:39:10
ok, dann liegt es an der eigentliche Konvertierung.

Auf welcher Plattform?
Wie hast Du die librsvg installiert?

Es ist eine virutelle Maschiene (Xen) mit Debian Lenny. Installiert wurde librsvg über apt-get install libimage-librsvg-perl

cu
Fossy

betateilchen

gdk-pixbuf wurde korrekt mitinstalliert? (Sollte bei apt-get eigentlich automatisch mitkommen)

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

fossy

Zitat von: betateilchen am 04 November 2013, 10:31:23
gdk-pixbuf wurde korrekt mitinstalliert? (Sollte bei apt-get eigentlich automatisch mitkommen)
... war nicht installiert (mögilcherweise gibt es bei Lenny noch keine Abhängigkeit zu dem Paket). Ein Nachinstallieren hat aber auch nicht geholfen.

Mir ist noch etwas aufgefallen:
Ein reload 99_Utils in der fhem-Konsole funktioniert. Wird aber fhem neu gestartet, so deaktiviert er die 99_Utils wegen

...
Global symbol "$FW_wname" requires explicit package name at /usr/share/fhem/FHEM/99_Utils.pm line 17, <$fh> line 3.
...


cu
Fossy

betateilchen

Ja, das Problem kenne ich. Deshalb steckt bei mir das Plotten in einer eigenen 99_mySVGUtils.pm.
Ich vermute, dass es zum Zeitpunkt des Ladens der 99_Utils noch kein FHEMWEB gibt und deshalb diese $FW Variablen noch nicht zur Verfügung stehen.

Wenn bei Dir die librsvg ursprünglich ohne die gdk-pixbuf installiert werden konnte, dann ist die librsvg ohne die gdk-Unterstützung kompiliert. Damit muss die Konvertierung zwangsläufig scheitern.

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

Dr. Boris Neubert

Hallo,

so, die neue Funktion ist im Standard. Siehe bitte Ankündigung.

Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!