(Gelöst) SVG Plots nicht mehr als png konvertierbar

Begonnen von schka17, 10 Februar 2015, 14:37:05

Vorheriges Thema - Nächstes Thema

schka17

Hallo,

nach dem letzten Update gestern (dem ersten seit 13.1.2015) habe ich das Problem, dass SVG Plots, die ich mit wget runterlade und auf png konvertiere um sie als Bilder in Webseiten weiterzuverwenden, keine Daten mehr angezeigt werden (nach dem konvertieren).

Die Ergebnisse im screenshot.

Bisher hat das einwandfrei funktioniert, ich habe mir jetzt die SVG Dateien angesehen, folgende Unterschied zwischen alt und neu

alt:


---snip---
/* Author: Volker */
text { font-family:Arial, Helvetica, sans-serif; font-size:12px; fill:#CCCCCC;}
text.title {font-family:Arial, Helvetica, sans-serif; font-size:16px; fill:#CCCCCC;}
text.legend{ cursor:pointer; }
text.copy  { text-decoration:underline; stroke:none; fill:blue; cursor:pointer;}
text.paste { text-decoration:underline; stroke:none; fill:blue; cursor:pointer;}

polyline { stroke:black; fill:none; }
.border  { stroke:black; fill:url(#gr_bg);}
.vgrid   { stroke:gray; stroke-dasharray:2,6;}
.hgrid   { stroke:gray; stroke-dasharray:2,6;}
.pasted  { stroke:black; stroke-dasharray:1,1;}

.l0     { stroke:red;     } 
.l1     { stroke:green;   } 
.l2     { stroke:blue;    } 
.l3     { stroke:magenta; } 
.l4     { stroke:brown;   } 
.l5     { stroke:black;   } 
.l6     { stroke:olive;   } 
.l7     { stroke:gray;    } 
.l8     { stroke:yellow;  } 
---snap---


neu:

---snip---
path.SVGplot     { stroke:black; fill:none; }
polyline.SVGplot { stroke:black; fill:none; }
.border  { stroke:black; fill:url(#gr_bg);}
.vgrid   { stroke:gray; stroke-dasharray:2,6;}
.hgrid   { stroke:gray; stroke-dasharray:2,6;}
.pasted  { stroke:black; stroke-dasharray:1,1;}

.SVGplot.l0     { stroke:red;     } 
.SVGplot.l1     { stroke:green;   } 
.SVGplot.l2     { stroke:blue;    } 
.SVGplot.l3     { stroke:magenta; } 
.SVGplot.l4     { stroke:brown;   } 
.SVGplot.l5     { stroke:black;   } 
.SVGplot.l6     { stroke:olive;   } 
.SVGplot.l7     { stroke:gray;    } 
.SVGplot.l8     { stroke:yellow;  } 
----snap----


wenn ich jetzt SVGplot. entferne wird das Bild tadellos konvertiert.

mein download&convert script:

wget -b -q "http://192.168.255.9:8083/fhem/SVG_showLog?dev=Outdoor_W_H&logdev=FileLog_Outdoor_Weather&gplotfile=hum6wind8&logfile=CURRENT&pos=" -O Outdoor_W_H.svg
sleep 2
convert -background none Outdoor_W_H.svg Outdoor_W_H.png


Ich habe dann versucht herauszufinden wo das herkommt und habe svg_style.css gefunden. Ausgetauscht gegen die alte, sicherheitshalber shutdown restart, leider ohne Erfolg.

Wie oder wo kann ich diese Änderungen (remove SVGplot) durchführen, oder kennt jemand eventuell parameter für den download oder konvertierung die ich noch nicht entdeckt habe (ich habe reference guide und convert help gelesen, imagemagick ist auch die aktuellste version)?

Danke,

Gruß

Karl
M: Thinclient x64 Debian | CUL FS20, HMS100WD, HMS100TF, HMS100T, HMS100CO, S300, S555TH | OWServer DS1420, DS18B20, DS2408 | RFXCOM UVN128, THWR800, THGR228N,RTGR328, PCR800 |Jeelink PCA301 EC3000|CUNO+IR|HMLAN|HMUSB|CUL433 Somfy|mySensors|espEasy
S1:Raspberry mit BPM810, Jeelink EC3000

betateilchen

Das Problem ist bekannt - und gelöst  8)


wget -b -q "http://192.168.255.9:8083/fhem/SVG_showLog?dev=Outdoor_W_H&logdev=FileLog_Outdoor_Weather&gplotfile=hum6wind8&logfile=CURRENT&pos=" -O Outdoor_W_H.svg
sleep 2
sed s/\.SVGplot\./\./g Outdoor_W_H.svg
convert -background none Outdoor_W_H.svg Outdoor_W_H.png


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

schka17

Danke Betateilchen,

Ich schaffe es einfach nicht mehr alles zu lesen und die Suchfunktion im Forum ist, naja, rudimentär.

Leider ist es nicht ganz so einfach, ich habe jetzt diese Zeile verwendet um die aktuelle Dateil zu modifizieren:

sed -i s/\.SVGplot\./\./g Outdoor_W_H.svg

danach bricht convert mir dieser Fehlermeldung ab:

librsvg-WARNING **: CSS parsing error

Ursache sind diese beiden Zeilen, die nach dem sed command überleiben:

path.    { stroke:black; fill:none; }
polyline.{ stroke:black; fill:none; }


wenn ich das jetzt nochmal manuell editiere (erste Zeile löschen)
polyline { stroke:black; fill:none; }
dann funktionert die conversion, aber das Ergebnis ist ein komplett leeres (oder schwarzes) Bild ohne Inhalt

wenn ich die Source Datei mit Editplus editiere, also .SVGplot. mit . austausche, die path Zeile lösche und den Punkt nach polyline entferne dann bekomme ich zwar einen Inhalt aber etwas verunstaltet (Outdoor_W_H_3.png), ähnlich der Beispiele die im Forum gezeigt wurden wegen der zusätzlichen svg files. Man sieht es wegen der Farben schlecht, aber die Grafen mit einer Farbe aufgefüllt, beim default thema wäre das wohl schwarz.

Ich werde dann halt weiter analysieren und wenn ich eine Lösung finde hier posten.



Gruß

Karl
M: Thinclient x64 Debian | CUL FS20, HMS100WD, HMS100TF, HMS100T, HMS100CO, S300, S555TH | OWServer DS1420, DS18B20, DS2408 | RFXCOM UVN128, THWR800, THGR228N,RTGR328, PCR800 |Jeelink PCA301 EC3000|CUNO+IR|HMLAN|HMUSB|CUL433 Somfy|mySensors|espEasy
S1:Raspberry mit BPM810, Jeelink EC3000

betateilchen

Definiere Dir ein 02_RSS device, setzt dort das Attribut size auf 800x160 (identisch zur Plotgröße) und binde als einziges Element den SVG plot ein.

Das Modul 98_SVG.pm besitzt eine eigene Konvertierungsroutine, um das SVG nach png zu wandeln. Und diese Konvertierungsroutine wurde nach den CSS-Änderungen modifiziert, damit sie auch damit zurechtkommt.

Das vom RSS-device generierte png kannst Du Dir dann wieder per wget abholen.


Klingt kompliziert, ist aber eigentlich ganz einfach ;)


define plotpng RSS png <hostname oder ip-adresse> ./FHEM/rss.layout
attr plotpng size 800x160


In der Datei ./FHEM/rss.layout steht:


img 0 0 1 png data {plotAsPng(<nameDeinesSVGplots>}


Und per wget bekommst Du das Ergebnis mit

wget http://<hostname oder ip>:8083/fhem/rss/plotpng.png
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

schka17

Zitat von: betateilchen am 10 Februar 2015, 19:21:08
Definiere Dir ein 02_RSS device, setzt dort das Attribut size auf 800x160 (identisch zur Plotgröße) und binde als einziges Element den SVG plot ein.

Das Modul 98_SVG.pm besitzt eine eigene Konvertierungsroutine, um das SVG nach png zu wandeln. Und diese Konvertierungsroutine wurde nach den CSS-Änderungen modifiziert, damit sie auch damit zurechtkommt.

Das vom RSS-device generierte png kannst Du Dir dann wieder per wget abholen.


Klingt kompliziert, ist aber eigentlich ganz einfach ;)


define plotpng RSS png <hostname oder ip-adresse> ./FHEM/rss.layout
attr plotpng size 800x160


In der Datei ./FHEM/rss.layout steht:


img 0 0 1 png data {plotAsPng(<nameDeinesSVGplots>}


Und per wget bekommst Du das Ergebnis mit

wget http://<hostname oder ip>:8083/fhem/rss/plotpng.png

super, danke.
ist zwar für ca. 10-15 plots etwas Aufwand, aber da ich seit ein paar Stunden versuche mit gnuplot auf Kommandoebene ansprechende plots zu erstellen erscheint mir dieser Weg wesentlich einfacher.

Und ich möchte nicht lästig sein, aber jetzt habe ich wieder einen weissen Hintergrund und nicht schwarz wie im webinterface, jetzt verzweifle ich schön langsam mit dem ganzen css zeugs...

Wenn du da noch einen Tip hast?

danke und Gruß

Karl
M: Thinclient x64 Debian | CUL FS20, HMS100WD, HMS100TF, HMS100T, HMS100CO, S300, S555TH | OWServer DS1420, DS18B20, DS2408 | RFXCOM UVN128, THWR800, THGR228N,RTGR328, PCR800 |Jeelink PCA301 EC3000|CUNO+IR|HMLAN|HMUSB|CUL433 Somfy|mySensors|espEasy
S1:Raspberry mit BPM810, Jeelink EC3000

betateilchen

Die grafische Gestaltung des Plots hängt vom gewählten Styles ab. Versuch mal bei Bedarf, im Layout ein farbiges Rechteck hinter den Plot zu legen.


rgb "7F7F7FFF"
rect 0 0 800 160 1
img 0 0 1 png data {plotAsPng(<nameDeinesSVGplots>}


Wieso der Hintergrund allerdings jetzt weiß ist, kann ich Dir spontan nicht sagen - ich tippe aber, Du hast einen entsprechenden Style im fhem Frontend ausgewählt, vielleicht "default"?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

schka17

Hallo Betateilchen,

nein ich verwende dark + mein zusätzliches css file das aber nur die FHEMWEB Oberfläche anpasst. Ich probiere das in der selbe Web instanz, also sollte es von dieser Seite keine Unterschiede geben, ausser im 98_SVG.pm ist für die Erstellung der png's etwas anderes definiert, das durchblicke nicht, aber ich befürchte fast das ist der Fall....

Im Bild sieht man den plot im FHEMWEB und als png über RSS, im Web ist der plothintergrund transparent aber im png ist er weiss und auch die Farben der Beschriftung unterschiedlich. Der Rahmen ist im png dann wieder transparent.

jetzt auch mit dem richtigen Bild
M: Thinclient x64 Debian | CUL FS20, HMS100WD, HMS100TF, HMS100T, HMS100CO, S300, S555TH | OWServer DS1420, DS18B20, DS2408 | RFXCOM UVN128, THWR800, THGR228N,RTGR328, PCR800 |Jeelink PCA301 EC3000|CUNO+IR|HMLAN|HMUSB|CUL433 Somfy|mySensors|espEasy
S1:Raspberry mit BPM810, Jeelink EC3000

betateilchen

Zitat von: schka17 am 10 Februar 2015, 23:01:20
ausser im 98_SVG.pm ist für die Erstellung der png's etwas anderes definiert, das durchblicke nicht, aber ich befürchte fast das ist der Fall

Nein, da ist nix anderes definiert. Die Funktion plotAsPng() nimmt einfach die svg-Daten und schickt die einmal durch die librsvg, damit am Ende ein png rauskommt. Im Prinzip sowas ähnliches wie vorher Dein convert, nur eben abgestimmt auf die 98_SVG.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

schka17

Hallo,

habs jetzt zwar nicht bis ins letzte Detail analysiert, aber es sieht so aus als wenn die funktion plotAsPng(@) die svg parameter des defaultstyles verwendet, und das generierte png unabhängig von der FHEMWEB Instanz ist.

Wollte jetzt nicht in diesen Definitionen herumwursteln da ich soweit wie möglich update fähig sein will, habe mich also mit einem meiner Lieblingskommandos "sed" beschäftigt. Meine Lösung sieht so aus:

wget -b -q "http://192.168.255.9:8083/fhem/SVG_showLog?dev=Outdoor_W_H&logdev=FileLog_Outdoor_Weather&gplotfile=hum6wind8&logfile=CURRENT&pos=" -O Outdoor_W_H.svg
sleep 2
sed -i '/path\SVGplot/d;s/\.SVGplot\././g;s/\polyline./polyline\ /g' Outdoor_W_H.svg
convert -antialias -background none Outdoor_W_H.svg Outdoor_W_H.png


Damit erziele ich mein gewünschtes Ergebnis.

Danke für die Untertsützung

Gruß

Karl
M: Thinclient x64 Debian | CUL FS20, HMS100WD, HMS100TF, HMS100T, HMS100CO, S300, S555TH | OWServer DS1420, DS18B20, DS2408 | RFXCOM UVN128, THWR800, THGR228N,RTGR328, PCR800 |Jeelink PCA301 EC3000|CUNO+IR|HMLAN|HMUSB|CUL433 Somfy|mySensors|espEasy
S1:Raspberry mit BPM810, Jeelink EC3000

betateilchen

Zitat von: schka17 am 11 Februar 2015, 10:07:40
als wenn die funktion plotAsPng(@) die svg parameter des defaultstyles verwendet, und das generierte png unabhängig von der FHEMWEB Instanz ist.

Nicht ganz:  plotAsPng() verwendet die erste FHEMWEB Instanz, die in %defs gefunden wird - und deren style-Definition.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!