SVG mittels 98_SVG.pm generieren

Begonnen von Dr. Boris Neubert, 24 Oktober 2013, 09:06:44

Vorheriges Thema - Nächstes Thema

Dr. Boris Neubert

Hallo,

ich beziehe mich auf dieses Thema: http://forum.fhem.de/index.php?topic=15414. Dabei geht es darum, einen SVG-Plot aus FHEM in eine Bitmap zu verwandeln, die dann mit SG z.B. in ein Bild im RSS-Modul zur Anzeige in einem Bilderrahmen o.ä. integriert werden kann.

Wie benutze ich die Methoden aus 98_SVG.pm, um den Code im SVG-Format für einen Plot zu generieren? SVG_render() ist ja recht generisch.

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

rudolfkoenig

Es gibt keine "nette" Schnittstelle fuer Perl, nur fuer HTTP mit
http://fhemhost:port/fhem/SVG_showLog?dev=<SVGNAME>&logdev=<FileLogName>&gplotfile=<GplotFileName>&logfile=CURRENT&pos=<ZoomAndOffset>

Wenn man das in Perl haben will, dann setzt man erst
$FW_webArgs{dev} = SVGNAME
$FW_webArgs{logdev} = FileLogName
$FW_webArgs{gplotfile} = GplotFileName
$FW_webArgs{logfile} = "CURRENT"
$FW_wname = FHEMWEBNAME
und ruft
($mimetype, $svgdata) = SVG_showLog("unused");
auf.

betateilchen

Zitat von: rudolfkoenig am 24 Oktober 2013, 11:52:23Es gibt keine "nette" Schnittstelle fuer Perl, nur fuer HTTP mit

so mache ich das bisher

Zitat von: rudolfkoenig am 24 Oktober 2013, 11:52:23Wenn man das in Perl haben will, dann setzt man erst
...
und ruft
($mimetype, $svgdata) = SVG_showLog("unused");

auf.

Und was kommt dann als Ergebnis-mimetype raus? (ich kann das grade nicht testen)
-----------------------
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

Rudi, hast Du in 98_SVG.pm noch Platz für eine Funktion

sub SVG_renderToPng() {
  # SVG erzeugen gemäß der übergebenen Argumente wie weiter oben im Thread beschrieben
  my $svg= ...;
  eval {
    use Image::Magick;
    # SVG nach PNG wandeln
    my $png= ...;
    return $png;
  } || Log ....;
}


Oder einen anderen Platz?

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

rudolfkoenig

Ja, sowas kann gerne nach 98_SVG.pm.

Bitte beachten: meine naechste grosse Baustelle (so denn ich ausreichend Zeit dafuer finden sollte) wird das Transferieren der SVG/FileLog Logik nach Browser/Javascript sein, und spaetestens da ist Schluss mit ImageMagick.
Aber bis dahin vergeht bestimmt ein halbes Jahr, wenn nicht mehr.

Dr. Boris Neubert

Zitat von: rudolfkoenig am 24 Oktober 2013, 15:06:39
Bitte beachten: meine naechste grosse Baustelle (so denn ich ausreichend Zeit dafuer finden sollte) wird das Transferieren der SVG/FileLog Logik nach Browser/Javascript sein, und spaetestens da ist Schluss mit ImageMagick.
Aber bis dahin vergeht bestimmt ein halbes Jahr, wenn nicht mehr.

Ich erinnere mich. Das ist, damit sich die Plots im Browser ohne Geflicker aktualisieren.

Dann ist aber die Idee, die Plots in andere Formate zu überführen, z.B. zur Anzeige in RSS, eine Sackgasse. Ich vermute, daß Du dann 98_SVG.pm nicht mehr weiterentwickeln wirst.

Und aus dem Browser bekommt man nämlich die Plots in FHEM nicht mehr heraus.

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

Arne

