98_SVG: fixedrange {year|...} mit Offset-Angabe (z.B. für Vorjahresauswertungen)

Begonnen von KlausBüker, 16 Januar 2014, 19:55:42

Vorheriges Thema - Nächstes Thema

KlausBüker

Hallo Rudolf,

um z.B. auch Vorhahreswerte ausgeben zu können habe ich fixedrange mit Offset in 98_SVG bei mir eingebaut.
Vielleicht ist das ja auch für die Community interessant.

Gruß
Klaus


Beispiel:
#Plot aktuelle Jahreswerte
define wl_AW4 SVG Log_Wetter_avg:kpb_ks300_4:CURRENT
attr wl_AW4 fixedrange year
#Plot Vorjahreswerte
define wl_AW41 SVG Log_Wetter_avg:kpb_ks300_4:CURRENT
attr wl_AW41 fixedrange year -1

Hierzu müssen in 98_SVG folgende kleine Änderungen gemacht werden:
#klaus fixed range day, week, month or year
562>      if($fr  =~ "day" || $fr  =~ "week" || $fr  =~ "month" || $fr  =~ "year" ) { #kpb2013

  $zoom = $frx if ($frx); #for fixedrange {day|week|...} klaus
590>  my @zrange = split(" ", $zoom); #kpb2014 offset für fixedrange
591>  if(defined($zrange[1])) { $off += $zrange[1]; $zoom=$zrange[0]; }  #kpb2014 offset angegeben

rudolfkoenig

- bitte einen Diff zum aktuellen 98_SVG.pm posten, ich will nicht raten.
- die Pruefung der Parameter ist viel zu schwammig
- Doku fuer das neue Feature fehlt

KlausBüker

Hallo Rudolf,

hier der diff zur aktuellen (19.1., 11:00h) 98_SVG.pm. Doku hab ich am Ende des Files gemacht, richtig? Kannst ja mal überlegen ob Du es so in FHEM einbauen magst.

Gruß
Klaus


--- 98_SVG_orig.pm
+++ 98_SVG.pm
@@ -575,12 +575,13 @@
   return if($pm eq "gnuplot");

   my ($fr, $fo);
+  my $frx; #fixedrange with offset
   if($defs{$wl}) {
     $fr = AttrVal($wl, "fixedrange", undef);
     if($fr) {
-      if($fr eq "day" || $fr eq "week" || $fr eq "month" || $fr eq "year" ||
-        $fr =~ m/^\d+days$/ ) {
-
+      if($fr =~ "^day" || $fr =~ "^week" || $fr =~ "^month" || $fr =~ "^year" ||
+        $fr =~ m/^\d+days$/ ) { #fixedrange with offset
+        $frx=$fr; #fixedrange with offset
       } else {
         my @range = split(" ", $fr);
         my @t = localtime;
@@ -609,8 +610,10 @@
   my $zoom = $FW_pos{zoom};
   $zoom = "day" if(!$zoom);
   $zoom = $fr if(defined($fr));
+  $zoom = $frx if ($frx); #fixedrange with offset 
+  my @zrange = split(" ", $zoom); #fixedrange with offset
+  if(defined($zrange[1])) { $off += $zrange[1]; $zoom=$zrange[0]; }  #fixedrange with offset

-
   my $endPlotNow = (AttrVal($FW_wname, "endPlotNow", undef) && !$st);
   if($zoom eq "hour") {
     if($endPlotNow) {
@@ -1639,7 +1642,7 @@
   <b>Attributes</b>
   <ul>
     <a name="fixedrange"></a>
-    <li>fixedrange<br>
+    <li>fixedrange [offset]<br>
         Contains two time specs in the form YYYY-MM-DD separated by a space.
         In plotmode gnuplot-scroll or SVG the given time-range will be used,
         and no scrolling for this SVG will be possible. Needed e.g. for
@@ -1649,6 +1652,8 @@
         zoom-level. This is useful for pages with multiple plots: one of the
         plots is best viewed in with the default (day) zoom, the other one with
         a week zoom.
+      If given, the optional integer parameter offset refers to a different period
+      (e.g. last year: fixedrange year -1, 2 days ago: fixedrange day -2).

         </li><br>


rudolfkoenig

Habs ohne Aenderungen eingecheckt.
Bitte das naechste mal den Diff als Anhang hinzufuegen, damit keine Whitespace-Unfaelle passieren.