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

Thyraz

Also als erstes fehlt bei DATE_FORMAT ein Doppelpunkt zwischen Minuten und Sekunden. ;)
Den Fehler hast leider von meinem schnell hingepinselten Code übernommen.

Aber ich hatte da noch einen weiteren Denkfehler drin: das äußere UNIX_TIMESTAMP sollte auch weg.
Du willst ja einen lesbaren Datumsstring und nicht irgendeine riesige Nummer im Unix Zeitformat (Sekunden seit 1970).
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 16 Februar 2018, 08:23:20
Also als erstes fehlt bei DATE_FORMAT ein Doppelpunkt zwischen Minuten und Sekunden. ;)
Den Fehler hast leider von meinem schnell hingepinselten Code übernommen.

Aber ich hatte da noch einen weiteren Denkfehler drin: das äußere UNIX_TIMESTAMP sollte auch weg.
Du willst ja einen lesbaren Datumsstring und nicht irgendeine riesige Nummer im Unix Zeitformat (Sekunden seit 1970).

Lol, ist mir auch entgangen :-) Einfach blind mitkopiert  8)  Jetzt hab ich es aber hinbekommen dank deiner Hilfe. Das UNIX_TIMESTAMP musste weg. vielen Dank dafür
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)

triagony

Hallo!
Erstmal aller besten Dank für diese tolle Anleitung und vor allem auch die Beispiele! Echt klasse. Ich würde gerne sowohl die Helligkeit (Lux) des aktuellen Tages als die Helligkeit des vorangegangenen Tages "übereinander liegend", sozusagen als Overlay, anzeigen lassen.

Der erste Plot für den aktuellen Tag (der auch funktioniert) sieht wie folgt aus:

SELECT
  UNIX_TIMESTAMP(TIMESTAMP) as time_sec,
  VALUE as value,
  "Helligkeit" as metric
FROM history
WHERE READING="Helligkeit" AND DEVICE="Lichtsensor" AND $__timeFilter(TIMESTAMP)


Für den zweiten Plot (also für den vom gestrigen Tag) habe ich folgendes versucht:

SELECT
  UNIX_TIMESTAMP(TIMESTAMP) as time_sec,
  VALUE as value,
  "Helligkeit gestern" as metric
FROM history
WHERE READING="Helligkeit" AND DEVICE="Lichtsensor" AND TIMESTAMP >= NOW() - INTERVAL 24 HOUR


Leider liefert das 2. Query exakt denselben Plot wie das erste Query. Ich muss dazu sagen, dass ich von SQL absolut keine Ahnung habe (sieht man vielleicht auch an meiner Frage ;) ). Hat jemand einen Tipp für mich?

Danke und beste Grüße!

PS: um es etwas besser zu verdeutlichen, angehängt der Plot, wie ich ihn bisher verwende.


triagony

Hat jemand Erfahrung mit Fhem und Grafana hinter einem Reverse Proxy?

Bei mir werden die Grafana-Plots in Fhem nur angezeigt, wenn ich mit meinem LAN verbunden bin.  Über den Reverse Proxy (Apache - im Wesentlichen wie im Video-Tutorial von Matthias Kleine konfiguriert) leider nicht.

Vielen Dank und Beste Grüße!

Gesendet von meinem SM-G950F mit Tapatalk


cyberthom

Ich habe diesen Post bei der Suche nach Grafana Statistiken für Fussbodenheizung gefunden. Ich muß sagen, super Post!!!
Ich bin auch gerade dabei meine Sensordaten sinnvoll in Grafana abzubilden. Eine Sache fehlt mir bzw. weiß ich nicht, wie ich sie realisieren kann, ich denke aber, dass sie zu einen deiner ersten Grafiken sehr gut passen würde.
Ich habe auch die Raumtemperatur und die Zeiten, in denen das Fussbodenventil auf und zu ist abgebildet. Ich habe momentan noch eine Tag/Nacht Steuerung (möchte keine Diskussion über Tag/Nacht Steuerung anfangen). Wie kann ich bei Grafana eine Art "Referenzkurve" hinterlegen, welche die Solltemperatur nach Tageszeit zeigt. Ich habe z.B. für das Schlafzimmer 5 Verschiedene Solltemperaturen über den Tag verteilt.Eine Variante wäre diese auch in einer Datenbank zu loggen, ich möchte hier aber DB-Einträge sparen, die Daten sind ja jeden Wochentag gleich.

