Caching SVG's

Begonnen von erwin, 12 Februar 2013, 17:34:24

Vorheriges Thema - Nächstes Thema

erwin

Hi all,
ich hab unter http://www.fhemwiki.de/wiki/Creating_Plots_-_caching_SVG%27s ein wiki erstellt,
wie man plots, die sich nicht dauernd ändern (historische Werte), speichern kann und dann bei Bedarf von fhem anzeigen lassen kann.

Have fun
erwin
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

justme1968

hallo erwin,

das ist eine klasse idee...

wie wäre es noch einen drauf zu setzen: wenn man im 01_FHEMWEB etwas in dieser art:        if( $FW_pos{off} < 0 ) {            
          FW_calcWeblink($d,$wl);          
          my $cached_name = $d ."-". $va[0] ."-". $va[1] ."-". $FW_pos{zoom} ."-". $FW_devs{$d}{from} ."-". $FW_devs{$d}{to} .".svg";
          if( -e $FW_dir ."/svgcache/". $cached_name ) {
            $arg = "/fhem/svgcache/". $cached_name;
          }                                
        }                                  
dort einbaut wo die svg grafiken eingebettet werden, also jeweils genau nach der zeile:if(AttrVal($d,"plotmode",$FW_plotmode) eq "SVG") { dann wird das svg aus dem cache überall automatisch mit ausgeliefert statt es neu zu berechnen. bei meiner übersichtseite mit allen plots und vor allem bei den plots in denen ich alle temperauren zum vergleich plotte ist das verdammt schnell geworden :)

ich habe nur noch keinen genau so eleganten weg gefunden die svgs automatisch beim ersten zugriff zu cachen weil sie glaube ich direkt auf das sockt rausgeschrieben werden. d.h. füllen muss man den cache immer noch von hand z.b. mit einem wget und dann das file nach obige schema (<weblink-name>-<logname>-<plotfilename><zoom>-<von>-<bis>.svg) benennen und ins cache directory legen.

bei der benennung kann vielleicht den <bis> teil noch rausschmeissen.

vielleicht hat ja jemand eine idee die svgs automatisch zu erstellen. dort könnte man auch konfigurieren welche überhaupt erzeugt werden. also z.b. nur die monatlichen.

gruss
  andre

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

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

erwin

Hi Andre,

uiii, soweit hab ich mich in FHEMWEB noch nicht eingelesen - genial...

Zur Logik...
ins unreine geschrieben:
1) jeweils um Mitternacht den gesamten cache löschen. (da ist noch immer "room for improvement")
2) bei jedem Zugriff auf SVG mit offset <0 checken , ob cache file existiert. -hast du ja schon gezeigt wie's gehen könnte!
   falls nein - erstellen/im cache speichern und ausliefern wie bisher.
   falls ja - aus cache ausliefern...

Über die mods im FHEMWEB trau ich mich ehrlich gesagt nicht drüber, macht auch aus meiner Sicht keinen Sinn, solange es keine einheitliche Lösung mit Unterstützung von Rudolf gibt. Mithelfen würd ich gerne...  evtl. können wir ja was bewegen...

l.g. erwin
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

justme1968

also das mit dem komplett löschen des cache ist gar nicht nötig. nur die ältesten und die von noch nicht abgeschlossenen zeiträumen raus müssen. die daten der letzten woche ändern sich ja nicht mehr.

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

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

justme1968

und hier das automatische erzeugen der svg files im cache direkt aus 01_FHEMWEB:

   if( $FW_pos{off} < 0 ) {
      my $cached_name = $wl ."-". $d ."-". $type ."-". $FW_pos{zoom} ."-". $FW_devs{$d}{from} ."-". $FW_devs{$d}{to} .".svg";
      my $fh;              
      if( open($fh,">".$FW_dir ."/svgcache/".$cached_name)) {
        my $svg = SVG_render($wl, $f, $t, $cfg, $internal_data, $plot, $FW_wname, $FW_cssdir);
        print $fh $svg;    
        close $fh;        
        Log 3, "created cache file: ". $FW_dir ."/svgcache/". $cached_name;
     
        FW_pO $svg;        
      } else {            
        FW_pO SVG_render($wl, $f, $t, $cfg, $internal_data, $plot, $FW_wname, $FW_cssdir);
      }
    } else {              
      FW_pO SVG_render($wl, $f, $t, $cfg, $internal_data, $plot, $FW_wname, $FW_cssdir);
    }

statt der bisherigen zeile:FW_pO SVG_render($wl, $f, $t, $cfg, $internal_data, $plot, $FW_wname, $FW_cssdir);

hiermit wird beim ersten zugriff auf einen plot mit offset < 0 das svg im cache verzeichnis erzeugt.

das ganze sollte man noch konfigurierter machen. z.b. mit einem attribut pro weblink um das ganze ein zu schalten und einem attribut für welche zoom stufen das überhaupt gemacht werden soll.

für eine eventuelle eltgültige version sollte man vielleicht die file namen noch durch einen hash ersetzen und das ganze in ein paar unterverzeichnissen organisieren. ich wette dafür gibt es schon irgendein perl modul das passen würde.

es werden auch noch keinerlei fehler abgefangen. und aufgeräumt wird der cache natürlich auch noch nicht.

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

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

erwin

Hi Andre,

