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

Arek

Zitat von: ch.eick am 10 Februar 2022, 12:02:10
Hallo

Im Diagramm in den EDIT Modus gehen
rechts den Panel Tab auswählen
dort auf Series Overrights gehen
Bei den entsprechenden Aliasen das "Stack:true" aktivieren

Ich meine, die Reihenfolge der Queries entscheidet dabei, was oben und unten ist.

Man kann auch rein optisch einen Gesamt Wert mit gestapelten Einzelwerten überlagert darstellen. Dazu muss man aber die Farbgebung ordentlich auswählen.
Dadurch zeige ich mir z.B. die "Fläche" an, die als Leistung von der PV-Anlage in den Hausspeicher geht.

Gruß
  Christian

Hallo,

die Overrides habe ich auch schon gefunden, aber leider kriege ich es nicht hin. Nun habe ich etwas rumprobiert und festgestellt, dass es nicht funktioniert sobald ich einen dritten Query einfüge. Nur die beiden Balken, die gestapelt werden sollen, funktionieren. Ich möchte allerdings noch die Außentemperatur als Liniendiagramm einfügen.
Anbei zwei Bilder jeweils mit und ohne Außentemperatur.
Was mache ich falsch?

Schöne Grüße

ch.eick

Zitat von: Arek am 12 Februar 2022, 21:34:29
Hallo,

die Overrides habe ich auch schon gefunden, aber leider kriege ich es nicht hin. Nun habe ich etwas rumprobiert und festgestellt, dass es nicht funktioniert sobald ich einen dritten Query einfüge. Nur die beiden Balken, die gestapelt werden sollen, funktionieren. Ich möchte allerdings noch die Außentemperatur als Liniendiagramm einfügen.
Anbei zwei Bilder jeweils mit und ohne Außentemperatur.
Was mache ich falsch?
Hm, das kann ich auch nicht sagen, eventuell liegt es ja an der Mischung von Balken Diagrammen mit linien Diagrammen.
Versuche es doch mal direkt bei Grafana im Forum und berichte dann bitte hier :-)
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

Sany

Hallo zusammen,

Grafana hatte ich schon vor einer Weile installiert und kurz ausprobiert, mußte das aber wieder zurückstellen, da ich zu Beginn nicht dahinter kam, 2 Y-Achsen zu konfigurieren. Jetzt habe ich hier noch mal alles nachgelesen und probiert und nun klappt auch das. Jetzt habe ich ein paar Versuche unternommen, meine bisherigen SVGs, die ich gezielt verwenden möchte, in Grafana nachzubauen. Auch das klappt sehr gut.
Was mich stört ist die "Platzverschwendung" rund um das per iframe eingefügte Panel. Im Anhang gut zu sehen, ich habe mal frameborder="1" gesetzt: zwischen Frameborder und Text, also Skalenbeschriftung oder Title, ist ein, in meinen Augen, sehr breiter Rahmen, der natürlich das Diagramm "klein" macht, wenn der Platz auf dem Display begrenzt ist.
Ich hab zwar schon alles möglich durchsucht, vermute aber, dass steckt irgendwo tief in Grafana drin und wäre dann, wenn überhaupt, nur per css zu ändern.

Ebenso, auch im Bild zu sehen: hier habe ich den letzten Wert in den Panel-Options gestzt, das schreibt diesen aber dann bei jeder Linie dazu. Kann man das auch einzeln angeben? Im Beispiel hätte ich gerne für die Temperatur OAT den letzten sowie max und min, sonst nur noch bei Humidity den letzten Wert. Einfach gesagt: je Abfrage eine eigene Konfiguration.

Vielen Dank für sachdienliche Hinweise!


Sany
fhem auf Zotac ZBox nano als LXC auf Proxmox, weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

ch.eick

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

Sany

ZitatHi Sany, das Bild fehlt noch;-)

...erledigt. Sorry. (...das Bild, nicht das Problem... ;))
fhem auf Zotac ZBox nano als LXC auf Proxmox, weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

stoff

Hallo zusammen,

Ich würde gerne 2 Werte aus der SQL Datenbank anzeigen und die Differenz bilden. Das klappt aber leider nur manchmal:

SELECT
  UNIX_TIMESTAMP(TIMESTAMP) as time_sec,
  CONVERT(VALUE, DOUBLE) as value,
  "PV-Modbus" as metric
FROM history
WHERE READING="I_DC_Power" AND DEVICE="PV" AND $__timeFilter(TIMESTAMP)

SELECT
  UNIX_TIMESTAMP(TIMESTAMP) as time_sec,
  CONVERT(VALUE, DOUBLE) as value,
  "Power Consumption" as metric
FROM history
WHERE READING="X_Meter_1_M_AC_Power" AND DEVICE="PV" AND $__timeFilter(TIMESTAMP)



Der 3. Graph ist dann $A - $B