RoBra81

Guten Morgen,

Zitat von: Thyraz am 11 Oktober 2017, 07:33:04
Beispiel: Kurve ausdünnen bei zu vielen Messwerten (lange Ladezeiten / langsamer Seitenaufbau)

Meine LaCrosse Thermometer loggen die Temperatur mit 0.1°C Genauigkeit, wodurch man an sich ständig Schwankungen hat und somit massig Messwerte.
Damit die Diagramme auf dem Handy anständig laden, zeige ich weit weniger Punkte in der Kurve an, als Messwerte vorhanden sind.
Um dennoch eine möglichst genaue Darstellung der Kurven zu bekommen, wird dazu jeweils aus den zusammengefassten Punkten der Mittelwert gebildet.

Zuerst das normale Select Statement mit allen Messpunkten:

SELECT
  UNIX_TIMESTAMP(TIMESTAMP) as time_sec,
  VALUE as value,
  "Original" as metric
FROM history
WHERE READING="temperatureVal" AND DEVICE="Thermometer02" AND $__timeFilter(TIMESTAMP)


Und hier dann die angepasste Version mit Gruppierung zu 300s / 5min und der Average Berechnung:

SELECT
  UNIX_TIMESTAMP(TIMESTAMP) as time_sec,
  AVG(CONVERT(VALUE, DOUBLE)) as value,
  Geglättet" as metric
FROM history
WHERE READING="temperatureVal" AND DEVICE="Thermometer02" AND $__timeFilter(TIMESTAMP)
GROUP BY UNIX_TIMESTAMP(TIMESTAMP) DIV 300


Edit:
Es gibt noch eine erweiterte Möglichkeit um die Stärke der Glättung an den gerade gewählten Zeitraum anzupassen.
Das hilft, damit bei einem Anzeigezeitraum von 1 Woche ähnlich viele Datenpunkte angezeigt werden wie wenn man 1 Jahr wählt.
Bei einer Gruppierung mit einem festen Sekunden-Teiler wäre dies nicht der Fall.

Grafana bietet hierzu eine Variable $__interval welche sich beim ändern des Zeitraums anpasst.
Sie nimmt dabei Werte wie z.B. 2s, 5m, 1h an.
Dies kann man wie folgt verwenden:

SELECT
  UNIX_TIMESTAMP(TIMESTAMP) as time_sec,
  AVG(CONVERT(VALUE, DOUBLE)) as value,
  "Geglättet" as metric
FROM history
WHERE READING="temperatureVal" AND DEVICE="Thermometer02" AND $__timeFilter(TIMESTAMP)
GROUP BY UNIX_TIMESTAMP(TIMESTAMP) DIV CASE RIGHT($__interval, 1) 
                                          WHEN 's' THEN $__interval
                                          WHEN 'm' THEN $__interval * 60
                                          WHEN 'h' THEN $__interval * 3600
                                          WHEN 'h' THEN $__interval * 86400
                                          ELSE $__interval
                                        END


Wem die Glättung dabei zu gering ausfällt, kann hinter das *60, *3600 usw. auch noch einen weiteren Multiplikator hinzufügen.

ich habe Grafana gerade mal auf Version 5.0.0 upgedated, aber leider funktioniert das ausdünnen dann nicht mehr, sondern der Plot wirft einen Fehler - hat jemand eine Idee, wie man das löst?

Danke
Ronny

RoBra81

Guten Morgen,

