Hinweis: Schöne Alternative für Charts/Plots mit Grafana und DBLog (MySQL)

Begonnen von Thyraz, 08 Oktober 2017, 15:02:38

Vorheriges Thema - Nächstes Thema

kadettilac89

fehlermeldung ... ich hab das nur aus dem bugreport übernommen. hab aktuell keinen zugriff auf ein mysql zum testen.

aktuelles setup: dashboard ist utc und es geht 1 stunde "nach"? und im dashboard ist aktuell utc eingestellt (wegen roter warnung)? wenn du das dashboard auf local browser time stellst sollte das doch passen, oder?

mir fehlt etwas die übersicht, welches tool welche zeitzone hat. die eine stunde differenz ist CET <--> UTC. wenn du um 9.21 im dashboward 8.21 UTC angezeigt bekommst ist das ja richtig.

ChrisW

Hmmm also ich weiss auch nicht mehr weiter also
FHEM Filelog und mysql sagen 2019-01-23 08:09:58 22
In grafana mit Einstellung UTC und Dashboatd Browser Time ist das 22c bei : 2019-01-23 09:09:58 22.00 c

Die anzeige in der Grafik simmt es geht durch bis zur richtigen Uhrzeit also 10:49 Uhr
Raspberry PI3 mit allem möglichen.

Happyuser20

Hallo

Versuche mein Glück jetzt mal mit dem Problem was ich habe hier im Forum.
Das sieht so aus. Habe einen S0 Stromzähler, der schreibt die Daten in meine MariaDB und speichert die so ab.

Zitat
id | channel_id   | timestamp | value
1188122 | 16 | 1509134552863 | 1
1188117 | 16 | 1509134355607 | 1
1188116 | 16 | 1509134306097 | 1
1188115 | 16 | 1509134258030 | 1
1188113 | 16 | 1509134217868 | 1
1188106 | 16 | 1509134177735 | 1
1188104 |   16 | 1509134137744 | 1
1188101 |   16 | 1509134098104 | 1
1188097 | 16 | 1509134058869 | 1
1188095 | 16 | 1509134020423 | 1
1188091 | 16 | 1509133982958 | 1
1188088 |   16 | 1509133945493 | 1
1188085 | 16 | 1509133908074 | 1
1188079 | 16 | 1509133870714 | 1
1188078 | 16 | 1509133815953 | 1

Der Zähler wird vom ,,Volkszähler" eingelesen Dieser kann die zwar als Graph darstellen, mir gefällt das aber nicht so gut. Möchte das daher in Grafana darstellen.
Jeder Impuls vom Stromzähler wird als Value 1 mit Timestap abgespeichert.

Diese Werte möchte ich nun mit Grafana darstellen.
Mit Diesem Code bekomme ich über die Ganze Zeitlinie nur 1 angezeigt

Zitat
SELECT
  timestamp/1000 as time_sec,
  data.value as value,
  properties.value as metric
FROM data
  LEFT JOIN properties ON (properties.entity_id = data.channel_id)
  LEFT JOIN entities ON (entities.id = data.channel_id)
WHERE
  (channel_id = 1 || channel_id = 2 || channel_id = 3)  AND
  (timestamp/1000) >= $__unixEpochFrom() AND
  (timestamp/1000) <= $__unixEpochTo() AND
  properties.pkey = 'title'
ORDER BY timestamp ASC

Mit diesem hier habe ich zwar einen Graphen, aber die Werte stimmen nicht.

Zitat
SELECT
  cast((timestamp/1000)/300 as signed integer)*300 as time_sec,
  sum(value) as value,
  "Stromverbrauch" as metric
FROM data
WHERE cast(timestamp/1000 as signed integer) > $__unixEpochFrom() and cast(timestamp/1000 as signed integer) < $__unixEpochTo() and
channel_id = 1
GROUP BY 1
ORDER BY 1

Hoffe mir kann hier jemand helfen


Gruß
Happyuser20

kadettilac89

#168
Definiere "stimmen nicht" was willst du darstellen? Ein Impuls ist ein kWh und du willst auf Minuten aggregieren? Oder was ist die Anforderung?
Schau dir mal Eintrag 4 auf Seite 1 an. Ist das was du willst?

Happyuser20

Ich möchte das so darstellen wie im Anhang.

Mein Zähler liefert 150 Impulse pro kWh. So ähnlich wie in Beitrag vier.

Definiere ,,stimmen nicht"

Wenn ich das letzte Beispiel verwende (timestap/1000)/300 usw.) habe zwar einen Graphen wie im Anhang, aber ganz andere Werte zu unterschiedlichen Zeiten, wenn ich die beiden Kurven vergleiche.

