Neues Charting / Plotting - GUI Redesign?

Begonnen von Johannes, 20 Januar 2013, 12:06:52

Vorheriges Thema - Nächstes Thema

itheiss

Hallo Johannes,

danke für Deine tolle Arbeit!

Ich bin zwar immer noch in der Plannung meiner FHEM Installation, habe aber Deine Entwicklung immer aufmerksam verfolgt und auch schon ausprobiert :-)

Ich bin eigentlich ein großer Freund der Datenhaltung in einer Datenbank, möchte aber an dieser Stelle gerne eine Diskussion anregen ob die Speicherung der Daten nicht besser mit RRDtool vorzunehmen wäre, dass genau für diesen Zweck, nämlich Langzeitspeicherung von Zeitfolgen, ausgelegt wurde.

FHEM, RRDTool und ExtJs bringen alle notwendigen Voraussetzungen für die Nutzung von RRDtool mit.

Die Daten können über FHEM mit Hilfe von getstate und einem kleinen Perl Skript, dass per Cron aufgerufen wird, in RRD Files abgelegt werden. Eine ähnliche Implementierung in PHP ist hier zu sehen http://cpmills.com/2012/02/24/monitoring-temperatures-using-fhem-rrdtool-php-javascript/.

Mit der Version 1.4.6 des RRDtool ist der Export der RRD Daten in JSON möglich. Hier der direkte Aufruf des rrdtool (eine Implementierung in FHEM ist sicherlich nicht das Problem):


$ /opt/rrdtool-1.4.7/bin/rrdtool xport --json -s $(date -d "10 mins ago" +%s) -e $(date +%s) \
    --step 10 DEF:load_1min_avg=/var/lib/collectd/$(hostname -f)/load/load.rrd:shortterm:AVERAGE \
    XPORT:load_1min_avg
{ about: 'RRDtool xport JSON output',
  meta: {
    start: 1333111500,
    step: 10,
    end: 1333111500,
    legend: [
      ''
          ]
     },
  data: [
    [ 8.7720000000e+00 ],
    [ 9.0620000000e+00 ],
    [ 9.0540000000e+00 ],
    [ 8.9620000000e+00 ],
    [ 8.8840000000e+00 ],
    [ 9.0520000000e+00 ],
    [ 8.9760000000e+00 ],
    [ 8.0920000000e+00 ],
    [ 7.8240000000e+00 ],
    [ 7.8620000000e+00 ],
    [ 8.0440000000e+00 ],
    [ 8.4500000000e+00 ],
    [ 8.5720000000e+00 ],
    [ 8.6540000000e+00 ],
    [ 8.9960000000e+00 ],
    [ 9.2200000000e+00 ],
    [ 9.3700000000e+00 ],
    [ null ],
    [ null  ]
  ]
}


Und für ExtJs scheint das ganze auch einfach nutzbar zu sein. Siehe folgender Link: http://www.sencha.com/forum/showthread.php?244697-JSON-Array-Store-how-to-extract

Gerade wenn wir von einer Langzeitspeicherung der Daten von >2 Jahren aufwärts reden ist die Speicherung mit RRDtool einfach unschlagbar was Größe, Performance und auch Nutzbarkeit angeht!

Bin gespannt was Ihr für Meinungen habt!

Gruß

Ingo

tetzlav

Zitat von: Johannes schrieb am Di, 02 April 2013 21:16Das Problem ist also nicht der Chart sondern dein Gerät, dass nur 2 mal Messwerte prodziert hat. Würde es z.B. alle 5 Minuten einen Wert schicken, dann hättest du dir die Frage vermutlich garnicht gestellt :-)
Es gibt in gplot eine Kurvendarstellung als "steps", wo eben genau solche Kurven wie gewünscht gezeichnet werden. Die Werte werden als Gerade dargestellt und erst ab dem neuen Wert wird eine Stufe zu/mit dem neunen Wert . Evtl. wäre das auch einen sinnvolle Erweiterung in frontend?

Grüße

tetzlav

Zitat von: itheiss schrieb am Fr, 05 April 2013 09:15Gerade wenn wir von einer Langzeitspeicherung der Daten von >2 Jahren aufwärts reden ist die Speicherung mit RRDtool einfach unschlagbar was Größe, Performance und auch Nutzbarkeit angeht!

Ich würde RRDtool in FHEM ebenfalls begrüßen - auch wenn die gesamte Konfiguration rund um collectd+rrd damals in z.B. OpenWRT ein Graus war. Dafür wurden aber sogar Jahrescharts auf einem Linksys Router mit MIPS@166MHz(!!!) mit wenigen MB großen RRDatenbanken in ausreichender Geschwindigkeit dargestellt. Momentan ist selbst mein VIA-C7@1800Mhz mit der MySQL-Abfrage und der Darstellung von zigtausend Werten von FHEM über ein Jahr recht gut beschäftigt.

