Autor Thema: Hinweis: Schöne Alternative für Charts/Plots mit Grafana und DBLog (MySQL)  (Gelesen 15029 mal)

Offline triagony

  • New Member
  • *
  • Beiträge: 11
Guten Morgen. Noch einmal danke für deine Antwort.

Vorweg zur Info: Grafana und Fhem laufen bei mir auf dem gleichen Host, nur auf unterschiedlichen Ports (fhem: 8083 / grafana: 3001). Für Fhem selbst habe ich einen reverse Proxy eingerichtet, mit dem ich von außen, d.h. aus dem Internet über https://DOMAIN auf Fhem zugreifen kann. Der reverse Proxy liegt auf einem anderen Host (jeweils virtuelle Maschinen). Meine Apache-Config hierfür sieht so aus:

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName DOMAIN

    ServerAdmin EMAIL
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/DOMAIN.error.log
    CustomLog ${APACHE_LOG_DIR}/DOMAIN.access.log combined

    SSLCertificateFile /etc/letsencrypt/live/DOMAIN/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/DOMAIN/privkey.pem

    Include /etc/letsencrypt/options-ssl-apache.conf

    ProxyRequests Off
    ProxyVia Off
    ProxyPreserveHost On

    <Location /fhem>
    RewriteEngine On
    RewriteCond %{HTTP:Upgrade} =websocket [NC]
    RewriteRule /fhem(.*)           ws://FHEM-IP:8083/fhem$1 [P,L]
    RewriteCond %{HTTP:Upgrade} !=websocket [NC]
    RewriteRule /fhem(.*)           http://FHEM-IP:8083/fhem$1 [P,L]


        ProxyPass  http://FHEM-IP:8083/fhem
        ProxyPassReverse  http://FHEM-IP:8083/fhem
# ProxyHTMLURLMap passt Links im HTML/JavaScript Source an
  ProxyHTMLURLMap /        /fhem/
  ProxyHTMLURLMap /fhem/     /fhem/

        AuthType Basic
        AuthName "Password Required"
        AuthUserFile /etc/fhem-htpasswd
        Require valid-user
        Order deny,allow
        Allow from all
</Location>
<Directory />
   RedirectPermanent / /fhem
</Directory>
</VirtualHost>
</IfModule>

Für Grafana (läuft auf dem gleichen Host wie FHEM nur auf einem anderen Port, s.o.) habe ich - wie gesagt - bisher keine eigene von außen über den reverse Proxy erreichbare Adresse eingerichtet.

Mit "in Fhem einbinden" meine ich das Einbinden eines Graphen mittels Weblink in folgender Form (Beispiel):

define NAME weblink image http://[GRAFANA-IP]:3001/render/dashboard-solo/db/dashboard?orgId=1&from=now-2d&to=now&panelId=2&width=780&height=480&tz=UTC%2B02%3A00&theme=light
Das funktioniert auch, solange ich mich im gleichen LAN befinde. Es funktioniert nicht, wenn ich mich über den rProxy auf die Fhem-Oberfläche verbinde und dort den Grafana-Graphen anzeigen lassen möchte. Dort erscheint dann nur ein Platzhalter für den Graphen.

Wenn ich nun - weil es anders nicht geht(?) - auch grafana von außen erreichbar mache (mittels reverse proxy), müsste ich dann in meinem weblink-Beispiel die von außen erreichbare Domain im Link eintragen, richtig? Oder gibt es doch einen Weg, die LAN-IP zu nutzen? Ich fänd es ziemlich umständlich, die Grafana-Graphiken, über das Internet einzubinden / abzurufen, wenn doch die Graphiken an sich auf dem gleichen Host wie Fhem liegen.

Vielleicht habe ich aber auch nur einen (oder mehrere) Denkfehler?

Danke und beste Grüße

Offline RoBra81

  • Sr. Member
  • ****
  • Beiträge: 967
Hallo,

ich kenne mich zwar mit dem ReverseProxy nicht aus, aber eine möglich Alternative wäre es vielleicht, die Bilder von Grafana mittels cronjob und wget zyklisch auf dem Server ablegen zu lassen (z.B. im FHEM-WWW-Verzeichnis) und von dort aus anzuzeigen - könnte unter Umständen sogar schneller laden  ;)

Ronny

Offline sku

  • Jr. Member
  • **
  • Beiträge: 90
Hallo,

ich kenne mich zwar mit dem ReverseProxy nicht aus, aber eine möglich Alternative wäre es vielleicht, die Bilder von Grafana mittels cronjob und wget zyklisch auf dem Server ablegen zu lassen (z.B. im FHEM-WWW-Verzeichnis) und von dort aus anzuzeigen - könnte unter Umständen sogar schneller laden  ;)

Ronny
Dann wäre doch der Vorteil von Grafana dahin, dass man in der Grafik zB. rumzoomen kann.

Mit "in Fhem einbinden" meine ich das Einbinden eines Graphen mittels Weblink in folgender Form (Beispiel):