Gruß

kadettilac89

definiere "stimmt nicht". aktuell weiß ich dass du ewas darstellen willst das aussieht wie etwas anderes. was ist die einheit? aggregation watt pro minuten?

Happyuser20

Ich möchte den Watt oder Kilowatt verbrauch, völlig egal, über die Zeit darstellen. So wie auf dem Foto vorher.

Momentan läuft das ganze auf dem Volkszähler der auch das Frontend stellt.
Wenn ich die gleichen Daten aus der Datenbank verwende und mit diesem Code

ZitatSELECT
  cast((timestamp/1000)/300 as signed integer)*300 as time_sec,
  sum(value) as value,
  "Stromverbrauch" as metric
FROM data
WHERE cast(timestamp/1000 as signed integer) > $__unixEpochFrom() and cast(timestamp/1000 as signed integer) < $__unixEpochTo() and
channel_id = 1
GROUP BY 1
ORDER BY 1

in Grafana auslese

Bekomme ich z.B am 1.1.2019 um 18:00
bei Grafana 800 Watt verbrauch
beim Volkszähler 2500.

Ich hoffe ich habe es jetzt verständlich rübergebracht.

Gruß.

ChrisW

booooor also nach langennn hin und her aktuell scheint das zu stimmen:
/org dort Browser Time
im Dashboard UTC

Jetzt stimmen die Angaben auch.

Ich nutze Current und History was wohl nun dafür sorgt das die letzten ( Neusten Werte ) nicht angezeigt werden. Welche vorteil soll dieses Current überhaupt haben ? Nur das Aktuelle Werte schneller ausgegeben werde und nicht in der großen Histrory geschaut wird ? Weil dann stelle ich komplett nur auf History um
Raspberry PI3 mit allem möglichen.

kadettilac89

Zitat von: ChrisW am 24 Januar 2019, 08:32:08
Welche vorteil soll dieses Current überhaupt haben ? Nur das Aktuelle Werte schneller ausgegeben werde und nicht in der großen Histrory geschaut wird ? Weil dann stelle ich komplett nur auf History um

Current brauchst nicht mehr wenn ein Attribut entsprechend gesetzt ist ... s. Commandref. Im history-mode bleibt current-Tabelle leer. Ist auch mitlerweile default.


DbLogType
attr <device> DbLogType [Current|History|Current/History|SampleFill/History]
Dieses Attribut legt fest, welche Tabelle oder Tabellen in der Datenbank genutzt werden sollen. Ist dieses Attribut nicht gesetzt, wird per default die Einstellung history verwendet.

Bedeutung der Einstellungen sind:

Current Events werden nur in die current-Tabelle geloggt. Die current-Tabelle wird bei der SVG-Erstellung ausgewertet.
History Events werden nur in die history-Tabelle geloggt. Es wird keine DropDown-Liste mit Vorschlägen bei der SVG-Erstellung erzeugt.
Current/History Events werden sowohl in die current- also auch in die hitory Tabelle geloggt. Die current-Tabelle wird bei der SVG-Erstellung ausgewertet.
SampleFill/History Events werden nur in die history-Tabelle geloggt. Die current-Tabelle wird bei der SVG-Erstellung ausgewertet und kann zur Erzeugung einer DropDown-Liste mittels einem DbRep-Device
"set <DbRep-Name> tableCurrentFillup" mit einem einstellbaren Extract der history-Tabelle gefüllt werden (advanced Feature).


Hinweis:
Die Current-Tabelle muß genutzt werden um eine Device:Reading-DropDownliste zur Erstellung eines SVG-Plots zu erhalten.


kadettilac89

Zitat von: Happyuser20 am 24 Januar 2019, 08:28:40
Ich möchte den Watt oder Kilowatt verbrauch, völlig egal, über die Zeit darstellen. So wie auf dem Foto vorher.

Momentan läuft das ganze auf dem Volkszähler der auch das Frontend stellt.
Wenn ich die gleichen Daten aus der Datenbank verwende und mit diesem Code

Solange du nicht weißt was die Einheit ist, bzw. auf welche Zeiteinheit aggregiert werden soll mögen beide Plots korrekt sein. Sie zeigen nur eine andere Sicht. Bevor wir hier weiterraten rechne doch mal nach, ob deine geloggten Werte ggf. Watt/min darstellen sollen. Wenn ja schaun wir weiter.

Lösung könnte dann das Macro für MySQL ... $__timeGroup(dateColumn, '1m') .... sein, wenn Watt/min gewollt ist. http://docs.grafana.org/features/datasources/mysql/