Ich habe noch eine andere Frage: Ich habe eine Idee, die ich gern mit der Heatmap umsetzen möchte, aber leider reichen meine SQL-Kenntnisse hierfür nicht  :(: Ich logge in meiner Datenbank die Zustände der Bewegungsmelder (Reading motion mit Wert on/off). Nun hätte ich gern folgende Heatmap:

x-Achse: Tage (also Zeitpunkt)
y-Achse: Stunde des Tages (0..23)
"Heat-Wert" soll pro Stunde eines Tages per Farbe die Gesamtdauer des Zustandes on für das Reading motion anzeigen (z.B. 0min = schwarz, 60min = tiefrot).

Wäre dies irgendwie möglich?

Vielen Dank
Ronny

Tuxi70

Bei mir sieht es so stufig aus. Geht es auch ein weniger Stufiger?
FRITZ!Box: Fon WLAN 7560, FW: 7.0
James: Raspberry Pi 3 Alexa-Fhem 0.4.4 & FHEM 5.8 Latest Revision: 16799 & SVG-DBLog MySQL 3.10.8
Netz : VDSL 1&1 50.000 3x FRITZ!Powerline 530E FW: 1.4.0-00
Smarthome: 4x Comet DECT Thermostat Firmware: 3.68 8x FritzDECT200 Firmware: 4.08
Steuerung: Alexa

alook90

Versuch mal in den Einstellungen deines Graphen unter dem Reiter "Display" den Punkt "Staircase" (unter "Mode Options") zu deaktivieren. Durch diese Einstellung wird bei mir die Kurve "stufiger" (siehe Anhang).



Gruß,
Alex

Tuxi70

Mir ist da was aufgefallen, was mir bei der "Legend-Anzeige" ersichtlich wurde. Denn ein Wohnzimmer total mit gut 4000 °C zu beheizen (siehe Screenshot), ist doch irgendwie unglaubwürdig, oder?  8)
FRITZ!Box: Fon WLAN 7560, FW: 7.0
James: Raspberry Pi 3 Alexa-Fhem 0.4.4 & FHEM 5.8 Latest Revision: 16799 & SVG-DBLog MySQL 3.10.8
Netz : VDSL 1&1 50.000 3x FRITZ!Powerline 530E FW: 1.4.0-00
Smarthome: 4x Comet DECT Thermostat Firmware: 3.68 8x FritzDECT200 Firmware: 4.08
Steuerung: Alexa

SabineT

Zitat von: Tuxi70 am 29 März 2018, 17:13:01
Mir ist da was aufgefallen, was mir bei der "Legend-Anzeige" ersichtlich wurde. Denn ein Wohnzimmer total mit gut 4000 °C zu beheizen (siehe Screenshot), ist doch irgendwie unglaubwürdig, oder?  8)
Total wird da auch keinen Sinn machen, da werden vermutlich alle Messwerte des angezeigen Bereiches addiert...

lg, Sabine

Tuxi70

Für Steckdosen ist es eher Brauchbar, da auch dort die Readings zusammen gerechnet werden und die Maßeinheit passend umgestellt werden.
FRITZ!Box: Fon WLAN 7560, FW: 7.0
James: Raspberry Pi 3 Alexa-Fhem 0.4.4 & FHEM 5.8 Latest Revision: 16799 & SVG-DBLog MySQL 3.10.8
Netz : VDSL 1&1 50.000 3x FRITZ!Powerline 530E FW: 1.4.0-00
Smarthome: 4x Comet DECT Thermostat Firmware: 3.68 8x FritzDECT200 Firmware: 4.08
Steuerung: Alexa

sku

Zitat von: triagony am 22 Februar 2018, 09:56:10
Hat jemand Erfahrung mit Fhem und Grafana hinter einem Reverse Proxy?

Bei mir werden die Grafana-Plots in Fhem nur angezeigt, wenn ich mit meinem LAN verbunden bin.  Über den Reverse Proxy (Apache - im Wesentlichen wie im Video-Tutorial von Matthias Kleine konfiguriert) leider nicht.

Vielen Dank und Beste Grüße!

Gesendet von meinem SM-G950F mit Tapatalk

Ich betreibe Grafana hinter einem Apache reverse Proxy.

