FHEM Forum

FHEM => Frontends => RSS => Thema gestartet von: betateilchen am 15 Oktober 2013, 19:46:51

Titel: 02_RSS und 98_SVG verheiraten
Beitrag von: betateilchen am 15 Oktober 2013, 19:46:51
wunschgemäß die Fortführung des Ideenaustausches hier im Forum...

Zitat von: betateilchenHallo Boris,

nachdem ja die Plots in fhem nun alle als SVG kommen, stehe ich immer wieder vor dem Problem, diese in RSS einbinden zu wollen. GD kann keine SVG lesen. Bisher muss ich deshalb immer erstmal mit wget das SVG aus fhem lesen und dann mit Apache-Batik konvertieren, um danach das konvertierte Bild in 02_RSS verwenden zu können.

Nun hab ich mal ein bisschen recherchiert und es scheint wohl nur mit perlmagick möglich zu sein, SVG zu lesen und zu importieren.

Was denkst Du über die Idee, das irgendwie in 02_RSS mit einzubauen? Mir ist schon klar, dass das wieder Probleme bei Fritzboxen geben kann. Aber viele andere Plattformen würden das durchaus unterstützen. Man könnte das Nutzen dieser zusätzlichen Library in 02_RSS ja optional machen, dann hätte das auf Fritzboxnutzer nicht zwingend negative Auswirkungen.

Viele Grüße
Udo

Zitat von: BorisAn sich eine witzige Idee. Ich würde eine generische Lösung befürworten, die den Graph on-demand direkt in das SG-Bild pinselt.

Können wir die Diskussion bitte in das Board Frontends verlegen? Dort erhalten wir Aufmerksamkeit von Rudi, der sich mit den Plots ja sehr intensiv auseinandergesetzt hat. Vielleicht hat er aus der Historie heraus eine Idee.

Viele Grüße
Boris
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: Dr. Boris Neubert am 23 Oktober 2013, 07:32:10
Hallo,

hat sich schon jemand mit der Frage beschäftigt, wie SVG-Plots in Perl in ein Bitmap-Format verwandelt werden können, oder wie die Plots aus FHEM heraus unmittelbar in eine Bitmap gezeichnet werden können?

Rudi, hast Du aus der Frühzeit der Plot-Erstellung (außer der gnuplot-Variante) noch eine Idee?

Viele Grüße
Boris
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: betateilchen am 23 Oktober 2013, 10:58:34
alles ungetestet:

http://search.cpan.org/~tomson/Image-LibRSVG-0.07/lib/Image/LibRSVG.pm
This module provides an Perl-Interface towards the gnome-lib librsvg-2
which is able to convert SVG(Scaleable Vector Graphics) into bitmapformats like (PNG,JPG,...).
To which formats you can convert the svg-files depends on your gdk-pixbuf configuration.
Still at least PNG and JPG should be available.


http://search.cpan.org/~cmertz/svg2zinc-perl_0.9/SVG2zinc.pm
#To convert a svgfile in png/jpeg file:
&SVG::SVG2zinc::parsefile('file.svg', 'Image',
                           -out => 'file.jpg');


Zitat von: BorisIch würde eine generische Lösung befürworten, die den Graph on-demand direkt ...

das wäre natürlich die charmanteste Lösung :)
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: Dr. Boris Neubert am 24 Oktober 2013, 14:41:04
Hallo,

ich habe mir das jetzt länger durch den Kopf gehen lassen.

TKzinc zieht einen Rattenschwanz von Abhängigkeiten nach sich. Ich präferiere Image::Magick (wie von Dir vorgeschlagen) oder Image::LibRSVG.