ChrisW hatte ein Problem mit Zeitzonen, kann es bei dir sein, dass der Plot nur um eine oder n-Stunden verschoben ist.

ChrisW

Okay dann kann ich ja nun langsam mal etwas rumspielen :)

Da du ja der Profi hier bist vielleicht hast du eine Idee / Lösung.
Ich würde mir gerne ein iagramm / Balken anzeigen lassen

Ich habe einen dummy dHeizung das loggt on / off und die Zeiten dazu


Internals:
   CHANGED   
   FUUID      5c4746ac-f33f-678b-6af5-2a67bf9cbff77ea4
   NAME       dHeizung
   NR         979
   STATE      on
   TYPE       dummy
   .attraggr:
   .attreocr:
     .*
   .attrminint:
   Helper:
     DBLOG:
       statStateDayLast:
         myDbLog:
           TIME       1548284395.57082
           VALUE      off: 16:46:17 off_Count: 32 on: 07:13:43 on_Count: 31
       state:
         myDbLog:
           TIME       1548323881.81365
           VALUE      on
   READINGS:
     2019-01-24 10:59:55   statStateDay    off: 07:43:44 off_Count: 12 on: 03:16:16 on_Count: 12
     2019-01-23 23:59:55   statStateDayLast off: 16:46:17 off_Count: 32 on: 07:13:43 on_Count: 31
     2019-01-24 10:59:55   statStateMonth  off: 1d 05:21:02 off_Count: 50 on: 11:56:26 on_Count: 50 (since: 2019-01-22_17:42:27)
     2019-01-24 10:59:55   statStateYear   off: 1d 05:21:02 off_Count: 50 on: 11:56:26 on_Count: 50 (since: 2019-01-22_17:42:27)
     2019-01-24 10:58:01   state           on
   helper:
     _98_statistics myStatDevice
Attributes:
   DbLogExclude .*
   DbLogInclude state,statStateYear,statStateDayLast,statStateMonth,statStateYear
   event-on-change-reading .*
   room       Heizung

Ich zähle hier wie lange Heizung AN / AUS war.
Ich würde das gerne als Monatsansicht haben also die ON Zeit.
Bekomme Täglich 23:59 folgendes im Log:
statStateDay    off: 07:43:44 off_Count: 12 on: 03:16:16 on_Count: 12

Schön wäre also eine Bar die die on Zeit ausgibt als Monatsansicht.
Sehr geil wäre es wenn die Anzeite wie oft ON geschaltet wurde. Also Wieviele Brenner Starts.
(Und Sehr Sehr geil wäre eine Liene mit der Außentemperatur. << ABER ich denke das Kombinieren wird hier schwer.)

Raspberry PI3 mit allem möglichen.

Happyuser20

Zitat
Solange du nicht weißt was die Einheit ist, bzw. auf welche Zeiteinheit aggregiert werden soll mögen beide Plots korrekt sein. Sie zeigen nur eine andere Sicht. Bevor wir hier weiterraten rechne doch mal nach, ob deine geloggten Werte ggf. Watt/min darstellen sollen. Wenn ja schaun wir weiter.

Lösung könnte dann das Macro für MySQL ... $__timeGroup(dateColumn, '1m') .... sein, wenn Watt/min gewollt ist. http://docs.grafana.org/features/datasources/mysql/

ChrisW hatte ein Problem mit Zeitzonen, kann es bei dir sein, dass der Plot nur um eine oder n-Stunden verschoben ist.
Tut mir leid, ich kann dir leider nicht so richtig folgen.
Ich verstehe gerade nicht wieso ich eine Zeiteinheit angeben muss. Das ist doch variabel, je nach dem wie weit ich reinzoome oder rauszoome.

Ich stelle mir das so vor: links die Achse mit Watt, unten die Zeit von Beginn der Aufzeichnung bis jetzt.
Wenn ich jetzt auf z.B. 18:31 am 24.12.18 gehe, möchte ich sehen wieviel Watt ich zu dem Zeitpunkt verbraucht habe. Der Gesamtverbrauch soll natürlich kw/h sein.
Der Zähler selbst bringt 150 Impulse pro kWh, jeder Impuls vom Zähler wird mit der Unixtime abgespeichert und daraus muss man das doch ausrechnen können, wieviel Watt zwischen den Impulsen verbraucht wurde?

Oder liege ich da komplett falsch??

Zitat
ChrisW hatte ein Problem mit Zeitzonen, kann es bei dir sein, dass der Plot nur um eine oder n-Stunden verschoben ist.

