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

Kai-Alfonso

Moisen,


ich hab mittlerweile ein paar Graphen in Fhem eingebunden - per weblink iframe mit light Theme sieht das bei mir (mit Fhemweb ios7 Theme) echt gut aus.

Wie habt ihr das mit der Auth gelöst? Ich nutze den embedded Link, also mit controls und nicht die gerenderte Grafik.

Sobald in Grafana ausgeloggt bin, sehe ich in Fhem auch nur den Login Screen
Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

fischit

Du kannst dir, wie hier beschrieben, Gästezugriff bzw. die Rechte für anonymen Zugriff einstellen:
http://docs.grafana.org/installation/configuration/

Kai-Alfonso

Zitat von: fischit am 04 Januar 2018, 20:18:15
Du kannst dir, wie hier beschrieben, Gästezugriff bzw. die Rechte für anonymen Zugriff einstellen:
http://docs.grafana.org/installation/configuration/

Ach cool, darauf bin ich gar nicht gekommen - ich hab ja mein Grafana Server dockerized, also hab ich das über Environment Variables gelöst. Läuft...

Jetzt muss ich noch herausfinden, ob ich die Formatierung der Tage ändern kann - scheint nur nach US Standard gehen (?)

Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

screetch82

Zitat von: Kai-Alfonso am 04 Januar 2018, 20:13:32
Moisen,


ich hab mittlerweile ein paar Graphen in Fhem eingebunden - per weblink iframe mit light Theme sieht das bei mir (mit Fhemweb ios7 Theme) echt gut aus.

Wie habt ihr das mit der Auth gelöst? Ich nutze den embedded Link, also mit controls und nicht die gerenderte Grafik.

Sobald in Grafana ausgeloggt bin, sehe ich in Fhem auch nur den Login Screen

habe ich auch so gelösst. link oder grafik benötigen beide den login. Ich werde auch nochmal in der configuration nach dem annony. Login schauen.

Kai-Alfonso

Zitat von: screetch82 am 08 Januar 2018, 10:38:35
habe ich auch so gelösst. link oder grafik benötigen beide den login. Ich werde auch nochmal in der configuration nach dem annony. Login schauen.

Funzt ganz easy- du musst im Prinzip nur 2 Parameter setzen:

in der .ini

[auth.anonymous]
enabled = true
org_name = $NAMEDEINERGRAFANAORG


oder als Umgebungsvariable (wenn Du wie ich Grafana unter Docker nutzt)

GF_AUTH_ANONYMOUS_ENABLED true
GF_AUTH_ANONYMOUS_ORG_NAME $NAMEDEINERGRAFANAORG


Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

TottiToad

Hi,

ich versuche mich gerade mit Grafana :)

Erst einmal bin ich völlig begeistert und konnte schon einige Graphen (Temperaturverläufe) umsetzten.

Jetzt bekomme ich es aber nicht hin, für einen Zähler Tageswerte anzuzeigen ?

Die Sache mit Timestamp verstehe ich noch nicht so ganz.

Ich möchte das jeweils der Tageswert angezeigt wird als Balken.

SELECT
  UNIX_TIMESTAMP(DATE_FORMAT(TIMESTAMP, '%Y-%m-%d')) as time_sec,
  VALUE as value,
  "HKV_Woche" as metric
FROM history
WHERE READING="Tagesverbrauch" AND DEVICE="HKV_Buro" AND $__timeFilter(TIMESTAMP)


So wird mir zwar der Wert angezeigt, jedoch z.B. der letzte Wert dann gleichzeitig auch an den Zukünftigen Tagen. Es soll aber nur für den einen Tag anzeigt werden, wenn danach kein Wert vorhanden ist, dann halt 0.


Ich hoffe ich konnte so halbwegs beschreiben worum es mir geht und ihr könnt mir weiterhelfen.

Grüße & Danke
Torsten

Kai-Alfonso

Moin,

ich habe auch mal eine Grafana oder MYSQL Frage :-)

