Hallo zusammen,
erst einmal ein großes Lob an eki: das Chart-Widget ist echt klasse!
Ich bin fast davor, die "klassische" FHEM-Ansicht gar nicht mehr zu benötigen, allerdings fehlt mir bei der Umsetzung der Graphen eine Funktionalität: Bei yticks bzw. min-/max-value bekomme ich bei der Einstellung "auto" zwar korrekt eine Skala, die die Bandbreite abdeckt, allerdings sehen gerade bei kürzeren Zeiträumen und geringen Veränderungen (wie jetzt gerade bei der Außentemperatur) die Ausschläge sehr extrem aus, auch wenn sie nur ein halbes Grad betragen. Auf der anderen Seite wäre es nicht sinnvoll, die Extrema fest einzutragen (also z.B. -15 und +40), weil dann geringere Veränderungen auf kleineren Bildschirmen gar nicht mehr auffallen.
In FHEM verwende ich dafür Perl-Code wie diesen hier:
{"[".(floor((minNum($data{min1},$data{min4})-.1)/5)*5).":".(ceil((maxNum($data{max1},$data{max4})+.1)/5)*5)."]"}
Damit bekomme ich für die Datenreihen 1 und 4 (in meinem Fall die Innen- und Außentemperatur) eine Temperaturskala, die bei dem jeweils nächstniedrigen bzw. -höheren Vielfachen von 5 anfängt bzw. aufhört, also z.B. bei Temperaturschwankungen von 17 bis 21 Grad wäre die Skala von 15 bis 25 Grad, bei -2 bis +19 von -5 bis +20 Grad usw.
Meine Frage wäre, ob sich so etwas auch für das Chart-Widget umsetzen ließe? Es muss (kann?) dann ja nicht die gleiche Perl-Funktion sein, aber vielleicht wäre ein Weg über Javascript denkbar? Oder man könnte die Skala dynamisch unter FHEM in einem Dummy generieren lassen und das Chart-Widget zieht sich die Skala aus einem Reading?
Würde mich sehr freuen, wenn es da eine (für die Programmierer nicht zu aufwändige) Lösung gäbe :)...
Viele Grüße,
F.
Für was steht "floor" und "ceil"?
Das sind Perl-Funktionen für den jeweils auf- bzw. abgerundeten Integer-Wert einer Fließkommazahl.
Sollte nicht so schwierig sein, bei der automatischen Einteilung der Ticks mache ich ja so was ähnliches schon. Ich schau mal.
Man kann sowas aber an sich schon durch Übergabe eines Arrays an Werten für data-minvalue und data-manvalue ererichen, oder?
Zumindest beim Simplechart Widget hab ich das mal genutzt und die Doku für die zwei Widgets sieht in diesem Teil sehr ähnlich aus...
edit: Erkärung von setstate dazu:
Zitat
So könnte eine Sommer/Winter Umschaltung aussehen. Wenn ein Wert im Graph größer als der erste Max-Wert ist, wird im Array der nächst höhere Max-Wert probiert, bis der Graph-Wert wieder innerhalb von Max liegt.
Bei minvalue ebenso, aber in die andere Richtung.
data-maxvalue aufsteigend angeben, data-minvalue absteigend
data-minvalue="[10,-25]"
data-maxvalue="[15,35]"
Könnte man dann so ausbauen:
data-minvalue="[20,15,10,5,0,-5,-10,-15]"
data-maxvalue="[5,10,15,25,30,35,40]"
Hab ich aber mit dem Chart Widget noch nicht getestet.
Das sollte da genauso gehe. Ist aber nicht unbedingt sehr intuitiv/nutzerfreundlich.
Stimmt, aber recht flexibel. ;)
Danke Euch für die Tipps und Hinweise, das mit dem erweitertenn Array werde ich mal ausprobieren!
Gruß,
F.