hübsche Charts (ähnlich Fronius solarweb)

Begonnen von sn0000py, 12 Februar 2020, 10:30:54

Vorheriges Thema - Nächstes Thema

sn0000py

Hallo bin auf der suchen nach so halbwegs gut integrierbaren Charts ähnlich dem solarweb von Fornius.

Mit den "hauseigenen" Charts siehts einfach weit nicht so schön aus.
Was auch toll wäre wäre so eine Möglichkeit die Charts als Balkendiagramm eines Moants zu sehen (Jeder tag ein Balken) und per klick komme ich in die Tagesansicht rein.

Wers nicht kennt anbei paar Screenshoots


eki

#1
Die "hauseigenen" Charts kommen ja teilweise von mir. Daher meine Frage, was Dir dabei wirklich fehlt (bzw. was nicht "schön" ist). Das was in Deinen Bildern zu sehen ist, ist, soweit ich das sehe, durchaus mit den "hauseigenen" Charts (widget_chart) möglich (und noch viel mehr  ;)).

sn0000py

Ah okay gut zu wissen :D

1. Also glaub der erste wichtigste Punkt wäre mal, die Linie müsste mal geglättet werden.
2. Kann ich eigentlich im Chart rechnen? oder muss ich dazu die History Tabelle updaten?
3. Kann ich so ganz komische Aussreisser auch im Chart filtern? statt einem gültigen Wert von 0 bis 12000 aufeinmal 200000000 drinnen - das sollte einfach ignoriert werden.
4. wie schaffe ich es von einem Diagramm wo ich jeden Tag als Balken darstelle, bei einem Klick auf einen Tag dann in die Tagesübersicht zu gelangne?

eki

Vielleicht solltest Du mal das Wiki dazu (https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=2ahUKEwjj2YWP4MvnAhUKyaYKHdA4AZIQFjAAegQIBRAB&url=https%3A%2F%2Fwiki.fhem.de%2Fwiki%2FFTUI_Widget_Chart&usg=AOvVaw0GcccSdBOMCp9OnVkEVR4J) durchlesen.
Vielleicht mal ein paar Inputs dazu, wie das Chart Widget funktioniert und was bei mir so als Grundkonzept für das Widget angenommen wurde:
Die Daten kommen immer aus FHEM (entweder aus Files oder Datenbank Logs), die holt sich das Chart Widget mit einem speziellen HTTP GET Befehl von FHEM ab. Mit Logproxy kann man in FHEM relativ viel mit Rohdaten machen (z.B. rechnen). Das Chart sollte hauptsächlich die Aufgabe haben, diese Daten graphisch darzustellen hier auch noch mal irgend etwas per Berechnung zu verändern, würde aus meiner Sicht zu Verwirrung führen.
Zu 1: Es gibt verschiedene Glättungsfunktionen (z.B. Cubit splines (ptype='cubic'))
Zu 2: Wie oben erwähnt, geht das mit Logproxy, wenn Du mir mal eine Beispielaufgabe formulierst, kann ich Dir dabei auf die Sprünge helfen. Das Chart Widget selbst kann aus den Daten (für die Überschriften) auch ein paar Berechnungen durchführen (Max/Min/Average).
Zu 3: Würde ich auch mit Logproxy machen, Auch hier kann ich Dir bei etwas mehr Details versuchen zu helfen.
Zu 4: Es gibt das feature "data-timeranges", damit kannst Du Dir beliebige Zeiträume in ein Menu legen. Es gibt die rechts/links und zoom Buttons und in der neuesten Version auch das Schieben des Charts und Zoomen per Maus/Fingergeste. Klick auf einen Tag im Chart und dann "Aufziehen" auf genau diesen Tag ist bisher nicht möglich, hört sich aber interessant an, ich denke mal nach, wie man das einbauen könnte.

sn0000py

okay super

also mit dem data-ptype="cubic" hat sich mal nicht wirklich viel sichtbares getan, ich vermute das ich einfach zu viele (zu genaue) Daten habe.
Vermute das kann ich auch mit dem logProxy bearbeiten?

Hast vielleicht sogar ein Beispiel wie man mit dem logProxy richtig
1. Aussreisser eliminieren kann
2. und dann optional die Kurve auf 15 minuten glätten kann?

Tedious

Warum das Rad neu erfinden - für sowas wurde Grafana entwickelt...
FHEM auf Proxmox-VM (Intel NUC) mit 4xMapleCUN (433,3x868) und Jeelink, HUE, MiLight, Max!, SonOff, Zigbee, Alexa, uvm...

sn0000py

Ohh das schaut auch gut aus ... hab zwar mittlerweile schon rausgefunden wie ich meine Ausreisser per logProxy rausfilterer, aber das zusammenzählen noch nicht ;)

werde mir mal das Docker File zum grafana runterladen und mal reinschmöckern :D

eki

Das Ausdünnen würde am besten über das "postFunc" Feature von logProxy gehen. In der Columnspec müsste dann so etwas wie:
data-columnspec = 'FileLog:<devspec>,postFn="logProxy_reducePoints":<alte devspec>'
stehen. und die Funktion könnte so aussehen (in 99_myUtils.pm einfügen). In der Funktion könnte man natürlich auch gleich die Ausreißer wegfiltern.

sub logProxy_reducePoints($$) {
  my($devspec,$array) = @_;

  my @outarray;
  my $start = $array->[0]->[0];
  my $minsecs = 60*60; # Minimum distance between plots in seconds (here 15 minutes)
  my $acttime;
  @outarray[0] = $array->[0];
 
  foreach my $point ( @{$array} ) {
  $acttime = $point->[0];
if ($acttime > ($start+$minsecs)) {
$start = $acttime;
push(@outarray,$point);
}
  }   

  return \@outarray;
}


Das hat außerdem noch den Vorteil, dass die Ausdünnung schon auf dem FHEM Server passiert und der Client gar nicht mit vielen Plotpunkten belastet wird.