Zitat von: Dr. Boris Neubert am 24 Oktober 2013, 15:15:30
Und aus dem Browser bekommt man nämlich die Plots in FHEM nicht mehr heraus.

Was (mit Linux) noch gehen würde:  Der Umweg über einer virtuellen X-Server, z. B. mit Xvfb https://en.wikipedia.org/wiki/Xvfb

Der X-Server ist virtuell. Darin wird ein Webbrowser gestartet, der den Plot anzeigt. Davon wird ein Screeshot gemacht.

Der Ablauf wäre in etwa so:

URL="http://fhemhost:port/fhem/SVG_showLog?dev=<SVGNAME>&logdev=<FileLogName>&gplotfile=<GplotFileName>&logfile=CURRENT&pos=<ZoomAndOffset> "
Xvfb :1 &
irgendein-webbrowser "$URL" -display :1 &
sleep 1
xwd -display :1 -root -out screenshot.xwd
convert screenshot.xwd screenshot.png
Zentrale: FHEM 5.5 auf Linux-Server mit CUL, HMLAN, MAX! Cube, JeeLink
Heizkörper: MAX!  ||  Gas: EM 1000-GZ  ||  Strom: ESA 100WZ-IR
Rolladen, Fenster u. Türen: HM  ||  Zisterne: KFM 100 S
Licht: HM-Dimmer + 12V-LED-Lampen  ||  Steckdosen: PCA 301
Bodenfeuchte: Sensor FS20-BF, Sender KFM 100 S

betateilchen

Hey Arne, coole Idee. Allen Fritzbox-Usern stehen jetzt schon die Haare zu Berge  8)

Meiner Meinung nach müsste es auf jeden Fall eine dauerhafte Lösung in fhem geben, die Plots auch ausserhalb von fhem verwenden zu können. Ich nutze die Plots jetzt schon im Verhältnis 10:90 (10% innerhalb fhem, 90% ausserhalb).

Eine komplette Verlagerung in den Browser halte ich persönlich für einen Irrweg.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

Ein Bitmap-Bild kann man auch ohne virtuellen X-Server im Browser mit Javascript generieren: SVG -> Canvas, Canvas -> PNG/JPG.

Meiner Ansicht nach sollte der RSS Reader SVG lernen :)

Dr. Boris Neubert

Hallo,

ich sehe es doch richtig, daß ich aus FHEM heraus keine Webseite und keinen Plot aufrufen kann, der von FHEM serviert wird, weil FHEM single threaded ist, und der Versuch zum Deadlock führt? Korrekt?

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

rudolfkoenig

Das ist vermutlich korrekt, es sei denn man verwendet BlockingCall.

Arne

Zitat von: rudolfkoenig am 24 Oktober 2013, 19:25:44
Ein Bitmap-Bild kann man auch ohne virtuellen X-Server im Browser mit Javascript generieren: SVG -> Canvas, Canvas -> PNG/JPG.

Wenn du "ganz normal" einen Browser verwendest, dann hast du ja einen echten X-Server laufen und brauchst keinen virtuellen X-Server.

Die obige Idee war für eine automatisierte Erzeugung einer Bitmap-Bild gedacht.
So könnte man über cron stündlich ein Bild eines Plots erzeugen.
Zentrale: FHEM 5.5 auf Linux-Server mit CUL, HMLAN, MAX! Cube, JeeLink
Heizkörper: MAX!  ||  Gas: EM 1000-GZ  ||  Strom: ESA 100WZ-IR
Rolladen, Fenster u. Türen: HM  ||  Zisterne: KFM 100 S
Licht: HM-Dimmer + 12V-LED-Lampen  ||  Steckdosen: PCA 301
Bodenfeuchte: Sensor FS20-BF, Sender KFM 100 S

rudolfkoenig

Korrekt. Und mit meiner Idee kann man u.U. das stuendliche Erzeugen komplett umgehen.

betateilchen

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

betateilchen

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

Und wie übergebe ich zoom und off an {pos}?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!