FHEM bekommt eine neue Hilfsfunktion (siehe forum.fhem.de/index.php?topic=15718 (http://forum.fhem.de/index.php?topic=15718)) verpaßt, die Plots über SVG in Bitmaps rendert und zurückliefert. Darin wird use Image::Magick; oder use Image::LibRSVG mit einem eval drumherum aufgerufen, damit Installationen, die das Modul und die Bibliothek nicht haben, auch bei einem Aufruf der Hilfsfunktion nicht sterben.

In RSS muß wohl gar nichts geändert werden, weil die Layoutanweisung
img 20 35 1 jpg data { dieObenGenannteFunktion(mitDenNötigenArgumenten) }
genügt.

Es geht übrigens nicht, aus RSS heraus auf eine von FHEM gerenderte Seite zuzugreifen, da dies aufgrund des Single-Thread-Modells von FHEM zum Deadlock führt.

Udo, hast Du schon Perl-Code für dieObenGenannteFunktion()?

Viele Grüße
Boris


Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: betateilchen am 24 Oktober 2013, 14:55:06
Hallo Boris,

ich bin grade dabei, ein bisschen mit Image::LibRSVG im RSS-Umfeld zu experimentieren und denke, am Wochenende kann ich was genaueres dazu sagen.

Mir schwebt in 02_RSS etwas vor wie:

img 20 35 1 fhem data { svgPlotDingensKirchen }

und die von Dir angesprochene Funktion zum Rendern dann auch in der 02_RSS.

Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: betateilchen am 25 Oktober 2013, 22:03:34
Zitat von: Dr. Boris Neubert am 24 Oktober 2013, 14:41:04TKzinc zieht einen Rattenschwanz von Abhängigkeiten nach sich.
...
Ich präferiere Image::Magick (wie von Dir vorgeschlagen) oder Image::LibRSVG.

:D Schau mal...


# apt-get install libimage-librsvg-perl
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.       
Statusinformationen werden eingelesen.... Fertig
Die folgenden zusätzlichen Pakete werden installiert:
  fontconfig libcairo2 libcroco3 libdatrie1 libgdk-pixbuf2.0-0
  libgdk-pixbuf2.0-common libpango1.0-0 libpixman-1-0 librsvg2-2
  librsvg2-common libthai-data libthai0 libxcb-render0 libxcb-shm0 libxft2
  libxrender1
Vorgeschlagene Pakete:
  ttf-baekmuk ttf-arphic-gbsn00lp ttf-arphic-bsmi00lp ttf-arphic-gkai00mp
  ttf-arphic-bkai00mp librsvg2-bin
Die folgenden NEUEN Pakete werden installiert:
  fontconfig libcairo2 libcroco3 libdatrie1 libgdk-pixbuf2.0-0
  libgdk-pixbuf2.0-common libimage-librsvg-perl libpango1.0-0 libpixman-1-0
  librsvg2-2 librsvg2-common libthai-data libthai0 libxcb-render0 libxcb-shm0
  libxft2 libxrender1
0 aktualisiert, 17 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
Es müssen 3.603 kB an Archiven heruntergeladen werden.
Nach dieser Operation werden 8.985 kB Plattenplatz zusätzlich benutzt.


für libimage-magick muss ich gar nix nachinstallieren :D


# apt-get install libimage-magick-perl
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.       
Statusinformationen werden eingelesen.... Fertig
Hinweis: »perlmagick« wird an Stelle von »libimage-magick-perl« gewählt.
perlmagick ist schon die neueste Version.
0 aktualisiert, 0 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.


Womit soll ich denn nun weitertesten?
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: justme1968 am 25 Oktober 2013, 22:18:14
wie wäre ein ansatz auf basis von http://search.cpan.org/~lds/GD-2.50/GD.pm (http://search.cpan.org/~lds/GD-2.50/GD.pm) und ein modul das entweder wie bisher ein svg bzw. die neue java script version erzeugt oder direkt in ein png rendern kann?

gruss
  andre
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: betateilchen am 25 Oktober 2013, 22:36:21
Hallo Andre,

Dir ist schon klar, dass GD bereits jetzt die Grundlage ist, um 02_RSS.pm mit Grafiken nutzen zu können?
Und die Krux dabei ist ja gerade, dass GD kein SVG kennt.
Deswegen wurde ja diese Diskussion hier im Forum gestartet, um das Modul quasi dahingehend zu erweitern, SVG mit einbinden zu können, und dafür die optimale Lösung zu suchen.

Viele Grüße
Udo
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: justme1968 am 25 Oktober 2013, 22:43:04
nein. das hatte ich noch nicht gesehen.

und http://search.cpan.org/~twh/GD-SVG-0.33/SVG.pm (http://search.cpan.org/~twh/GD-SVG-0.33/SVG.pm) oder http://search.cpan.org/~ronan/SVG-GD-0.20/lib/SVG/GD.pm (http://search.cpan.org/~ronan/SVG-GD-0.20/lib/SVG/GD.pm) ist auch keine grundlage? ja. ich hab gesehen das beides nicht besonders frisch ist...

gruss
  andre
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: betateilchen am 26 Oktober 2013, 00:17:28
die Vorgehensweise an sich ist ja inzwischen schon mehr oder weniger klar: eine Funktion bauen, die die Daten aus 98_SVG bereitstellt und die Daten direkt in 02_RSS abliefert. Die Frage ist einfach nur noch, mit welcher Library das am meisten Sinn macht. Funktionieren tut es mit beiden - ich hab das heute getestet.
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: betateilchen am 26 Oktober 2013, 15:11:12
Zitat von: Dr. Boris Neubert am 24 Oktober 2013, 14:41:04Udo, hast Du schon Perl-Code für dieObenGenannteFunktion()?

Hallo Boris,

das mit der Funktion habe ich jetzt getestet. Wenn ich die in die 99_myUtils einbaue, kann ich die Funktion auch aus dem Frontend heraus aufrufen. Aber in 02_RSS.pm funktioniert das nicht, weil die %FW{dingensKirchen} dann beim Aufruf der Funktion während der Layoutinterpretation nicht zur Verfügung stehen.

LibRSVG funktioniert übrigens besser als Magick - bei Magick scheint es irgendwelche distributionsabhängige Unterschiede zu geben, LibRSVG hat dagegen auf mehreren getesteten Plattformen identisch reagiert.

Viele Grüße
Udo
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: Dr. Boris Neubert am 26 Oktober 2013, 16:44:07
Hallo Udo,

Zitat von: betateilchen am 26 Oktober 2013, 15:11:12
das mit der Funktion habe ich jetzt getestet. Wenn ich die in die 99_myUtils einbaue, kann ich die Funktion auch aus dem Frontend heraus aufrufen. Aber in 02_RSS.pm funktioniert das nicht, weil die %FW{dingensKirchen} dann beim Aufruf der Funktion während der Layoutinterpretation nicht zur Verfügung stehen.

Nanu. Grundsätzlich nicht? Was passiert, wenn Du es wie mit Rudi besprochen in 98_SVG.pm tust und in 02_RSS.pm ein use 98_SVG; dazutust?

Zitat
LibRSVG funktioniert übrigens besser als Magick - bei Magick scheint es irgendwelche distributionsabhängige Unterschiede zu geben, LibRSVG hat dagegen auf mehreren getesteten Plattformen identisch reagiert.

Da bei mir FHEM aus dem Raspberry Pi läuft und dort beide Packages sauber durchinstalliert werden, plädiere ich aufgrund Deiner Erfahrungen für LibRSVG.

Viele Grüße
Boris
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: betateilchen am 26 Oktober 2013, 18:12:15
Funktioniert jetzt  8)

in meiner 99_myUtils steht:


use Image::LibRSVG;

sub svgPlot($) {
my ($plotName) = @_;

$FW_webArgs{dev} = $plotName;
$FW_webArgs{logdev}    = InternalVal($plotName, "LOGDEVICE", "");
$FW_webArgs{gplotfile} = InternalVal($plotName, "GPLOTFILE", "");
$FW_webArgs{logfile}   = InternalVal($plotName, "LOGFILE", "CURRENT");
$FW_wname = "WEB";
my ($mimetype, $svgdata) = SVG_showLog("unused");

my $rsvg = new Image::LibRSVG();
$rsvg->loadImageFromString($svgdata);
return $rsvg->getImageBitmap();
}


in meiner Layoutdatei steht:

# cat svgrss_layout
img 4 430 0.99 png data { svgPlot("wz_Heizkurve") }


"wz_Heizkurve" ist der Name der Plotdefinition in fhem, die benötigten Werte werden aus den Plot-Internals gelesen.

Generiert wird folgende Ausgabe als RSS:

(http://up.picr.de/16280208sx.jpg)

Eine Frage hab ich noch:

Wie bekomme ich am einfachsten den Namen der FHEMWEB Instanz für $FW_wname raus (ist bestimmt ganz simpel, nur fällt es mir nicht ein) ? Aktuell habe ich "WEB" noch hartcodiert in der Funktion.

Änderungen in der 02_RSS.pm sind nicht notwendig.
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: betateilchen am 26 Oktober 2013, 18:23:39
Es bleibt die Frage, wo man die Funktion letztendlich wirklich einbaut:

- 02_RSS.pm
- 98_SVG.pm
- 99_Utils.pm

Persönlich würde ich für die 02_RSS plädieren, denn ich denke, in diesem Kontext (Ausgabe als Bitmap-Datenstrom) wird sie wohl am häufigsten benutzt werden.
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: betateilchen am 26 Oktober 2013, 19:12:30
Im Moment schraube ich noch an einer Möglichkeit, zoom und offset übergeben zu können.

$FW_webArgs{pos} = "pos=zoom=qday;off=0";

funktioniert irgendwie nicht.
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: ChrisD am 26 Oktober 2013, 20:44:41
Hallo,

Versuchs mal mit:

$FW_webArgs{pos}= "zoom=qday;off=0";

Grüße,

ChrisD

Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: betateilchen am 26 Oktober 2013, 20:46:51
hatte ich auch schon probiert - ohne Erfolg.

Ich vermute, diese Parameter müssen irgendwie als Hash übergeben werden, aber ich hab noch nicht verstanden, wie.

                "&pos=" . join(";", map {"$_=$FW_pos{$_}"} keys %FW_pos);
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: ChrisD am 26 Oktober 2013, 20:59:42
98_SVG erwartet diese Daten in FW_pos, versuch mal

$FW_pos{zoom}="qday";
$FW_pos{off}=0;
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: betateilchen am 26 Oktober 2013, 21:04:55
scheint zu funktionieren, danke :)


Auf diesem Bild sieht man übrigens die Konvertierungsergebnisse und die Unterschiede zwischen LibRSVG und Apache Batik:

(http://up.picr.de/16283286dl.jpg)

Der obere Plot ist mit LibRSVG konvertiert, der untere mit Apache Batik. Besonders auffällig ist der Unterschied am Rendering der Schriften.

Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: betateilchen am 26 Oktober 2013, 21:35:29
Zitat von: betateilchen am 26 Oktober 2013, 21:04:55
scheint zu funktionieren, danke :)

:( Nein, das wars wohl doch noch nicht endgültig.

irgendwie stürzt fhem komplett und ohne Fehlermeldung ab, wenn ich versuche, die Funktion mit zoom und/oder offset aus der RSS-Generierung heraus aufzurufen.
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: ChrisD am 26 Oktober 2013, 22:28:05
Ich habe in meiner 99_myutils noch folgende Zeile hinzugefügt (oben):

use vars qw(%FW_pos);

Damit funktionieren bei mir Zoom und Offset.
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: betateilchen am 26 Oktober 2013, 22:38:35
Das Problem scheint eine ganz andere Ursache zu haben...

Hast Du schon probiert, mehr als einen Plot in einem RSS unterzubringen? Sobald ich versuche, einen zweiten Plot zu integrieren, schmiert fhem ab. Und das schon, wenn zoom und offset überhaupt noch nicht im Spiel sind.

Bei mir sieht die Funktion inzwischen so aus, da funktioniert zoom und offset problemlos (auch ganz ohne Dein use...) aber nur bei einem einzigen Plot in einem RSS:


sub svgPlot(@) {
my (@plotName) = @_;

$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 = "WEB";
my ($mimetype, $svgdata) = SVG_showLog("unused");

my $rsvg = new Image::LibRSVG();
$rsvg->loadImageFromString($svgdata);
return $rsvg->getImageBitmap();
}


Aufgerufen wird die Funktion dann mit
svgPlot(<svgDeviceName> [,<zoom>] [,<offset>])
Beispiel:
svgPlot("out_Balkon","qday","-1")

Das Problem mit "mehreren Plots in einem RSS Feed" muss noch gelöst werden.
Und ich muss immer noch rausfinden, wie ich den Namen der Webinstanz rausfinde.
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: ChrisD am 26 Oktober 2013, 22:46:50
Bei mir stürzt Perl ab wenn ich einen 2. Plot zum RSS hinzufüge.
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: betateilchen am 26 Oktober 2013, 22:48:35
Was bin ich froh, dass das Problem nicht nur bei mir auftritt.
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: ChrisD am 26 Oktober 2013, 23:14:26
Nach einer Menge Abstürzen bin ich einer Lösung näher gekommen. Versuche in deine Funktion in 99_myutils folgende Zeile nach $FW_wname = "WEB"; hinzuzufügen:

$FW_RET="";
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: betateilchen am 26 Oktober 2013, 23:39:52
cool, danke...  8)

(http://up.picr.de/16285311py.jpg)

Kannst Du mir auch kurz erklären, was dahintersteckt?
Die anderen Zuordnungen sind mir ja alle klar.

Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: betateilchen am 27 Oktober 2013, 00:23:24
zu früh gefreut...
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: justme1968 am 27 Oktober 2013, 00:32:09
kann es sein das es die probleme immer dann gibt wenn es keine 'aktive' fhemweb instanz gibt? also wenn du alle browser fenster zu gemacht hast und die connection nach dem timeout geschlossen wird.

zu dem zeitpunkt sind einige der internen variablen nicht mehr belegt. z.b. room oder eben auch der name der aktiven Instanz die beim rendern der webseite da ist.

gruss
  andre
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: ChrisD am 27 Oktober 2013, 08:53:04
Der Absturz beim Versuch 2 Plots darzustellen kam daher dass FHEM in der Variable FW_RET die SVG-Daten zurückliefert. Beim ersten Aufruf von svgPlot war FW_RET leer und wurde über SVG_showLog() mit dem ersten SVG-Plot befüllt. Beim 2. Aufruf von svgPlot standen in FW_RET noch immer die Daten des ersten Plots und SVG_showLog() fügte die Daten des 2. Plots einfach hinzu. Dadruch enthielt $svgdata nach dem 2. Aufruf beide SVGs womit die Funktion loadImageFromString nicht klarkam und nichts machte. Beim Versuch das nicht existente Bild über getImageBitmap abzurufen kam es zum Absturz.

Es wäre besser den Rückgabewert von loadImageFromString zu überprüfen, ich habe dies so gemacht:
  if($rsvg->loadImageFromString($svgdata)) {
    return $rsvg->getImageBitmap();
  } else {
    return undef;
  }


Kannst du den neuen Fehler beschreiben ?
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: betateilchen am 27 Oktober 2013, 09:38:03
Zitat von: justme1968 am 27 Oktober 2013, 00:32:09
kann es sein das es die probleme immer dann gibt wenn es keine 'aktive' fhemweb instanz gibt?

Diesen Zusammenhang konnte ich nicht feststellen.
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: betateilchen am 27 Oktober 2013, 09:41:17
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 :)
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: betateilchen am 27 Oktober 2013, 10:15:33
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.
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag 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.

Danke an alle Helfer :)
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: Dr. Boris Neubert am 31 Oktober 2013, 21:17:54
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
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: betateilchen am 31 Oktober 2013, 22:16:55
Hallo Boris,

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

