SVG: Probleme mit "endPlotNow" und "fixedrange"

Begonnen von vbs, 22 März 2015, 18:47:22

Vorheriges Thema - Nächstes Thema

vbs

Ich habe nochmal einiges mit den SVG-Plots ausprobiert und mir sind noch einige seltsame Sachen aufgefallen. Ich weiß nicht so recht, wie ich die einordnen soll und ich bin leider auch im Quellcode nicht wirklich schlau geworden. Ich vermute, dass zumindest einige der Effekte auch zusammen hängen.

Ich berichte mal einfach, was mir aufgefallen ist. Vielleicht weiß jemand von euch (Rudi?), wo man da ansetzen muss. Ich hab es leider nicht raus bekommen.

Ich nutze normalerweise die "endPlot*"-Attribute, damit alle Plots heute bzw. jetzt enden. Wenn ich jedoch einen Wochenplot (fixedrange=week) habe, dann wird dieser durch "endsPlotNow" durcheinander gebracht. Bei den folgenden Plots gibt es täglich immer einen Datenpunkt um 23:59:58.
Aber der Reihe nach: So sieht der Plot aus NUR mit "endPlotToday" (ohne "endPlotNow"). Das ist meiner Ansicht nach korrekt:
(http://forum.fhem.de/index.php?action=dlattach;topic=35352.0;attach=29737)

Wenn ich jetzt aber auch noch "endPlotNow" setze (weil ich es für andere Plots braucht), dann sieht der gleiche Plot so aus:
(http://forum.fhem.de/index.php?action=dlattach;topic=35352.0;attach=29741)

Also da stimmt jetzt mMn die Beschriftung auf der x-Achse ("21. Mar" etc.) nicht mehr ganz. Irgendwie verrutscht.

Wenn ich jetzt fixedrange="7days" setze (sollte ja wohl ähnlich sein wie "week"), dann sieht das so aus:
(http://forum.fhem.de/index.php?action=dlattach;topic=35352.0;attach=29739)

Da scheint jetzt die Beschriftung ganz gut zu passen, jedoch scheinen nun die "Ticks" auf der x-Achse leicht verrutscht zu sein.

Wenn ich statt "7days" mal "9days" mache, dann kommt das heraus:
(http://forum.fhem.de/index.php?action=dlattach;topic=35352.0;attach=29743)

Da fehlt jetzt die Beschriftung fast vollständig und die Ticks sind auch nicht mehr bündig mit den Daten :/ Leider stecke ich da nicht tief genug im Code, um das zu verstehen. Ich habs versucht... Wenn Rudi da mal reinschauen könnte, wäre das super. Im Endeffekt geht es um das Zusammenspiel von fixedrange (week, ndays) und endplotnow/endplottoday.

rudolfkoenig

Das SVG Modul kennt nur die per Zoom erreichbaren Stufen (qday/day/week/month/year), sowas wie 9 Tage nicht. Bin auch noch nicht ueberzeugt, ob sowas sein muss. Die Kombination aller Attribute (endPlotNow/fixedrage/usw) habe ich nicht durchgetestet, dafuer wuerde ich aber ein Patch entgegennehmen.

vbs

Zitat von: rudolfkoenig am 22 März 2015, 23:12:16
Das SVG Modul kennt nur die per Zoom erreichbaren Stufen (qday/day/week/month/year), sowas wie 9 Tage nicht. Bin auch noch nicht ueberzeugt, ob sowas sein muss.
Doch doch, das kam wohl 2013 rein: http://forum.fhem.de/index.php?topic=15640.0

Ich würde ja gerne mit einem Patch aushelfen, aber ich stecke da leider nicht tief genug drin, um da sinnvoll etwas an den grundlegenden Berechnungen von SVG ändern zu können.

rudolfkoenig

ZitatDoch doch, das kam wohl 2013 rein
Na das man days auf 9 stellen kann ist mir schon klar, wie du das aber selbst bemerkt hast, wird dann keine gescheite X-Achse generiert.

aber ich stecke da leider nicht tief genug drin
Wenn man was unbedingt haben will, dann kann man sich reinarbeiten, such mal nach $ddur in SVG.pm.
Bin aber der Ansicht, dass 9days nicht unbedingt perfekt unterstuetzt werden muss.

vbs

Hi Rudi,

ich hab mir nochmal ein paar Sachen angeschaut und das erste Problem (verrutschte x-Achsen-Beschriftung bei week-Plot + endplotnow) hängt wohl hiermit zusammen (98_SVG.pm, ~Zeile 1521):
  if(AttrVal($FW_wname, "endPlotNow", undef) && $ddur>1.1 && $ddur<7.1) {
    my $now = time();
    $initoffset -= ($now+fhemTzOffset($now))%86400; # Forum #25768
  }


Wenn ich das rausnehme, dann passen die Beschriftungen in meinem Fall. Vermutlich hat die Korrektur, die da an $initoffset vorgenommen wird, ja aber einen tieferen Sinn. Zwei Fragen jedoch, die sich mir da Stellen:

  • $initoffset wird im Code nur verwendet, um die Position der Beschriftung und der gestrichelten Linien auf der x-Achse zu verschieben. Jedoch wird $initoffset mMn nie auf die zu plottenden Daten angewendet. Also was immer man mit $initoffset anstellt, führt dazu, dass die Beschriftung nicht mehr zu den Daten passt.
  • Laut commandref zu endplotnow "If this FHEMWEB attribute is set to 1, then day and hour plots will end at current time.", sollte sich endPlotNow nur auf Day- und Hour-Plots auswirken. Durch die Bedingung "$ddur>1.1 && $ddur<7.1", wirkt sich die obige Korrektur von $initoffset jedoch auch auf week-Plots aus, da dort $ddur < 7.1 ist.

Vielleicht kannst du dich ja noch an deinen Fix aus Thread #25768 erinnern und etwas Licht ins Dunkel bringen...

rudolfkoenig

ZitatAlso was immer man mit $initoffset anstellt, führt dazu, dass die Beschriftung nicht mehr zu den Daten passt.

I wuerde es so sagen: $initoffset muss so angepasst werden, dass die Beschriftung zu den Daten passt.
endPlotNow wird nur bei hour/qday/day beruecksichtigt, insofern sollte die erwaehnte Korrektur nicht bei week aktiv sein. Das habe ich auch geaendert, statt 7.1 wird auf 6.9 geprueft (sollte auch bei der Zeitumstellung wahr sein).
Leider kann man mit Nday auch mehr als eine Woche spezifizieren, das ist nicht konsistent.

Ich habe endPlotNow/endPlotToday auch fuer die einzelnen SVG eingefuehrt, aber nicht ausfuehrlich getestet, kannst du bitte berichten?

vbs

Danke! Das sieht soweit erstmal sehr gut aus! Ich werde das weiter beobachten.

Dass man jetzt endPlot* pro Plot einstellen kann, finde ich auch sehr gut.