Ein Nachteil war - soweit ich weiß - die Kompression der RRDatenbanken. Rrdtool hat die Werte durch Mittelung über gewisse Zeiteinheiten komprimiert, wodurch zeitliche Auflösung verloren geht. Das konnte man auch deaktivieren, wobei die Datenbanken dann erheblich größer wurden. Wen interessiert denn noch die Temperatur im Wohnzimmer vom 5.April 2009 um genau 12:53Uhr wenn man Min/Max/Avg-Werte von diesem Tag hat...? ;)

Grüße

ThorstenH

Schon mal mit Indizes probiert? Das sollte die Abfrage beschleunigen.
Z. B. Hier: http://dev.mysql.com/doc/refman/5.1/de/create-index.html

Die zu übertragende Datenmenge wird zwar nicht kleiner, aber die Abfrage geht schneller.
Um die Datenmenge zu verkleinern, könnte man zusätzlich gruppieren (Group by) und avg/min/max werte abfragen.

Einen Versuch wäre es imho wert.

Zur steps Funktion in gplot: genau das habe ich gemeint.

Thorsten

Johannes

Hallo zusammen,

Zwecks RRDTool. Meine persönliche Meinung dazu:
Wenn es jemand in FHEM integriert, könnte ich dazu eine Schnittstelle mit dem Frontend entwickeln.

ABER:
Ob der Aufwand wirklich lohnt?
Nochmal zur Verdeutlichung, da es glaube ich, nicht ganz klar ist:

Zitat von: spamkiller schrieb am Fr, 05 April 2013 13:12Schon mal mit Indizes probiert? Das sollte die Abfrage beschleunigen.
Z. B. Hier: http://dev.mysql.com/doc/refman/5.1/de/create-index.html

Alle für DbLog vorbereiteten Datenbanktypen haben schon einen Index auf der History Tabelle und die wichtigen Spalten. Die Abfragen sind bereits schnell.

Zitat von: spamkiller schrieb am Fr, 05 April 2013 13:12Um die Datenmenge zu verkleinern, könnte man zusätzlich gruppieren (Group by) und avg/min/max werte abfragen.

Genau das ist bereits integriert. Ich habe DbLog erweitert um diese Funktionen, so dass man:
  * für eine Stunde
  * für einen Tag
  * für eine Woche
  * für einen Monat
  * für ein Jahr

die folgenden "Statistiken" abrufen kann:

  * Max-Wert
  * Min-Wert
  * Average-Wert
  * Summen-Wert
  * Anzahl-Wert (Count)

Nutzbar ist das im Frontend in der Erstellung der Charts bei einer Achse über "Statistics".
Werft mal einen Blick rein...

Ein Beispiel:
Mein Stromzähler, Messwert ist der Tagesverbrauch ("day_kwh"), abgefragt mit der "Statistik" "Day Max" über einen Zeitraum von einen Monat ergibt z.B. 30 Messwerte.
Oder für einen Zeitraum Jahr logischerweise 365 Messwerte.
Das sind Zahlen, die ein Browser locker handeln kann.
Solche abgefragten Chart sind schnell. Nur bei der Jahresdarstellung gibt es einen Bug, der das ganze noch etwas ausbremst. Darum kümmer ich mich noch bei Gelegenheit.

Diese Funktionen sollten einige Fragestellungen von euch jetzt schon lösen können.
Und so lange meine Datenbank nicht im zweistelligen Gigabyte Bereich ist, habe ich auch erstmal keine Probleme damit, alles zu loggen was ich bekomme.
Von daher sehe ich die Implementation von RRDTool nicht wirklich als wichtig oder Gewinnbringend an.

Unterscheiden von diesen Statistikfunktionen muss man aber die Generalisierungsfunktion, über die ich gesprochen habe. Mit der Generalisierung bekommt man bei deutlich reduzierter Datenmenge ein sehr ähnliches Abbild zu dem original Datensatz. Mit Statistiken gehen die eigentlichen bzw. ursprünglichen Charakterisitken eines Graphen ja verloren. Bei der Generalisierung bliebt diese aber weitestgehend erhalten. Daher denke ich, wäre das eine sehr nette Zusatzfunktion.


Zitat von: spamkiller schrieb am Fr, 05 April 2013 13:12Zur steps Funktion in gplot: genau das habe ich gemeint.

Packe ich auf meine Todo Liste.

Grüße,
Johannes

tetzlav

Zitat von: spamkiller schrieb am Fr, 05 April 2013 13:12Schon mal mit Indizes probiert? Das sollte die Abfrage beschleunigen.
Z. B. Hier: http://dev.mysql.com/doc/refman/5.1/de/create-index.html

Interessant was so ein CREATE INDEX Search_Idx ON `fhem`.`history` (DEVICE, READING, TIMESTAMP);
so bringt! Das hatte ich beim Anlegen ganz vergessen...

Danke für den Tipp!

Zwer2k

Hallo Johannes,