Viele Grüße
Udo
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: fossy am 03 November 2013, 14:27:02
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
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: betateilchen am 03 November 2013, 20:26:38
@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;
}
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: betateilchen am 03 November 2013, 20:36:47
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.
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: fossy am 04 November 2013, 08:23:53
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
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag 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?

Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: fossy am 04 November 2013, 10:17:30
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
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: betateilchen am 04 November 2013, 10:31:23
gdk-pixbuf wurde korrekt mitinstalliert? (Sollte bei apt-get eigentlich automatisch mitkommen)

Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: fossy am 04 November 2013, 11:18:12
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
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: betateilchen am 04 November 2013, 11:42:01
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.

Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: Dr. Boris Neubert am 04 November 2013, 18:10:31
Hallo,

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

Grüße
Boris
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: betateilchen am 05 November 2013, 14:54:30
Hallo Boris,

Du solltest vielleicht in der commandref beim Beispieleintrag noch ergänzen, dass man neben dem Namen der SVG-Definition optional auch noch Parameter und Offset beim Aufruf übergeben kann.

Die Sache mit dem "falschen" Namen in der Ankündigung hatte ich ja anderweitig schon mitgeteilt ;)

Viele Grüße
Udo
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: fossy am 05 November 2013, 15:27:36
Hallo,

... und ich würde mir noch eine "Log-Zeile" wünschen, für den Fall, dass nichts zurückgegeben wird (warum auch immer).

cu
Fossy
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: betateilchen am 05 November 2013, 19:37:13
Zitateine "Log-Zeile" wünschen, für den Fall, dass nichts zurückgegeben wird

Die hat Boris aber als Debug-Ausgabe schon im Modul eingebaut.

Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: Dr. Boris Neubert am 05 November 2013, 21:21:14
Hallo,

ich setze mich demnächst nochmal ran.

Grüße
Boris
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: Dr. Boris Neubert am 09 November 2013, 16:46:07
Hallo,

Logging und Doku-Aktualisierung erledigt!

Ab morgen per update.

Viele Grüße
Boris
Titel: Antw:02_RSS und 98_SVG verheiraten
Beitrag von: betateilchen am 10 November 2013, 23:20:43
Hallo Boris,

wie kann ich das Debug-Logging abschalten? Mein Logfile läuft grade über...

Viele Grüße
Udo



EDIT: scheint sich irgendwie im Laufe des Tages erledigt zu haben.