/etc/apache2/sites-available/seite.conf :
        <Location /grafana-fhem-pc/>
                RequestHeader unset Authorization
                ProxyPass http://192.168.123.4:3000/
                ProxyPassReverse http://192.168.123.4:3000/
                # auth
                Satisfy All
                AuthType Basic
                AuthName "private"
                AuthUserFile /etc/apache2/users.htpasswd
                Require user username1 username2
        </Location>


/etc/grafana/grafana.ini :
domain = example.com
root_url = %(protocol)s://%(domain)s:/grafana-fhem-pc


Location aus der Apache config und root_url aus Grafana muss ident sein! in meinem Fall "/grafana-fhem-pc"

Hier noch das DIV meiner tabletui:
<div style="float:right"
                        data-type="iframe"
                        data-src="https://example.com/grafana-fhem-pc/dashboard/db/dashboardname?orgId=1&from=now%2Fd&to=now%2Fd"
                        data-fill="yes"
                        data-scrolling="yes">
                </div>


Gruß

triagony

Zitat von: sku am 03 April 2018, 12:07:23
Ich betreibe Grafana hinter einem Apache reverse Proxy.

/etc/apache2/sites-available/seite.conf :
        <Location /grafana-fhem-pc/>
                RequestHeader unset Authorization
                ProxyPass http://192.168.123.4:3000/
                ProxyPassReverse http://192.168.123.4:3000/
                # auth
                Satisfy All
                AuthType Basic
                AuthName "private"
                AuthUserFile /etc/apache2/users.htpasswd
                Require user username1 username2
        </Location>


/etc/grafana/grafana.ini :
domain = example.com
root_url = %(protocol)s://%(domain)s:/grafana-fhem-pc


Location aus der Apache config und root_url aus Grafana muss ident sein! in meinem Fall "/grafana-fhem-pc"

Hier noch das DIV meiner tabletui:
<div style="float:right"
                        data-type="iframe"
                        data-src="https://example.com/grafana-fhem-pc/dashboard/db/dashboardname?orgId=1&from=now%2Fd&to=now%2Fd"
                        data-fill="yes"
                        data-scrolling="yes">
                </div>


Gruß
Hallo, vielen Dank für deine Antwort. Sehe ich das richtig, dass du den grafana-server selbst über den reverse Proxy von außen erreichbar machst?

Ich hatte eigentlich "nur" vor, von außen auf Fhem zugreifen zu können (das funktioniert) und dann dort (d.h. innerhalb von Fhem) auch grafana-Grafiken anzeigen zu lassen. Ist es dafür zwingend notwendig, grafana selbst von außen erreichbar zu machen?

Beste Grüße.

Gesendet von meinem SM-G950F mit Tapatalk


sku

Zitat von: triagony am 03 April 2018, 16:12:34
Hallo, vielen Dank für deine Antwort. Sehe ich das richtig, dass du den grafana-server selbst über den reverse Proxy von außen erreichbar machst?

Ich hatte eigentlich "nur" vor, von außen auf Fhem zugreifen zu können (das funktioniert) und dann dort (d.h. innerhalb von Fhem) auch grafana-Grafiken anzeigen zu lassen. Ist es dafür zwingend notwendig, grafana selbst von außen erreichbar zu machen?

Was meinst du mit "innerhalb von FHEM?" Als eingebettete Seite wie in meinem Tabletui Beispiel?

Ich kenne nur die Möglichkeit, Seiten miteinzubinden wie in meinem Beispiel, welche aber auch vom jeweiligen Gerät aus erreichbar sein müssen. D.h. einbinden bietet keine Proxy Funktionalität.
Zusatzinfo: In der Apache config sind bei mir bei jedem Basic Auth die AuthName ident. Wenn der AuthName bei /fhem und /grafahan-fhem unterschiedlich ist, wird das Passwort 2x abgefragt (zumindest bei mir, als ich unterschiedliche AuthName verwendet hatte^^). Die Domain muss auch gleich sein denke ich, zumindest hab ichs anders noch nicht getestet.

Gruß