Zitat von: Johannes schrieb am Do, 04 April 2013 19:15
Zitat von: Jurij schrieb am Do, 04 April 2013 01:01- Charts nach Räumen ablegen (z.B. Baumansicht)
Gute Idee, gefällt mir. Was passiert dann mit den gespeicherten CHarts in der aktuellen, mehr oder weniger ungruppierten Ansicht? Wo sollen die Charts da auftauchen?
Zusätzlicher Ordner "Unsorted", wie in FHEM?


Hier die Anleitung wie man Cpan, DBI und somit DbLog auf die FritzBox bekommt
http://www.fhemwiki.de/wiki/Cpan_auf_Fritzbox
Eventuell bekommt es auch einer ohne Freetz hin.

Gruß
Jurij

Johannes

Hallo Puschel,


Zitat von: Puschel74 schrieb am Mi, 03 April 2013 20:27Nur das

"off": "0",
"Ein": "1",
"Ein<<addLog": "1",
"Aus": "0",
"Aus<<addLog": "0",
"open": "10",


verweigert sich noch.

So landet der Eintrag in der DB.


(siehe Anhang / see attachement)


Ich habe das gerade mal nachgestellt bei mir und habe keine Probleme. Habe mir extra Einträge in die DB gemacht mit dem genauen Wortlaut von dir ("Aus<<addLog"), und dann die userconfig angepasst.
Was soll ich sagen, es funktioniert. Prüf mal auf Tippfehler! In dem Screenshot sieht mir das fast so aus, als ob da Leerzeichen zwischen den spitzen klammern sind...

Grüße,
Johannes

Puschel74

Hallo,

@Johannes

danke für die Unterstützung.

Bei mir sieht die userconfig.js so aus:


(siehe Anhang / see attachement)


und so der Chart:


(siehe Anhang / see attachement)


und so der weblink:


(siehe Anhang / see attachement)


Ich hab aber auch noch 5.3 drauf und noch kein update gemacht.

Ich bin für jede Idee dankbar.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Johannes

Zitat von: Johannes schrieb am Mo, 08 April 2013 18:48Prüf mal auf Tippfehler! In dem Screenshot sieht mir das fast so aus, als ob da Leerzeichen zwischen den spitzen klammern sind...

Grüße,
Johannes

Puschel74

Hallo,

jaja, immer diese Probleme zwischen Stuhl und Bildschirm ;-)

Ich hätt ja auch nur im FHEM-Logfile nachschauen brauchen ... (no comment)

Der Logeintrag sieht so aus:

Ein______<<_addLog

6!Leerzeichen und zwischen << und addLog nochmal eins.

Danke Johannes für deine Geduld.

Jetzt klappts auch mit meinem Chart.

Btw.: Um die userconfig.js neu einzulesen reicht es das Frontend neu zu starten oder wann wird die neu eingelesen bzw. wann
werden die Änderungen aktiv?

Grüße

Edith: Musste _ einbauen da das Forum Leerzeichen verschluckt.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Johannes

Hallo Puschel,

Kein Problem, habs auch erst auf den zweiten Blick gesehen.
Hauptsache jetzt klappts.

Die userconfig.js wird übrigens bei einem Reload des Browsers neu eingelesen.
Manche Browser cachen allerdings einige Inhalte. Wenn man also absolut sicher sein will, die Änderungen zu sehen, sollte man im Browser den Cache löschen und dann die Seite neuladen.


Puschel74

Hallo,

tiptop. danke dir für die Info Johannes.

(Jetzt noch ein "intelligenter" Zoom oder sowas wie eine logarithmische Achse und das Frontend wär perfekt) ;-)

Oder wie löst ihr das wenn ihr die Vorlauftemp. der Heizung (ca. 40°C) und den Gasverbrauch (ca. 0.04 m3) in einem
Chart darstellen wollt?
Ich denke mal ich hab wieder was übersehen oder denke mal wieder zu kompliziert.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Johannes

Update:

  * Die Auswahl der X-Achse ist rausgeflogen, denn die hat glaube ich niemand jemals auf einen anderen Wert als "Timestamp" gesetzt. Timestamp ist jetzt also default.
    Dafür hat die Leiste jetzt etwas mehr Platz bekommen

  * Ich habe jetzt die Steps Funktion integriert, ähnlich wie in gplot. Zum aktivieren einfach das Häckchen "Steps" auf der gewünschten Achse setzen.

  Vorher:

 
(siehe Anhang / see attachement)


  Nachher:

 
(siehe Anhang / see attachement)



Zur Funktion:
Ist Steps aktiviert, wird zwischen 2 Messwerten ein zusätzlicher Messwert eingefügt. Dieser hat den selben Wert wie der folgende, liegt aber zeitlich 1 Sekunde vor diesem. Dadurch werden die Treppenstufen dargestellt. Dadurch werden allerdings die angezeigten Punkt quasi verdoppelt. Ein Chart mit Steps wird daher minimal langsamer dargestellt wie der selbe Chart ohne Steps.


Update wie üblich:


update thirdparty http://fhem.svn.sourceforge.net/viewvc/fhem/trunk/fhem/www/frontend frontend

Johannes

Neue Umfrage :-)

Votet für euer Features!