Leider klappt das aber nur selten, da viele Werte abgefragt werden und nicht alle Werte mit dem exakt gleichem Zeitstempel in die Datenbank kommen, sondern 1 sec. später. Daher geht dann zwar die Anzeige der einzelnen Werte, diese können dann aber nicht subtrahiert werden. Gibt es hier eine Möglichkeit, dies trotzdem zu schaffen?
In der Doku bei Grafana habe ich keine Lösung gefunden.

Danke!


ch.eick

Zitat von: stoff am 06 März 2022, 23:58:24
Leider klappt das aber nur selten, da viele Werte abgefragt werden und nicht alle Werte mit dem exakt gleichem Zeitstempel in die Datenbank kommen, sondern 1 sec. später. Daher geht dann zwar die Anzeige der einzelnen Werte, diese können dann aber nicht subtrahiert werden. Gibt es hier eine Möglichkeit, dies trotzdem zu schaffen?
Hallo stoff,

für solche Zwecke solltest Du Dir besser ein eigenes SQL SELECT schreiben.
Dort kannst Du dann mit allen SQL Möglichkeiten Dein Ergebnis zusammen stellen und nur das Endergebnis in Grafana anzeigen.

Sollte z.B. der Zeitstempel zwar bis zur Minute passen, aber im Sekunden Bereich ein Unterschied sein, dann überschreibst Du beim SELECT die Sekunden jeweils
mit 00 und summierst die Werte mit dem Zeitstempel "2022-03-05 10:31:00" :-)

Bei mir habe ich für die Darstellung in einem Dashboard z.B. alle zusammengehörigen Werte in einem SQL SELECT zusammen abgefragt, was dann viel Schneller als über
einzel Abfragen im Grafana ging. Vorher passten die Werte nicht richtig zueinander, da es ja bereits etwas später schon wieder neuere gegeben hat.

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

stoff

Hi Christian,

vielen Dank für Deine Antwort. Bei den SQL SELECT Statements bin ich so nicht weiter gekommen, da mir nicht klar ist, wie ich diese in Grafana einbinden kann. Oder meinst Du nicht in Grafana sondern per Skript?
Was ich mir überlegt hatte ist, das Modul,, welches die Abfrage macht, so zu verändern, dass es selber schon den Wert berechnet und in der db ablegt. Für mich auch eine pragmatische Lösung.

Vielen Dank

Christoph

ch.eick

Zitat von: stoff am 07 März 2022, 22:48:42
Bei den SQL SELECT Statements bin ich so nicht weiter gekommen, da mir nicht klar ist, wie ich diese in Grafana einbinden kann. Oder meinst Du nicht in Grafana sondern per Skript?
Was ich mir überlegt hatte ist, das Modul,, welches die Abfrage macht, so zu verändern, dass es selber schon den Wert berechnet und in der db ablegt. Für mich auch eine pragmatische Lösung.
Hi Christoph,
im Grafana kannst Du mit dem SQL Editor direkt das SELECT einfügen. Ich verwende als erstes das Muster von Grafana, dann erkennt man, wie die Ausgabe aussehen muss, damit Grafana die Werte richtig versteht.
Am Anfang gehe ich direkt in die Datenbank und erstelle das passenede SELECT, auch mit JOIN und all den anderen Möglichkeiten. Ein einfaches Muster ohne Berechnungen sähe z.B. so aus.

SELECT
  $__timeGroupAlias(TIMESTAMP,$__interval,previous),
  avg(value) AS "SW_Home_own_consumption_from_Battery"
FROM history
WHERE
  $__timeFilter(TIMESTAMP) AND
  DEVICE = 'WR_1' AND
  READING = 'SW_Home_own_consumption_from_Battery'
GROUP BY 1
ORDER BY $__timeGroup(TIMESTAMP,$__interval,previous)


In einem Dashboard verwende ich aber dann auch so etwas

SELECT
NOW() + INTERVAL 2 HOUR AS time,
t_hotWaterTemperature.131,
t_ambientTemperature.141,
t_room_temp.144
FROM
(
  SELECT CAST(VALUE AS DECIMAL(4,2)) AS '131'
  FROM history
  WHERE
   DEVICE = 'Heizung' AND
   READING = 'hotWaterTemperature' AND
   TIMESTAMP > curdate()
  ORDER BY TIMESTAMP DESC LIMIT 1
) t_hotWaterTemperature
JOIN
(
  SELECT CAST(VALUE AS DECIMAL(4,2)) AS '141'
  FROM history
  WHERE
   DEVICE = 'Heizung' AND
   READING = 'ambientTemperature' AND
   TIMESTAMP > curdate()
  ORDER BY TIMESTAMP DESC LIMIT 1
) t_ambientTemperature
JOIN
(
  SELECT CAST(VALUE AS DECIMAL(4,2)) AS '144'
  FROM history
  WHERE
   DEVICE = 'Thermostat_WO' AND
   READING = 'room-temp' AND
   TIMESTAMP > curdate()
  ORDER BY TIMESTAMP DESC LIMIT 1
) t_room_temp


Um den TIMESTAMP ohne die Sekunden Abweichung gleich zu schalten kannst Du dann sowas machen

DATE_FORMAT(TIMESTAMP, '%Y-%m-%d %H:%i:00') AS TIMESTAMP