Wie muss der Select aussehen, das ich Werte, die zum Beispiel 9:59:00 in die DB geschrieben worden sind (Stundenwerte) als Balken dargestellt werden - und der Balken müsste von 9:00 bis 10 Uhr gehen (oder meinetwegen auch 9:59)
Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

lewej

Hi Thyraz,

kannwt du ein Beispiel zeigen wie du deine Monatswerte einmal im Monat ermittelst und die täglichen wären auch Interessant.
Gruss

Zitat von: Thyraz am 09 Oktober 2017, 11:02:21
Beispiel: Bar Chart mit monatlichen Verbräuchen
Ich habe in meiner Datenbank Logeinträge von mehreren Statistic-Modul Instanzen die mir den täglichen / monatlichen / jährlichen Stromverbrauch diverser Geräte aufzeichnen.

Das Problem ist hier, dass zB. bei den monatlichen Verbräuchen der Timestamp 5 Sekunden vor dem Monatswechsel geloggt wird.
Dadurch sitzt der Balken im Diagramm mehr im nächsten Monat als im eigentlich zugehörigen.
Um das zu umgehen wird die DATE_FORMAT Funktion von MySQL genutzt um Uhrzeit und Tag des Monats im Timestamp zu manipulieren:


SELECT
  UNIX_TIMESTAMP(DATE_FORMAT(TIMESTAMP, '%Y-%m-01')) as time_sec,
  VALUE as value,
  "Trockner" as metric
FROM history
WHERE READING="statEnergyValMonthLast" AND DEVICE="Dummy_PowerSwitch04" AND $__timeFilter(TIMESTAMP)


- Im Reiter Display ist der Draw Mode statt Line auf Bars gesetzt
- Im Reiter Time Range habe ich Override relative time auf 1 Jahr (1y) gesetzt
- Beim Select Statement für das zweite Gerät im Balkendiagramm habe ich den Tag in der DATE_FORMAT Funktion nicht auf 1, sondern auf 4 gesetzt. Dadurch sind die Balken etwas versetzt zu einander.
Das ist optisch von Vorteil falls der hintere Balken mal kleiner ist als vordere.

Kai-Alfonso

Hi, ich würde gerne auch das Tables Widget nutzen, scheitere aber beim Datum. Ich bekomme die Unix Time, würde gerne aber Datetime nutzen.

Wie müsste das denn beim Select aussehen?

UNIX_TIMESTAMP(DATE_FORMAT(TIMESTAMP, '%Y-%m-%D')) as time_sec, funktioniert irgendwie nicht,.
Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

Thyraz

Zitat von: Kai-Alfonso am 09 Februar 2018, 11:27:54
Moin,

ich habe auch mal eine Grafana oder MYSQL Frage :-)

Wie muss der Select aussehen, das ich Werte, die zum Beispiel 9:59:00 in die DB geschrieben worden sind (Stundenwerte) als Balken dargestellt werden - und der Balken müsste von 9:00 bis 10 Uhr gehen (oder meinetwegen auch 9:59)

Dafür musst du an sich nur die Minuten und Sekunden aus dem Datetime String auf 0 setzen und die Anzeigeart des Graphen auf Bars statt Line.
Sollte so gehen denke ich:

UNIX_TIMESTAMP(DATE_FORMAT(TIMESTAMP, '%Y-%m-%d %H:00:00')) as time_sec
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

Thyraz

Zitat von: lewej am 09 Februar 2018, 18:19:33
Hi Thyraz,

kannwt du ein Beispiel zeigen wie du deine Monatswerte einmal im Monat ermittelst und die täglichen wären auch Interessant.
Gruss

Hallo lewej,

das ist wie in dem Post beschrieben mit dem Statistics Modul geschehen:
https://wiki.fhem.de/wiki/Statistics

Alternativ kann man diese auch direkt in Mysql aus den Einzelwerten ermitteln lassen.
Das ist hier beschrieben:
https://forum.fhem.de/index.php/topic,77724.msg717020.html#msg717020

