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

DerBodo

Ich bräuchte einmal eure Hilfe bzgl der Plotterstellung.

Mein Wunsch wäre es für den Energie und Wasserverbrauch pro Stunde den Max Wert im Diagramm darzustellen als Balken.
Aktuell habe ich über die Stunde verlaufend quasi immer "Sägezähne" die dann zu beginn der neuen Stunde genullt werden und sich wieder aufbauen.

Die Readings werden mit dem Statistics Modul erstellt.

Aktuelle Abfrage:

SELECT UNIX_TIMESTAMP(TIMESTAMP) as time_sec,
CONVERT(VALUE, decimal(3,1)) as VALUE
FROM history
where DEVICE ='Wasser' and READING = 'statEnergyHour' AND $__timeFilter(TIMESTAMP)


Nach Längerem herumsuchen habe ich folgendes Query zusammengebaut:

SELECT DATE_FORMAT(TIMESTAMP, '%Y-%m-%d %H') as dateHour,
MAX(CONVERT(VALUE, decimal(4,0))) as VALUE
FROM history where
DEVICE ='Wasser' and READING = 'statEnergyHour'
GROUP BY dateHour


Allerdings bemängelt das Grafana Frontend dann eine fehlende Time Column....
Vielleicht kann mir ja jemand einen Tipp geben und mich noch in die richtige Richtung schubsen...


DerBodo

Sollte jemand etwas vergleichbares suchen anbei mein Query.


SELECT
  UNIX_TIMESTAMP(TIMESTAMP) DIV 3600 * 3600 AS "time",
  max(cast(VALUE as signed)) AS "Verbrauch"
FROM history
WHERE
  TIMESTAMP BETWEEN FROM_UNIXTIME(1658268000) AND FROM_UNIXTIME(1658309751) AND
  DEVICE = 'Wasser' AND
  READING = 'statEnergyHour'
GROUP BY 1
ORDER BY UNIX_TIMESTAMP(TIMESTAMP) DIV 3600 * 3600


Nach dem Formatieren mit Grafana habe ich nun pro Stunde einen max Wert in Bar Darstellung für den aktuellen Tag

ch.eick

Hallo Ihr Grafana Gurus :-)
Ich mache da mal wieder ein Problem...

Kann ich einen Verbraucher z.B. an die Linie einer anderen Kurve von oben nach unten hängen?
In meinem Fall ist es eine Wallbox, die nur mit PV Überschuss lädt und sich somit optisch entlang der PV-Leistung hangelt.
Das Bild zeigt einen noch nicht so sauberen Test, aber man erkennt zum Ende der Ladezeit den Kurvenverlauf, der gleich der blauen Linie ist.

Die schwarze Fläche ist in meinem Fall die Einspeisung ins Netz. Es können natürlich noch andere Starkverraucher gleichzeitig laufen, die dann
momentan mit Stack gestapelt werden.

VG
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

andies

Zitat von: DerBodo am 20 Juli 2022, 11:39:58
Sollte jemand etwas vergleichbares suchen anbei mein Query.
Kannst du mal einen Screenshot posten, wie das aussieht?
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+); Perl: v5.28.1
SIGNALduino (433 MHz) und HM-UART (868 MHz)
Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

ch.eick

Zitat von: andies am 26 Juli 2022, 08:03:48
Kannst du mal einen Screenshot posten, wie das aussieht?
Das besondere an der Art der Abfrage ist einfach, dass man im MySQL alle Anpassungen im SELECT vornimmt. Das kann auch noch komplexer sein.
Um das dann im Grafana zu verwenden muss man die erwarteten Grafana Namen wie z.B. "time" verwenden.
Bei Dashboards können die Grafana Namen dann auch z.B. nur die Objektnummern sein, damit das SELECT der Anzeigestelle zugeordnet werden kann.
Somit kann man auch in einem SELECT mit vielen Joins alle möglichen Werte zusammen abfragen, was die Performance der Abfrage imens erhöht.
Hier mal ein Beispiel aus meinem dashboard, bei dem ich alle PV Werte der einzelnen Strings in einem Rutsch abfrage.

SELECT
t1.time AS time,
t1.38,t2.39,t3.198,t4.201
FROM
(SELECT TIMESTAMP AS time,CAST(VALUE AS DECIMAL(4,0)) AS '38'
  FROM history WHERE DEVICE = 'WR_1' AND READING = 'P_DC2' AND TIMESTAMP > curdate() ORDER BY TIMESTAMP DESC LIMIT 1) t1