define NAME weblink image http://[GRAFANA-IP]:3001/render/dashboard-solo/db/dashboard?orgId=1&from=now-2d&to=now&panelId=2&width=780&height=480&tz=UTC%2B02%3A00&theme=light
Das funktioniert auch, solange ich mich im gleichen LAN befinde. Es funktioniert nicht, wenn ich mich über den rProxy auf die Fhem-Oberfläche verbinde und dort den Grafana-Graphen anzeigen lassen möchte. Dort erscheint dann nur ein Platzhalter für den Graphen.

Wenn ich nun - weil es anders nicht geht(?) - auch grafana von außen erreichbar mache (mittels reverse proxy), müsste ich dann in meinem weblink-Beispiel die von außen erreichbare Domain im Link eintragen, richtig? Oder gibt es doch einen Weg, die LAN-IP zu nutzen? Ich fänd es ziemlich umständlich, die Grafana-Graphiken, über das Internet einzubinden / abzurufen, wenn doch die Graphiken an sich auf dem gleichen Host wie Fhem liegen.

Ich meine, es muss Grafana auch von außen erreichbar sein. Den Weblink ruft ja der Browser auf, daher muss das ebenfalls über den Apache Proxy laufen.
Wenn du im internen LAN bist und die von außen erreichbare Domain aufrufst, sollte der Router das direkt umleiten und nicht über das Internet schicken.


Gruß

Offline triagony

  • New Member
  • *
  • Beiträge: 11
Dann wäre doch der Vorteil von Grafana dahin, dass man in der Grafik zB. rumzoomen kann.

Ich meine, es muss Grafana auch von außen erreichbar sein. Den Weblink ruft ja der Browser auf, daher muss das ebenfalls über den Apache Proxy laufen.
Wenn du im internen LAN bist und die von außen erreichbare Domain aufrufst, sollte der Router das direkt umleiten und nicht über das Internet schicken.


Gruß
Na dann werde ich wohl diesen Weg gehen (müssen). Vielen Dank nochmal.

Beste Grüße

Gesendet von meinem SM-G950F mit Tapatalk


Offline RoBra81

  • Sr. Member
  • ****
  • Beiträge: 967
Dann wäre doch der Vorteil von Grafana dahin, dass man in der Grafik zB. rumzoomen kann.

Ja, ich selbst habe es auch als iFrame direkt eingebunden, aber dem Code von @triagony hatte ich entnommen, dass er es sowieso schon als image einbindet...

Offline sku

  • Jr. Member
  • **
  • Beiträge: 90
Ja, ich selbst habe es auch als iFrame direkt eingebunden, aber dem Code von @triagony hatte ich entnommen, dass er es sowieso schon als image einbindet...
Tatsache, so genau hatte ich vorhin gar nicht geschaut...

Offline Kai-Alfonso

  • Full Member
  • ***
  • Beiträge: 356
Guten Morgen,

ich habe Grafana im Docker Containter laufen, welches sich dann hin und wieder mit Watchtower automatisch updated.

Naja, es scheint das Grafana irgendwas geändert hat - in meinen Graphen (die vorher gingen), bekomme ich folgende Fehlermeldung:

Zitat
"Value column must have numeric datatype, column: value type: string value

Der Select dazu sieht folgendermaßen aus:

SELECT
UNIX_TIMESTAMP(DATE_FORMAT(TIMESTAMP, '%Y-%m-%d %H')) as time_sec,
    VALUE as value,
    "Wasserverbrauch Stunde" as metric
  FROM history
  WHERE READING="LitreHourLast" AND DEVICE="Wasserzaehler" AND $__timeFilter(TIMESTAMP)

Jemand eine Idee?
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)

Offline Thyraz

  • Sr. Member
  • ****
  • Beiträge: 875
Hab bei mir Grafana länger nicht aktualisiert.
Evtl. sind die etwas strikter bei den Datentypen geworden statt automatisch zu konvertieren.

Hier war mal ein manuellen konvertieren drin, da man mit Strings nicht as "+2" hätte rechnen können:
https://forum.fhem.de/index.php/topic,77724.msg697780.html#msg697780

Falls du was mit Komma statt nur Ganzzahlen brauchst, müsstest du mal suchen wie SQL das statt Integer nennt.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Lacrosse, Hue, Harmony, Solo4k, LaMetric, Snips, ...

Offline Kai-Alfonso

  • Full Member
  • ***
  • Beiträge: 356
Hab bei mir Grafana länger nicht aktualisiert.
Evtl. sind die etwas strikter bei den Datentypen geworden statt automatisch zu konvertieren.

Hier war mal ein manuellen konvertieren drin, da man mit Strings nicht as "+2" hätte rechnen können:
https://forum.fhem.de/index.php/topic,77724.msg697780.html#msg697780

Falls du was mit Komma statt nur Ganzzahlen brauchst, müsstest du mal suchen wie SQL das statt Integer nennt.

Hey danke - ich hab es jetzt dank deines Hinweises so hinbekommen (keine Ahnung, ob es auch anders geht)

Aus

VALUE as value
wurde

CONVERT(VALUE, INTEGER) as value,
Damit werden die Graphen wieder dargestellt ;D ;D
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)