Vorteil: Keine zusätzlichen Hilfsdaten in der Datenbank nötig. Daher auch auf bereits vorhandene Altdaten anwendbar.
Nachteil: Aufwändige Berechnungen bei jedem Anzeigen des Charts, daher je nach Hardware des DB-Servers evtl. lange Ladezeiten.

Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

Kai-Alfonso

Zitat von: Thyraz am 13 Februar 2018, 14:50:03
Dafür musst du an sich nur die Minuten und Sekunden aus dem Datetime String auf 0 setzen und die Anzeigeart des Graphen auf Bars statt Line.
Sollte so gehen denke ich:

UNIX_TIMESTAMP(DATE_FORMAT(TIMESTAMP, '%Y-%m-%d %H:00:00')) as time_sec



Das hatte ich auch - schien aber ein Bug in Grafana zu sein, wenn man manuell die Time Range ändert. Jetzt gehts aber :-) Danke
Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

Thyraz

Zitat von: Kai-Alfonso am 13 Februar 2018, 12:53:01
Hi, ich würde gerne auch das Tables Widget nutzen, scheitere aber beim Datum. Ich bekomme die Unix Time, würde gerne aber Datetime nutzen.

Wie müsste das denn beim Select aussehen?

UNIX_TIMESTAMP(DATE_FORMAT(TIMESTAMP, '%Y-%m-%D')) as time_sec, funktioniert irgendwie nicht,.

UNIX_TIMESTAMP macht ja auch aus einem Datetime String einen Timestamp.
Wenn du das nicht willst musst du die Funktion also einfach weglassen. ;)

Oder geht es darum, dass du die Zeit auch brauchst?
Dann so:
UNIX_TIMESTAMP(DATE_FORMAT(TIMESTAMP, '%Y-%m-%d %H:%i%s')) as time_sec

Dazu mal die Doku von DATE_FORMAT anschauen:
https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format


Wobei das das ehrlich gesagt genau dem entspricht was in der DB in TIMESTAMP drin steht.
Damit kann man sich wahrscheinlich das DATE_FORMAT sparen und einfach den Code verwenden:

TIMESTAMP as time_sec

Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

Kai-Alfonso

Zitat von: Thyraz am 13 Februar 2018, 15:18:14
UNIX_TIMESTAMP macht ja auch aus einem Datetime String einen Timestamp.
Wenn du das nicht willst musst du die Funktion also einfach weglassen. ;)

Oder geht es darum, dass du die Zeit auch brauchst?
Dann so:
UNIX_TIMESTAMP(DATE_FORMAT(TIMESTAMP, '%Y-%m-%d %H:%i%s')) as time_sec

Dazu mal die Doku von DATE_FORMAT anschauen:
https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format


Wobei das das ehrlich gesagt genau dem entspricht was in der DB in TIMESTAMP drin steht.
Damit kann man sich wahrscheinlich das DATE_FORMAT sparen und einfach den Code verwenden:

TIMESTAMP as time_sec


Achso  8)


Deine Lösung hatte ich auch mal probiert, bekomme aber in der time_sec Spalte statt einen Wert das Zeichen "-" . Das hatte mich verwirrt  :o :o :o

SELECT
UNIX_TIMESTAMP(DATE_FORMAT(TIMESTAMP, '%Y-%m-%d %H:%i%s')) as time_sec,
value as value
FROM history
  WHERE READING="statTotal_consumptionDayLast" AND DEVICE="Stromzaehler" AND $__timeFilter(TIMESTAMP)


Es geht im Prinzip um eine Tabelle, wo ich die Tageswerte ausgeben lassen möchte. '%Y-%m-%d  als Ausgabe würden mir reichen




Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

Kai-Alfonso

@Thyraz

Hast Du noch eine Idee, wo ran es liegen kann? (siehe Screenshot)

Column Style steht auf Date - ändere ich den Style auf String zB dann ist die Spalte sogar leer

Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)