ich hab gestern ein wenig optimiert und einige undefined...msg abgefangen.
Es läuft soweit, allerdings gibts noch Probleme mit plots, die das attribute fixedrange (day/week/month/jear) gesetzt haben.....

falls interesse , kann ich ja ein diff mit dem jetzigen stand hochladen.

l.g. erwin
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

justme1968

hallo erwin,

immer her damit. ich hab noch etwas an der konfiguration gebaut. ich wuerde dann alles zusammen mischen und einen patch mit allem machen damit es dann offiziell werden kann.

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

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

erwin

Bitte sehr!

ich hoffe das klappt so...

Gruß erwin
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

willybauss

Hallo,
ich betätige mich mal als Leichenfledderer und grabe den alten Beitrag wieder aus  :) .
Offenbar ist diese Erweiterung nie ins 01_FHEMWEB übernommen worden, d.h. ich müsste sie mir manuell einbauen. Warum? Wenn es funktioniert und allgemein gültig ist wäre es doch perfekt im originalen  01_FHEMWEB aufgehoben.
Ich würde ungern was patchen, was beim nächsten Update wieder weg ist.
FHEM auf Raspberry Pi B und 2B; THZ (THZ-303SOL), CUL_HM, TCM-EnOcean, SamsungTV, JSONMETER, SYSMON, OBIS, STATISTICS

justme1968

wie kommst du darauf das das nicht eingeflossen ist?

laut commandref kennt fhemweb das attribut SVGcache und das commandi clearSVGcache.

funktioniert das bei dir nicht?

ist deine fhem installation aktuell?

gruß
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

vbs

Ich habe auch gerade mal versucht, das Caching zu aktivieren. Leider ohne Erfolg. Wenn ich das Attribut "SVGcache" setze, dann ändert sich erstmal nichts. Es wird nicht schneller und es werden keine Dateien in "www/SVGcache" abgelegt. Wenn ich jedoch testweise Dateien dort ablege (Verzeichnis habe ich angelegt), dann werden sie von FHEM gelöscht, wenn ich clearSvgCache aufrufe. Rechte scheinen also ok zu sein.

Da ja nur Plots gecachet werden, die sich nicht ändern, habe ich mal die Attribute endPlotNow und endPlotToday gelöscht. Leider aber keine Änderung.

Muss noch irgendwas aus diesem Artikel http://www.fhemwiki.de/wiki/Creating_Plots_-_caching_SVG%27s gemacht werden? Ich hatte den Eindruck, dass der evtl. überholt ist, da dort zB von SVGcache keine Rede ist und ich diesen Thread so verstanden habe, dass FHEMWEB die Files nun selbst erzeugt?

justme1968

#11
es werden nur plots gecached die vollständig sind. d.h. deren end zeitpunkt in der vergangenheit liegt.

du musst also zurück blättern.

aktuelle plots zu cachen macht keinen sinn da sie sich ja nicht verändern.

man muss nur das attribut setzen und zurück blättern. der wiki artikel ist komplett überholt und beschreibt ein ganz anderes verfahren.

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

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

vbs

Ich hatte gehofft, dass man auch Durchschnittsplots (tageweise bzw. monatsweise) cachen könnte, da sich diese ja auch nur einmal am Tag bzw. einmal im Monat ändern. Ich fürchte jedoch, dass FHEM das ja nicht wissen kann...

Jedoch klappt das Cachen bei mir auch beim Zurückblättern nicht. :( "www/SVGcache" bleibt weiterhin leer. Außer das Attribut zu setzen, muss nichts gemacht werden normalerweise?

Im Logfile steht nix und so sieht mein FHEMWEB aus:
Internals:
   CONNECTS   76
   DEF        8084 global
   FD         6
   NAME       WEB
   NR         11
   NTFY_ORDER 50-WEB
   PORT       8084
   STATE      Initialized
   TYPE       FHEMWEB
Attributes:
   SVGcache   1
   defaultRoom Dashboard
   group      Schnittstellen
   hiddengroup Übersicht Geräte
   hiddenroom DashboardRoom,Übersicht
   icon       it_internet
   iconPath   openautomation:fhemSVG:default
   menuEntries Admin On,cmd=adminon,Admin Off,cmd=adminoff,Update,cmd=update,Restart,cmd=shutdown restart,Update SB,cmd=update all https://raw.githubusercontent.com/ChrisD70/FHEM-Modules/master/autoupdate/sb/controls_squeezebox.txt,Update SV,cmd=update all https://raw.githubusercontent.com/herrmannj/fronthem/master/controls_fronthem.txt
   room       System
   sortRooms  Übersicht Wohnzimmer Schlafzimmer Bad Küche Flur Wohnung Wetter Sonstiges
   stylesheetPrefix dark


Vielen Dank für die Hilfe!

justme1968

ich hab es gerade auf einem frisch ausgeheckten fhem getestet und die svg files wurden angelegt.

wird das SVGcache directory angelegt falls es noch nicht da ist? stimmen die berechtigungen?

im code sind auch keine weiteren debug meldungen eingebaut wenn hier was schief geht. du kannst mal versuchen selber ein paar log zeilen einzubauen. das ganze passiert im SVG modul ab zeile 1187.

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

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

vbs

Also wenn ich das Verzeichnis lösche, dann wird es von FHEM neu angelegt. Das funktioniert. Leider immer leer. Aber ok, ich werde mal versuchen, da bei Gelegenheit mal in den Code zu gucken und etwas zu debuggen.