FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: breaker27 am 14 September 2022, 20:20:39

Titel: SVG Graph: Patch: Achsenbeschriftung mit vollen Stunden
Beitrag von: breaker27 am 14 September 2022, 20:20:39
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.
Titel: Antw:SVG Graph: Achsenbeschriftung mit vollen Stunden möglich?
Beitrag von: breaker27 am 24 September 2022, 21:54:41
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?
Titel: Antw:SVG Graph: Patch: Achsenbeschriftung mit vollen Stunden
Beitrag von: rudolfkoenig am 28 September 2022, 16:16:20
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.
Titel: Antw:SVG Graph: Patch: Achsenbeschriftung mit vollen Stunden
Beitrag von: breaker27 am 29 September 2022, 08:48:50
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).
Titel: Antw:SVG Graph: Patch: Achsenbeschriftung mit vollen Stunden
Beitrag von: rudolfkoenig am 29 September 2022, 11:04:51
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.
Titel: Antw:SVG Graph: Patch: Achsenbeschriftung mit vollen Stunden
Beitrag von: breaker27 am 29 September 2022, 13:57:21
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).
Titel: Antw:SVG Graph: Patch: Achsenbeschriftung mit vollen Stunden
Beitrag von: rudolfkoenig am 30 September 2022, 11:50:29
Lustigerweise wurde das Problem schon gefixt, wegen Rundungen war das aber fuer endPlotNow nicht wirksam.
Habs gefixt und eingecheckt.
Titel: Antw:SVG Graph: Patch: Achsenbeschriftung mit vollen Stunden
Beitrag von: breaker27 am 03 Oktober 2022, 20:47:38
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.
Titel: Antw:SVG Graph: Patch: Achsenbeschriftung mit vollen Stunden
Beitrag von: breaker27 am 04 Oktober 2022, 08:36:15
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?
Titel: Antw:SVG Graph: Patch: Achsenbeschriftung mit vollen Stunden
Beitrag von: rudolfkoenig am 04 Oktober 2022, 12:08:33
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.
Titel: Antw:SVG Graph: Patch: Achsenbeschriftung mit vollen Stunden
Beitrag von: breaker27 am 08 Oktober 2022, 09:52:42
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. :)