Gruß
   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

Sany

Hi,
etwas weiter oben ( https://forum.fhem.de/index.php/topic,77724.msg1211188.html#msg1211188 ) suchte ich nach einer Lösung wegen:
ZitatWas mich stört ist die "Platzverschwendung" rund um das per iframe eingefügte Panel

In einem Grafana-Forum bin ich fündig geworden.
Getestet und es funktioniert. Die Lösung beim einbinden einer Grafana-Chart mittels iframe: in der definition muss es
Zitat'<iframe src="http://192.1xx.x.x:yyyy/d-solo/rKkdofHnk/mypanel?orgId=1&panelId=6" width="100%" height="350" frameborder="0"></iframe>'
heissen,
statt
Zitat'<iframe src="http://192.1xx.x.x:yyyy/d/rxxxxxxxxk/mypanel?orgId=1&viewPanel=6&kiosk" allowfullscreen frameborder="0" height="350" width="378" style="overflow:hidden;height:350;width:100%"></iframe>'

ich vermute es kam daher, dass ich beim ersten Versuch nur die eine chart im Grafana-Panel hatte und dann per share / embed einen link zum "panel" erhalten habe. Bei mehreren charts auf dem Panel wird dann der link wohl "richtig" erzeugt, wenn man ein "single Panel" freigibt.

Sieht dann so aus wie im Anhang. (oben der "breitere" Rahmen)


Gruß

Sany
fhem auf Zotac ZBox nano als LXC auf Proxmox, weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

ch.eick

Hallo zusammen,
in Grafana möchte ich den Monatswert vom letzten Tag des Monats anzeigen lassen.
Wie kann ich es erreichen, dass auf der x-Axis z.B. "2022/04" steht?

Momentan wird die Axe für das gesamte Jahr eingeteilt, aber der Wert steht dann am Ende des Monats.

EDIT: als work around verschiebe ich die Werte auf den ersten Tag des Monats

DATE_ADD(DATE_ADD(TIMESTAMP,INTERVAL -1 MONTH),INTERVAL 1 DAY) AS time

Merkwürdig ist auch, dass diie Zeitanga aus der Datenbank mit 23:57:xx kommt, aber im Grafana beim überfahren des Graphes mit der Maus etwas mit 01:57:01 angezeigt wird.


SELECT
  DATE_ADD(DATE_ADD(TIMESTAMP,INTERVAL -1 MONTH),INTERVAL 1 DAY) AS time,
  CAST(VALUE/1000 AS DECIMAL(4,0)) AS "SW_Statistic_Yield_Month"
FROM history
WHERE
  DEVICE = 'WR_1_API' AND
  READING = 'SW_Statistic_Yield_Month' AND
  DATE(TIMESTAMP) = LAST_DAY(TIMESTAMP) AND
  hour(TIMESTAMP) = 23


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

Geisha2021

Ich bin Neuling in Grafana und habe die Version 9.0 auf dem Raspi installiert wo auch FHEM läuft und alles auf einer MariaDB geloggt wird.
Die Darstellung von Kurvenverläufen vom Strom, Temperaturen und Feuchtigkeit auf Dashboards funktioniert.
Die Darstellung des täglichen Stromverbrauchs als Barchart gelingt mir jedoch nicht.
Habe schon alle möglichen Tutorials und Videos dazu angesehen jedoch sind diese Anleitungen nicht mit der Version 9.0 kompatibel.

Vielleicht kann mir jemand Unterstützung geben wie ich das direkt als SQL Query eingeben kann.

Die Energiewerte sind fortlaufend in der MariaDB gespeichert.

Gruß Uli

ch.eick

Zitat von: Geisha2021 am 22 Juni 2022, 17:20:35
Ich bin Neuling in Grafana und habe die Version 9.0 auf dem Raspi installiert wo auch FHEM läuft und alles auf einer MariaDB geloggt wird.
Die Darstellung von Kurvenverläufen vom Strom, Temperaturen und Feuchtigkeit auf Dashboards funktioniert.
Die Darstellung des täglichen Stromverbrauchs als Barchart gelingt mir jedoch nicht.
Habe schon alle möglichen Tutorials und Videos dazu angesehen jedoch sind diese Anleitungen nicht mit der Version 9.0 kompatibel.

Vielleicht kann mir jemand Unterstützung geben wie ich das direkt als SQL Query eingeben kann.
Als erstes solltest Du mal direkt in der mariaDB ein SQL SELECT erstellen, mit dem genau die gewünschten Werte zurück geliefert werden.
Das lässt sich dann im Grafana SQL Editor spezifisch auf Grafana anpassen.
Bei mir klappt das so eigentlich immer am schnellsten und man kann sehr schnell das SELECT zu testzwecken verändern.

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

Geisha2021

Danke Christian.

Da scheitere ich schon. Wie macht man ein SQL Select direkt in der MariaDB?

Gruß Uli

Thyraz

Über die Console indem du mariadb eingibst, oder du installierst ein Frontend wie phpMyAdmin.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...