Offline sku

  • Jr. Member
  • **
  • Beiträge: 90
CONVERT(VALUE, INTEGER) as value,
Damit werden die Graphen wieder dargestellt ;D ;D

Mir half
CONVERT(VALUE, double) as value,da mit deiner Lösung die Nachkommastellen von Temperaturen gerundet werden.


Habe meinen Code in Antwort #19 ebenfalls angepasst.
« Letzte Änderung: 08 Mai 2018, 16:46:43 von sku »
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline fhemfreund

  • Full Member
  • ***
  • Beiträge: 109
Habe auch mal Grafana installiert und in Fhem eingebunden. Bin soweit sehr zufrieden :-)

Bei der Darstellung eines Stromverbrauch-Plots komme ich aber nicht weiter.
Mein SQL Statement selektiert nach den in letzter Stunde verbrauchen KWh, die immer um **.59:55 der jeweiligen Stunde geschrieben werden:

SELECT
  UNIX_TIMESTAMP(TIMESTAMP) as time_sec,
  CONVERT (VALUE,DECIMAL(7,3)) as value,
  "Stromverbrauch" as metric
FROM history
WHERE READING="statKWhHourLast" AND DEVICE="ESPEasy_HmWifiEng2_Energy_Total" AND $__timeFilter(TIMESTAMP)

Allerdings stellt Grafana diese für die darauf folgende Stunde dar (siehe angehängte Grafik), obwohl es ja eine Aufsummierung der vergangenen Stunde ist (und auch der Datensatz noch innerhalb dieser in die DB geschrieben wird).

Gibt es eine Möglichkeit, die Bar-Charts daher an den Anfang der entsprechenden Stunde zu plotten?
Habe es schon mit 'Timeshift' im Tab 'Time-Range' versucht - allerdings verschiebt dieser nur die X-Achse um eine Stunde, aber nicht die Darstellung der Bar-Charts ...

Andreas

Offline SabineT

  • Full Member
  • ***
  • Beiträge: 187
Du könntest mit:

SELECT
  (UNIX_TIMESTAMP(TIMESTAMP) DIV 3600)* 3600  as time_sec,
  CONVERT (VALUE,DECIMAL(7,3)) as value,
  "Stromverbrauch" as metric
FROM history
WHERE READING="statKWhHourLast" AND DEVICE="ESPEasy_HmWifiEng2_Energy_Total" AND $__timeFilter(TIMESTAMP)

die Minuten und Sekunden auf 0 setzen.

Sabine
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline Thyraz

  • Sr. Member
  • ****
  • Beiträge: 875
Genau. Grafana weiß ja nicht, dass es sich um einen Tageswert handelt.
Das Ereignis in der Datenbank beginnt bei 59 Minuten und 55 Sekunden.

Da zeichnet es Grafana dann eben in den Grafen, was für dich aussieht als ob es bei der Folgestunde losgeht.

Den Zeitstempel beim Laden so zu manipulieren, dass er auf den Anfang der Stunde statt das Ende zeigt, sollte das Problem also lösen.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Lacrosse, Hue, Harmony, Solo4k, LaMetric, Snips, ...
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline fhemfreund

  • Full Member
  • ***
  • Beiträge: 109
Du könntest mit:

SELECT
  (UNIX_TIMESTAMP(TIMESTAMP) DIV 3600)* 3600  as time_sec,
  CONVERT (VALUE,DECIMAL(7,3)) as value,
  "Stromverbrauch" as metric
FROM history
WHERE READING="statKWhHourLast" AND DEVICE="ESPEasy_HmWifiEng2_Energy_Total" AND $__timeFilter(TIMESTAMP)

die Minuten und Sekunden auf 0 setzen.

Sabine

Klasse Tip - hat einwandfrei funktioniert. Danke dafür. Da ich allerdings kein SQL-Jünger bin: was ist denn der Trick hinter dem Teilen und Multiplizieren der Sekunden einer Std.?

Andreas

Offline SabineT

  • Full Member
  • ***
  • Beiträge: 187
Klasse Tip - hat einwandfrei funktioniert. Danke dafür. Da ich allerdings kein SQL-Jünger bin: was ist denn der Trick hinter dem Teilen und Multiplizieren der Sekunden einer Std.?

Andreas
Das ist eigentlich nichts SQL Spezifisches.

DIV ist eine Division, bei der beim Ergebnis der Teil hinter dem Komma weg gelassen wird. Wenn du also z.B. einen Timestamp "01:59:59" hast (also 1 Stunde, 59 Minuten, 59 Sekunden), dann wird das erst mal auf 7199 Sekunden umgerechnet (den Datumsanteil hab ich der Einfach heit halber hier mal weg gelassen), nach dem DIV 3600 bleibt dann 1 als Ergebnis über.

Grafana will aber den Wert in Sekunden haben, daher wird das dann einfach wieder mit 3600 Multipliziert.
Dadurch wird aus "01:59:59" eben dann "01:00:00".

Sabine
« Letzte Änderung: 08 August 2018, 06:44:59 von SabineT »
Gefällt mir Gefällt mir x 1 Liste anzeigen

 

decade-submarginal