02_RSS und 98_SVG verheiraten

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

Vorheriges Thema - Nächstes Thema

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!