02_RSS und 98_SVG verheiraten

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

Vorheriges Thema - Nächstes Thema

betateilchen

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
-----------------------
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,

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
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

betateilchen

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 :)
-----------------------
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,

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) 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


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

betateilchen

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.

-----------------------
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: 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?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

justme1968

wie wäre ein ansatz auf basis von 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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

betateilchen

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
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

justme1968

nein. das hatte ich noch nicht gesehen.

und 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 ist auch keine grundlage? ja. ich hab gesehen das beides nicht besonders frisch ist...

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

betateilchen

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.
-----------------------
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: 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
-----------------------
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 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
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

betateilchen

#12
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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

#14
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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

ChrisD

Hallo,

Versuchs mal mit:

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

Grüße,

ChrisD


betateilchen

#16
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);
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

ChrisD

98_SVG erwartet diese Daten in FW_pos, versuch mal

$FW_pos{zoom}="qday";
$FW_pos{off}=0;

betateilchen

#18
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.

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

betateilchen

#19
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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

ChrisD

Ich habe in meiner 99_myutils noch folgende Zeile hinzugefügt (oben):

use vars qw(%FW_pos);

Damit funktionieren bei mir Zoom und Offset.

betateilchen

#21
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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

ChrisD

Bei mir stürzt Perl ab wenn ich einen 2. Plot zum RSS hinzufüge.

betateilchen

#23
Was bin ich froh, dass das Problem nicht nur bei mir auftritt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

ChrisD

#24
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="";

betateilchen

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.

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

betateilchen

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

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

ChrisD

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 ?

betateilchen

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.
-----------------------
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: 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!

betateilchen

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
-----------------------
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,

... 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

betateilchen

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.

-----------------------
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,

ich setze mich demnächst nochmal ran.

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

Dr. Boris Neubert

Hallo,

Logging und Doku-Aktualisierung erledigt!

Ab morgen per update.

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

betateilchen

#50
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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!