JOIN
(SELECT TIMESTAMP AS time,CAST(VALUE AS DECIMAL(4,0)) AS '39'
  FROM history WHERE DEVICE = 'WR_2' AND READING = 'P_DC1' AND TIMESTAMP > curdate() ORDER BY TIMESTAMP DESC LIMIT 1) t2
JOIN
(SELECT TIMESTAMP AS time,CAST(VALUE AS DECIMAL(4,0)) AS '198'
  FROM history WHERE DEVICE = 'WR_1' AND READING = 'P_DC1' AND TIMESTAMP > curdate() ORDER BY TIMESTAMP DESC LIMIT 1) t3
JOIN
(SELECT TIMESTAMP AS time,CAST(VALUE AS DECIMAL(4,0)) AS '201'
  FROM history WHERE DEVICE = 'WR_2' AND READING = 'P_DC2' AND TIMESTAMP > curdate() ORDER BY TIMESTAMP DESC LIMIT 1) t4

Im Dashboard zeige ich immer nur die letzten Werte an, weshalb da keine Time angaben zu finden sind.
Obwohl das wäre noch eine tolle Erweiterung, wenn man da auch in der Zeit zurück gehen würde :-)

my5cent
     Christian

Im Bild sind diese Werte oben links abgebildet.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

der-Lolo

Hallo Zusammen, ich logge Temperatur Daten unseres pools -
die Sensoren stecken in den Rohren der Filteranlage, hierdurch sind die Werte nur dann interessant wenn die Pumpe seit 5min läuft.
Die Pumpe selbst ist auch in LogDB vorhanden.

also Temperatur Wert nur darstellen wenn Pumpe state "on" hat.

Hat vielleicht jemand ein entsprechendes statement parat?


sash.sc

Zitat von: ch.eick am 26 Juli 2022, 08:35:34
Das besondere an der Art der Abfrage ist einfach, dass man im MySQL alle Anpassungen im SELECT vornimmt. Das kann auch noch komplexer sein.
Um das dann im Grafana zu verwenden muss man die erwarteten Grafana Namen wie z.B. "time" verwenden.
Bei Dashboards können die Grafana Namen dann auch z.B. nur die Objektnummern sein, damit das SELECT der Anzeigestelle zugeordnet werden kann.
Somit kann man auch in einem SELECT mit vielen Joins alle möglichen Werte zusammen abfragen, was die Performance der Abfrage imens erhöht.
Hier mal ein Beispiel aus meinem dashboard, bei dem ich alle PV Werte der einzelnen Strings in einem Rutsch abfrage.

SELECT
t1.time AS time,
t1.38,t2.39,t3.198,t4.201
FROM
(SELECT TIMESTAMP AS time,CAST(VALUE AS DECIMAL(4,0)) AS '38'
  FROM history WHERE DEVICE = 'WR_1' AND READING = 'P_DC2' AND TIMESTAMP > curdate() ORDER BY TIMESTAMP DESC LIMIT 1) t1
JOIN
(SELECT TIMESTAMP AS time,CAST(VALUE AS DECIMAL(4,0)) AS '39'
  FROM history WHERE DEVICE = 'WR_2' AND READING = 'P_DC1' AND TIMESTAMP > curdate() ORDER BY TIMESTAMP DESC LIMIT 1) t2
JOIN
(SELECT TIMESTAMP AS time,CAST(VALUE AS DECIMAL(4,0)) AS '198'
  FROM history WHERE DEVICE = 'WR_1' AND READING = 'P_DC1' AND TIMESTAMP > curdate() ORDER BY TIMESTAMP DESC LIMIT 1) t3
JOIN
(SELECT TIMESTAMP AS time,CAST(VALUE AS DECIMAL(4,0)) AS '201'
  FROM history WHERE DEVICE = 'WR_2' AND READING = 'P_DC2' AND TIMESTAMP > curdate() ORDER BY TIMESTAMP DESC LIMIT 1) t4

Im Dashboard zeige ich immer nur die letzten Werte an, weshalb da keine Time angaben zu finden sind.
Obwohl das wäre noch eine tolle Erweiterung, wenn man da auch in der Zeit zurück gehen würde :-)

my5cent
     Christian

Im Bild sind diese Werte oben links abgebildet.

Wie bekommt man die Übersicht bzw Bild hin?

Hat jemand von euch Ahnung, wie man Werte aufaddiert ?
Es soll der Verbrauch von anderen geräte auf den Gelben Balken aufaddiert werden, also die "Nullliene" nach oben verschoben werden, auf das Ende des Gelben Balkens.
Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

ch.eick

Zitat von: sash.sc am 28 August 2022, 10:32:44
Wie bekommt man die Übersicht bzw Bild hin?