Werde mir das die tage nochmal anschauen in Grafana und zum Vergleich im Volkszähler.

Gruß

kadettilac89

Zitat von: Happyuser20 am 24 Januar 2019, 11:43:44
Wenn ich jetzt auf z.B. 18:31 am 24.12.18 gehe, möchte ich sehen wieviel Watt ich zu dem Zeitpunkt verbraucht habe.

Und genau darum geht es ... du verbrauchst eben nicht zu einem "Zeitpunkt", die Watt sind nicht einfach - flopp - weg. Watt ist Leistung. Du "verbrauchst" über einen Zeitraum, das ist aber dann Arbeit (Arbeit = Leistung durch Zeit). WAs bedeutet ein Wert 20 ... was soll der aussagen? 20 Watt/min? Arithmetisches Mittel über irgend was in der Stunde, Normalverteilung .. was auch immer. Ist die Kurve irgendwie geglättet ...

Solange du nicht definierst was du willst kann man nicht sagen wie du da hinkommst. Da musst du erstmal in deinem anderen Tool nachschaun oder aus deinen Zahlenreihen rausrechnen. Oder im Forum des Tools das  es "richtig" macht nachfragen.

kadettilac89

Zitat von: ChrisW am 24 Januar 2019, 11:13:59
Da du ja der Profi hier bist vielleicht hast du eine Idee / Lösung.
Ich würde mir gerne ein iagramm / Balken anzeigen lassen

Ich habe einen dummy dHeizung das loggt on / off und die Zeiten dazu

Ich zähle hier wie lange Heizung AN / AUS war.
Ich würde das gerne als Monatsansicht haben also die ON Zeit.
Bekomme Täglich 23:59 folgendes im Log:

Schön wäre also eine Bar die die on Zeit ausgibt als Monatsansicht.
Sehr geil wäre es wenn die Anzeite wie oft ON geschaltet wurde. Also Wieviele Brenner Starts.
(Und Sehr Sehr geil wäre eine Liene mit der Außentemperatur. << ABER ich denke das Kombinieren wird hier schwer.)

Profi ist vielleicht etwas übertrieben. Ich nutze nichtmal Mysql für Grafana, ich schreibe aktuell alles von MySQL in InfluxDB (zyklisch) und werde irgendwann vollständig auf InfluxDB umsteigen sobald ich mal meine Dashboards gebaut habe. Influx ist m. E. einfach besser geeignet und schneller. Aktuell habe ich nur die Doku gelesen und etwas in Docker auf einer VM rumgespielt.

Gehen tut vieles. Wenn es dir nur um die Starts geht würde ich dem Dummy den Wert 1 geben für ein und 0 für aus (statt on/off). Schon als zu speichernden Wert. Du musst dann aber auch even-on-change readings machen damit du nicht zu zählst.

Dann einfach über die Zeit aggregieren. Wenn du als Einheit 1 Stunde nimmst musst du nur die Value-Tabelle aufaddieren. Auch das mit Linien kombinieren sollte gehen, du kannst mehrere Reihen in ein Diagramm geben und denen dann Linie oder andere Darstellung zuweisen. Den Link hab ich oben schon mal gepostet .. da wurde das auch gemacht ... https://community.hiveeyes.org/t/abweichungen-pro-tag-als-balken-in-gewichtsgrafik-anzeigen/748/3

Ich stelle mir nur die Frage, wie aussagekräftig ist ein Start eines Brenners zu zählen. Wäre die Laufzeit nicht viel besser? Auch dass ist möglich, einfach ein Dummy füllen wenn von on-->off geschaltet wird. Zeit aus Readings age ... irgendwie. Müsste man sich etwas Gedanken machen. ... Ansatz ähnlich wie hier ... https://forum.fhem.de/index.php?topic=48059.0


ChrisW

hi,
ja ich will ja auch die Lautzeit haben ;) Also Laufzeit soll in den Balken als Diagramm Monatsansicht.  Das simple würde mich schon reichen ;) Ich weiss nur noch nicht wie ich den wert als value bekomme da dort ja noch viel mehr drin steht.
Kann ich den Code einfach von der Temperatur nehmen ? Dort dann per regex ? Geht das wie bei den fhem Plots mit stellen ??
Und da gibt es doch nocht Probleme hab ein Beispiel vorne gesehe  da es ja um 23:59 gepostet wird ...

Wie kann ich das den mal testen mit InfluxDB ? Aber ob das so viel einfacher für mich sein wird ? (könnte ja per iobroker in so eine DB loggen )
Raspberry PI3 mit allem möglichen.