SVG Graph: Patch: Achsenbeschriftung mit vollen Stunden

Begonnen von breaker27, 14 September 2022, 20:20:39

Vorheriges Thema - Nächstes Thema

breaker27

Hallo,

ich möchte in einem normalen SVG Graph, der also einen Tag anzeigt und "mit der Zeit scrollt" ("jetzt" ist rechts) die Beschriftung der x-Achse in vollen Stunden haben.

Aktuell ist je nach Uhrzeit z.B. beschriftet: "11:20, 12:20, 13:20"... oder zu anderer Uhrzeit "11:45, 12:45, 13:45"...
Ich möchte schlicht "11:00 12:00 13:00 ..." da stehen haben, aber die Darstellung soll ganz normal die letzten 24 Stunden anzeigen (also nicht "fixedrange day").

Geht das? Ich finde die Beschriftung insbesondere sehr unschön (s. Screenshot), wenn ich stündliche Werte zur vollen Stunde habe, z.B. bei meinem Regensensor.

breaker27

#1
So, ich habe es jetzt für mich mal umgesetzt. Der Patch ist im Anhang.

Nochmal zusammengefasst sehe ich zwei Vorteile der Darstellung:
- sie ist verständlicher, weil man mmg. "im Stundenraster denkt" bzw. normalerweise einen Wert zu einer vollen/halben Stunde nachschauen will
- die Darstellung ändert sich bzgl. der Achsenbeschriftung nicht, wenn man nach 10 Minuten oder so die Seite aktualisiert, sondern der Graph sieht "immer gleich" aus, und scrollt halt nur

Ggf. könnte man das vielleicht auch noch als Option schaltbar machen.

Wie findet ihr die Lösung?

rudolfkoenig

Die zwei "Daumen hochs" habe ich uebersehen, da in meinem Forum-Style diese nicht angezeigt werden.
Da wohl 3 Leute das Feature gerne haetten, habe ich die Funktionalitaet (einzuschalten mit dem Attribut endPlotNowByHour) implementiert, und eingecheckt.

breaker27

Habs ausprobiert. Funktioniert wie erwartet. Danke!  :)

Eine Kleinigkeit ist mir noch aufgefallen: Der Strich ganz links fehlt (während die Zeitangabe unten sichtbar ist). Wird also 1 Strich zu wenig gemalt. Siehe Screenshot.
Ob das in den anderen Darstellungen, die die x-Achse irgendwie besonders behandeln, auch auftritt, hab ich nicht geprüft (aber denke dann wäre es schon jmd. aufgefallen).

rudolfkoenig

Die Striche an den markierten Stellen habe ich in der allerersten, noch nicht freigegebenen Version reingebaut, und dann gemerkt, dass sie die runden Ecken, die ich damals als wesentliches Design-Element betrachtet habe, kaputtmachen.

breaker27

OK, macht Sinn, wenn der Strich zu weit links (also in der abgerundeten Ecke) wäre.

Dann sollte das letzte Label (wenn es weit links an der Ecke ist) auch besser fehlen, da es nun zu ungünstigem Zeitpunkt (ein paar Minuten vor der vollen Stunde) überlappen kann.
S. Screenshot ("Sep" und "14" überlappen).

rudolfkoenig

Lustigerweise wurde das Problem schon gefixt, wegen Rundungen war das aber fuer endPlotNow nicht wirksam.
Habs gefixt und eingecheckt.

breaker27

In der Doku zu FHEMWEB hab ich noch gefunden, dass endPlotNow und endPlotToday als Default zu setzen sind. Da sollte endPlotNowByHour auch noch erweitert werden. Hatte das Attribut jetzt bei all meinen SVG-Instanzen gesetzt, und per Default wäre praktischer.

breaker27

Mir ist dazu noch eine Idee gekommen. Das sind ja Default-Werte für ein spezifisches Modul (in dem Fall SVG). Wäre es nicht generell sinnvoll, dass man irgendwie global Defaults definieren kann für Devices bestimmter Typen?

D.h. nicht "FHEMWEB" hat ein Attribut "endPlotNow", was der Default von Device-Type "SVG" darstellt, sondern "global" hat ein Attribut "deviceDefaults", und da trägt man als String ein z.B. "SVG:endPlotNow=1,blabla=2,... AndererTyp:a=x,b=y"
Das wäre dann generisch, und müsste auch nicht erweitert werden, wenn Devices neue Attribute bekommen.

Hab dazu nichts auf die Schnelle gefunden. Oder gibt es das schon?

rudolfkoenig

ZitatIn der Doku zu FHEMWEB hab ich noch gefunden, dass endPlotNow und endPlotToday als Default zu setzen sind.
Diesen Satz habe ich nicht verstanden.

Zitat[...] und per Default wäre praktischer.
Das mag fuer Dich zutreffen, aber dann muss ich ueberall das Attribut setzen.
Und da ich Maintainer des Moduls bin, darf ich die Voreinstellung bestimmen :)

ZitatWäre es nicht generell sinnvoll, dass man irgendwie global Defaults definieren kann für Devices bestimmter Typen?
Doch, aber ich habe noch keine gute Methode dafuer gefunden, die Vorgeschlagene ist mAn auch nicht gut.
Fuer diesen Fall gibt es aber eine Ausnahmen: da SVG urspruenglich Teil von FHEMWEB war, gibt es die SVG Attribute auch in FHEMWEB, und diese gelten dann als Voreinstellung fuer alle SVGs.
endPlotNowByHour habe ich vergessen in FHEMWEB hinzuzufuegen, das habe ich jetzt nachgeholt.
Da es nur ein "Platzhalter" ist, kann man als Workaround dieses Attribut in FHEMWEB als userAttr definieren, und es dann setzen.

breaker27

Ich meinte mit dem Satz, dass man in FHEMWEB offenbar die Default-Einstellung von endPlotNow und endPlotToday global einstellen kann. Das wusste ich vorher nicht, und hatte ich dann in der Doku entdeckt.

mit "und per Default wäre praktischer" meinte ich nicht, dass der Default generell endPlotNowByHour = 1 sein soll, sondern dass es praktischer wäre, wenn endPlotNowByHour als gobale Option in FHEMWEB auch zu setzen ist.
Aber das hast du ja nun hinzugefügt - Danke. :)