Hat jemand von euch Ahnung, wie man Werte aufaddiert ?
Es soll der Verbrauch von anderen geräte auf den Gelben Balken aufaddiert werden, also die "Nullliene" nach oben verschoben werden, auf das Ende des Gelben Balkens.
Du machst für jedes Gerät eine Abfrage und kannst dann im Grafana die Option Stack, bei allen Werten, die gestapelt werden soll, verwenden.
Das ist aber eine Funktionalität der Graphen und hat nichts mit meinem zitierten Beispiel zu tun. Mein Beispiel ist für zwei.B ein Dashboard gedacht gewesen.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

sash.sc

Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

kadettilac89


maltejahn

Hallo,

ich suche mir einen Hirsch - scheint wohl zu einfach zu sein oder keiner braucht es.
Ich würde gerne Daten des Statistik Moduls darstellen und zwar die "min/avg/max" Daten. Die 3 Werte werden in einem Reading zusammengefasst

z.B. 2021-09-16 23:59:55 mit dem Value "Min: 15.9 Avg: 18.7 Max: 28.5"

Ich wollte z.B. die Minimale und die Maximale Tagestemperatur übers Jahr hinaus darstellen und am besten per SQL gefiltert ohne extra dafür z.B. ein extra Userreading zu erstellen.

Wie könnte das aussehen? Zwar habe ich SQL Abfragen mit Split usw. gesehen. Aber irgendwie nicht passend weil z.B. von Position x mit länge y der Wert geholt wird. Bei mit ist die Länge der gesuchten Wertes aber nicht immer gleichlang.

Grüße
Malte

All-Ex

Hallo,
ich habe mal mit Grafana rumgespielt und festgestellt, dass schöne Charts recht einfach erstellt werden können. Allerdings vermisse ich im Vergleich zu FTUI Chart die Buttons, mit denen man den dargestellten Ausschnitt vergrößern/verkleinern und verschieben kann.

Aktuell ist Grafana für mich auf einem Mobilen Endgerät nicht bedienbar und auch auf dem Rechner ist das Navigieren in Zeitreihen schwierig (z.B. CTRL-Z für Rauszoom, eine Schaltfläche dafür gibt es nicht => nicht intuitiv). Mit dem Timepicker von Grafana schaffe ich es z.B. nicht einfach im der Zeitleiste zurückzublättern.

Wisst ihr, ob man die 4 Buttons <-  +  -  -> die es in FTUI Chart gibt, auch in Grafana aktivieren kann?
Oder mache ich irgendetwas falsch?

Im Screenshot ist oben die Grafik von FTUI Chart und unten die von Grafana. Bei Grafana gibt es nur den - Button zum rauszoomen. Einzoomen und das Chart nach links und rechts verschieben schaffe ich auf mobilen Geräten nicht.


Thyraz

Wenn man den Minus-Button gedrückt hat, erscheinen Buttons zum Links/Rechts verschieben.
Denke es ist eine Limitierung wie der TimePicker intern funktioniert.

Also, dass die Benannten Zeitspannen meist relativ und nicht absolut sind.
Durch das Rauszoomen wird sie absolut und die seitlichen Pfeile erscheinen.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

Phili

Hi,

benutzt jemand Grafana in Docker und kommt damit auf die sqlite db die auf dem host mit FHEM (nicht im docker container) läuft?
Ich habe Grafana im docker weil ich es dort zusammen mit teslamate am laufen habe.

Ich habe in den datasource Einstellungen die lokale IP des rpi genutzt und den Pfad zur fhem.db (siehe Bild)

Ich bekomme allerdings "Query data error".

HrzM

Hallo Forum,

ich bin ein wenig am verzweifeln. :-\ Ich lese mit Tasmota und IR-Kopf meinen Stromzähler aus. Leider hab kann ich nur den Gesamtverbrauch auslesen, wüsste aber gerne den Verbrauch pro Tag. Hab schon rumgesucht, aber ohne Erfolg. Für einen Tipp wäre ich Dankbar.

Mein letzter Versuch sah wie folgt aus, aber das Ergeniss ist nicht plausibel.



SELECT
  $__timeGroupAlias(TIMESTAMP,1d),
  DEVICE AS metric,
  variance(VALUE) AS "VALUE"
FROM v_history_n
WHERE
  $__timeFilter(TIMESTAMP) AND
  DEVICE = 'MQTT2_DVES_4FB099' AND
  READING = 'SML_total_kwh'
GROUP BY 1,2
ORDER BY $__timeGroup(TIMESTAMP,1d)



Gruß HrzM