[SVG] [Improvement] [Diff] Offset für bessere Lesbarkeit bei endPlotNow

Begonnen von rapster, 30 August 2020, 12:33:11

Vorheriges Thema - Nächstes Thema

rapster

Nach langer Abwesenheit :'( zwei Verbesserungsvorschläge für 98_SVG
Rudolf, hoffe du kannst es so oder ähnlich ggf. allgemein implementieren?


  • Line-Width '2.5' auswählbar
  • Zur besseren Lesbarkeit der Werte bei endPlotNow (damit die Labels die Lines nicht überdecken) ein konfigurierbares offset rechts bei 'off=0' für Day, QDay & Hour
    > Beispielbilder und ein git diff (muss mein svn erst wieder fixen sind aber eh nur paar Zeilen ^^) hängt an

attr FHEMWEB userattr svgOffDay svgOffQDay svgOffHour
attr FHEMWEB svgOffDay 0.1
attr FHEMWEB svgOffHour 0.1
attr FHEMWEB svgOffQDay 0.1


diff --git a/tmp/FHEM_current_98_SVG.PM b/opt/fhem/FHEM/98_SVG.pm
index 7bc0422..80c8ddc 100644
--- a/tmp/FHEM_current_98_SVG.PM
+++ b/opt/fhem/FHEM/98_SVG.pm
@@ -1,5 +1,5 @@
##############################################
-# $Id$
+# $Id: 98_SVG.pm 22457 2020-07-24 07:22:09Z rudolfkoenig $
package main;

use strict;
@@ -494,7 +494,7 @@ SVG_PEdit($$$$)
       $lw =~ s/.*stroke-width://g;
       $lw =~ s/"//g;
     }
-    $o .= SVG_sel("width_$idx", "0.2,0.5,1,1.5,2,3,4,8,12,16,24",($lw ? $lw:1));
+    $o .= SVG_sel("width_$idx", "0.2,0.5,1,1.5,2,2.5,3,4,8,12,16,24",($lw ? $lw:1));
     $o .= "</td></tr>";
     $output[$idx] = $o;
   }
@@ -964,8 +964,10 @@ SVG_calcOffsets($$)
   if($zoom =~ m/^(\d+)?hour/) {
     my $nHours = $1 ? ($1-1) : 0;
     if($endPlotNow) {
+      $off = !$off ? AttrVal($FW_wname, 'svgOffHour', 0) : $off;
       my $t = int(($now + ($off-$nHours-1)*3600)/300.0)*300 + 300;
-      my @l = localtime($t);
+      my $_t = $off && $off == AttrVal($FW_wname, 'svgOffHour', 0) ? int(($now + (0-$nHours-1)*3600)/300.0)*300 + 300 : $t;
+      my @l = localtime($_t);
       $SVG_devs{$d}{from} = SVG_tspec(@l);
       @l = localtime($t+$nHours*3600+3599);
       $SVG_devs{$d}{to}   = SVG_tspec(@l);
@@ -979,8 +981,10 @@ SVG_calcOffsets($$)

   } elsif($zoom eq "qday") {
     if($endPlotNow) {
+      $off = !$off ? AttrVal($FW_wname, 'svgOffQDay', 0) : $off;
       my $t = int($now/300)*300+300 + ($off-1)*21600;
-      my @l = localtime($t);
+      my $_t = $off && $off == AttrVal($FW_wname, 'svgOffQDay', 0) ? int($now/300)*300+300 + (0-1)*21600 : $t;
+      my @l = localtime($_t);
       $SVG_devs{$d}{from} = SVG_tspec( 0,$l[1],$l[2],$l[3],$l[4],$l[5]);
       @l = localtime($t+21600-1);
       $SVG_devs{$d}{to}   = SVG_tspec(59,$l[1],$l[2],$l[3],$l[4],$l[5]);
@@ -996,8 +1000,10 @@ SVG_calcOffsets($$)
   } elsif($zoom =~ m/^(\d+)?day/) {
     my $nDays = $1 ? ($1-1) : 0;
     if($endPlotNow) {
+      $off = !$off ? AttrVal($FW_wname, 'svgOffDay', 0) : $off;
       my $t = int($now/300)*300+300 + ($off-$nDays-1)*86400;
-      my @l = localtime($t);
+      my $_t = $off && $off == AttrVal($FW_wname, 'svgOffDay', 0) ? int($now/300)*300+300 + (0-$nDays-1)*86400 : $t;
+      my @l = localtime($_t);
       $SVG_devs{$d}{from} = SVG_tspec(0,$l[1],$l[2],$l[3],$l[4],$l[5]);
       @l = localtime($t+(1+$nDays)*86400-1);
       $SVG_devs{$d}{to}   = SVG_tspec(59,$l[1],$l[2],$l[3],$l[4],$l[5]);


Hat bisschen Seiteneffekte auf das angezeigte Datum des Day-SVG, aber direkt den get-parameter 'off' modifizieren hat das Datum mMn noch blöder verändert (auch wenn dadurch offsets wie 0.101 möglich wären welche gerade nicht funktionieren, bei dem diff schaut nur 0.1 0.2 usw. gut aus bzgl. der timeline) - Evtl. hast du da ja noch eine Idee, habe das Modul nur fix überflogen für diese Änderung

Grüße  8)

xenos1984

Geringfügig off-topic, aber da ich es gerade bei den Beispiel-Grafiken sehe: Wie hast du denn die Symbole neben den Labels eingebaut?

rapster

Zitat von: xenos1984 am 30 August 2020, 17:16:05
Geringfügig off-topic, aber da ich es gerade bei den Beispiel-Grafiken sehe: Wie hast du denn die Symbole neben den Labels eingebaut?

Mit dem Unicode Variation Selector kannst du die meisten Unicode Emojis als Text behandeln lassen, dadurch werden se in der richtigen Farbe vom Label dargestellt.

Also einfach das Unicode Smiley irgendwo in den Label Text rein und direkt dahinter, da ich hier keine Smileys Posten kann Beispiel als Bild


xenos1984

Ah, nicht schlecht, danke für die Info! Das scheint hier sogar zu funktionieren, nur im Plot macht er die Farbe noch nicht richtig... Da muss ich wohl noch etwas basteln ;)
🖳︎🛏︎🛋︎

rapster

 :)
Dass die Farben bei dir im plot nicht gehen ist komisch, hab deine icons mal bei mir getestet und funzt 1A :) (bild)

xenos1984

Bei mir klappt es jetzt auch. Das Problem war, dass Firefox scheinbar seinen eigenen, farbigen Emoji-Font benutzen wollte (auf http://en.wikipedia.org/wiki/Transport_and_Map_Symbols ebenfalls). Mit einem anderen Font (Noto Sans) klappt es bei mir.

rapster


rudolfkoenig

#1 ist kein Problem, habe eingecheckt.

#2 ist aus mehreren Gruenden ein Problem:
- es muesste fuer alle Zoomstufen implementiert werden (wir haben 8, und nicht 3)
- es ist kein userAttr, sonder "echtes" Attribut und muss dokumentiert werden.
- ich sehe die Seiteneffekte, und bin nicht begeistert.

Die bessere Lesbarkeit koennte man mAn mit JavaScript-Code / Mausposition besser loesen, allerdings waeren dann die Touchscreen-Leute raus. Habe keine gute Idee, bin aber von dem aktuellen Vorschlag noch nicht ueberzeugt. :)