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

GU!DO

Sorry, ich muss leider nochmal etwas fragen:

Da ich die Werte oberhalb der Tabelle ja nicht anzeigen kann, würde ich gerne die tooltip Funktion nutzen. Jedoch werden die Werte dort nicht richtig angezeigt:

Einstellung:
Mode: All series
Sort order: decreasing (bei increasing ist es genau so)

Problem (wie auf den Bildern zu sehen):
Wenn ich die Maus von links nach rechts ziehe,  bekomme ich bis ca. 17.08. 12:00 Uhr die im 1. Screenshot angezeigten Werte, egal auf welchen Tag ich die Maus ziehe.
Wenn ich diesen Punkt überschreite bekomme ich die Werte aus dem 2. Screenshot und zwar gleichbleibend bis zum Ende des Graphen.

Habt Ihr dazu vielleicht eine Idee?

Ich hatte schon gegoogelt. Es gab wohl Probleme beim Gruppieren von Daten, das mache ich jedoch nicht.
Anbei mal eine meiner 4 Queries:

SELECT datum as time, niederschlag FROM WetterCom16 ORDER BY id DESC LIMIT 16;

Die anderen 3 sind bis auf das value feld identisch.

kadettilac89

Zitat von: GU!DO am 12 August 2020, 09:31:40

Habt Ihr dazu vielleicht eine Idee?

in den tooltip zeigt er entweder den Beginn oder das Ende des Plots an.

1) welche Version hast du, bei mir mit 7.2 funktioniert es in einem ähnlichen Dashboard
2) hast du "Transform" irgendwas eingestellt?
3) was hast du bei den Query Optionen eingestellt?

kannst du ggf. das Panel mal in ein eigenes Dashboard kopieren und den Sourcecode als json hier einstellen? Ich nutze zwar InfluxDB als Source aber vielleicht fällt was auf.

Nutzt du Grafana in Docker? Dann kannst dir auch mal zum Testen einen zusätzlichen Container mit einer älteren / neueren Version bauen ... könnte auch ein Bug in deiner aktuellen Version sein.

antonwinden

Hallo,
Ich weiß nicht ob sonst noch jemand das Problem hat aber bei mir werden bei manchen Geräten in Value wo eigentlich nur numerische Werte gespeichert sein sollten auch jeweils die Einheit dazu in der Datenbank gespeichert.
z.B.
Wetterstation
VANTAGEPRO2
Wind: 8.04 km/h
Wind
8.04 km/h
oder:
MQTT_DEVICE
KWH: 23117.40 kw/h
KWH
23117.40 kw/h

wie kann ich das vermeiden oder in Grafana so umwandeln damit das auch funktioniert?
gruß Anton
KNX, Raspberry, Denon 3313, Philips TV, Xtrend9X00 und viel Optimismus...

ch.eick

Hallo zusammen,
gibt es mittlerweile einen Docker Container mit einer fertigen Grafana Konfiguration?
Ich nutze DBLog mit einer MySQL Datenbank, die auch bereits in einem Container läuft.

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

kadettilac89

Zitat von: ch.eick am 13 August 2020, 17:32:45
Hallo zusammen,
gibt es mittlerweile einen Docker Container mit einer fertigen Grafana Konfiguration?
Ich nutze DBLog mit einer MySQL Datenbank, die auch bereits in einem Container läuft.

Gruß
    Christian
was meinst du mit fertigen Grafana Konfiguration? Docker gibt's s. u. ... Config musst du selber machen, ist ja bei jedem anders


https://hub.docker.com/r/grafana/grafana/

kadettilac89

Zitat von: antonwinden am 13 August 2020, 16:34:14

Wetterstation
VANTAGEPRO2
Wind: 8.04 km/h
Wind
8.04 km/h
oder:
MQTT_DEVICE
KWH: 23117.40 kw/h
KWH
23117.40 kw/h

wie kann ich das vermeiden oder in Grafana so umwandeln damit das auch funktioniert?
gruß Anton


Was du machen könntest:
- Update machen wenn dein Fhem schon älter ist
- schreibe mal einen Post in "Automatisierung" und frag DS_Starter ob das ein Problem in DBLog sein könnte. Wenn nicht mal den Modulautor anschreiben. Du hast unterschiedliche Readings, es scheint als wäre das nicht auf ein einzelnes Modul beschränkt.

Als Workaround kannst du in den betroffenen Definitionen das Attribut "DbLogValueFn" setzen. Damit kannst du das Reading modifizieren bevor es in die DB geht. Würde die Datenbank bereinigen und nicht mit den Plots rummachen.

So könnte es funktionieren, habe es nicht getestet. Damit sollte nur der erste Teil vor dem Leerzeichen geloggt werden.

{
  if ($READING eq "Wind"){
    $VALUE = split(/ /,$VALUE))[0];
  }
}


ch.eick

Zitat von: kadettilac89 am 13 August 2020, 18:14:26
was meinst du mit fertigen Grafana Konfiguration? Docker gibt's s. u. ... Config musst du selber machen, ist ja bei jedem anders

https://hub.docker.com/r/grafana/grafana/

Ich hatte schon länger nicht mehr nach Grafana geschaut und da lief es noch nicht auf einem RPI im Docker Container.
Hab's gerade nach Deinem Link nochmal probiert und es läuft auf Anhieb. Ich konnte mich direkt anmelden.
Jetzt kann ich los lesen...
Vielen Dank
    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

GU!DO

Hallo kadettilac89,

Danke für Deine schnelle Antwort und Sorry für meine Verspätung.

Was mir noch aufgefallen ist:
Da es sich ja immer um Tageswerte handelt, besteht mein Timestamp nur aus einem Datum. Aber das sollte, vermute ich mal, nicht dieses Phenomen auslösen - oder?

1) welche Version hast du, bei mir mit 7.2 funktioniert es in einem ähnlichen Dashboard
Ich habe aus dem Ubuntu Repo installiert: aktuell 7.1.1

2) hast du "Transform" irgendwas eingestellt?
Nee, da ist nix eingestellt.

3) was hast du bei den Query Optionen eingestellt?
Ich würde sagen, bis auf das Intervall sind es alles die Defaults:
Max data points: 2635
Min interval: 1m
Interval: 10m
Relative time: 1h
Time shift: 1h

- kannst du ggf. das Panel mal in ein eigenes Dashboard kopieren
Ich habe bisher nur das eine Panel.

- und den Sourcecode als json hier einstellen?

{
  "aliasColors": {
    "niederschlag": "blue",
    "temp_max": "dark-orange",
    "temp_min": "super-light-orange"
  },
  "dashLength": 10,
  "datasource": "MySQL",
  "fieldConfig": {
    "defaults": {
      "custom": {},
      "mappings": [],
      "thresholds": {
        "mode": "absolute",
        "steps": [
          {
            "color": "green",
            "value": null
          },
          {
            "color": "red",
            "value": 80
          }
        ]
      }
    },
    "overrides": []
  },
  "fill": 1,
  "gridPos": {
    "h": 17,
    "w": 17,
    "x": 0,
    "y": 0
  },
  "id": 2,
  "legend": {
    "alignAsTable": false,
    "avg": false,
    "current": false,
    "max": false,
    "min": false,
    "rightSide": false,
    "show": true,
    "total": false,
    "values": false
  },
  "lines": true,
  "linewidth": 1,
  "nullPointMode": "null",
  "pluginVersion": "7.1.1",
  "pointradius": 2,
  "renderer": "flot",
  "seriesOverrides": [
    {
      "$$hashKey": "object:1190",
      "alias": "niederschlag",
      "bars": true,
      "lines": false,
      "transform": "negative-Y",
      "yaxis": 2
    },
    {
      "$$hashKey": "object:475",
      "alias": "temp_max",
      "bars": false,
      "lines": true
    },
    {
      "$$hashKey": "object:486",
      "alias": "temp_min",
      "bars": false,
      "lines": true
    },
    {
      "$$hashKey": "object:522",
      "alias": "sonnenstunden",
      "bars": true,
      "lines": false
    }
  ],
  "spaceLength": 10,
  "targets": [
    {
      "format": "time_series",
      "group": [],
      "hide": false,
      "metricColumn": "none",
      "rawQuery": true,
      "rawSql": "SELECT datum as time, niederschlag FROM WetterCom16 ORDER BY id DESC LIMIT 16;\n",
      "refId": "A",
      "select": [
        [
          {
            "params": [
              "value"
            ],
            "type": "column"
          }
        ]
      ],
      "timeColumn": "time",
      "where": [
        {
          "name": "$__timeFilter",
          "params": [],
          "type": "macro"
        }
      ]
    },
    {
      "format": "time_series",
      "group": [],
      "metricColumn": "none",
      "rawQuery": true,
      "rawSql": "SELECT datum as time, temp_max FROM WetterCom16 ORDER BY id DESC LIMIT 16;\n",
      "refId": "B",
      "select": [
        [
          {
            "params": [
              "value"
            ],
            "type": "column"
          }
        ]
      ],
      "timeColumn": "time",
      "where": [
        {
          "name": "$__timeFilter",
          "params": [],
          "type": "macro"
        }
      ]
    },
    {
      "format": "time_series",
      "group": [],
      "metricColumn": "none",
      "rawQuery": true,
      "rawSql": "SELECT datum as time, temp_min FROM WetterCom16 ORDER BY id DESC LIMIT 16;\n",
      "refId": "C",
      "select": [
        [
          {
            "params": [
              "value"
            ],
            "type": "column"
          }
        ]
      ],
      "timeColumn": "time",
      "where": [
        {
          "name": "$__timeFilter",
          "params": [],
          "type": "macro"
        }
      ]
    },
    {
      "format": "time_series",
      "group": [],
      "metricColumn": "none",
      "rawQuery": true,
      "rawSql": "SELECT datum as time, sonnenstunden FROM WetterCom16 ORDER BY id DESC LIMIT 16;\n",
      "refId": "D",
      "select": [
        [
          {
            "params": [
              "value"
            ],
            "type": "column"
          }
        ]
      ],
      "timeColumn": "time",
      "where": [
        {
          "name": "$__timeFilter",
          "params": [],
          "type": "macro"
        }
      ]
    }
  ],
  "thresholds": [],
  "timeRegions": [
    {
      "$$hashKey": "object:897",
      "colorMode": "background6",
      "fill": true,
      "fillColor": "rgba(234, 112, 112, 0.12)",
      "line": false,
      "lineColor": "rgba(237, 46, 24, 0.60)",
      "op": "time"
    }
  ],
  "title": "Wetter 16 Tage Vorschau",
  "tooltip": {
    "shared": true,
    "sort": 1,
    "value_type": "individual"
  },
  "type": "graph",
  "xaxis": {
    "buckets": null,
    "mode": "time",
    "name": null,
    "show": true,
    "values": []
  },
  "yaxes": [
    {
      "$$hashKey": "object:503",
      "format": "short",
      "label": "°C",
      "logBase": 1,
      "max": null,
      "min": null,
      "show": true
    },
    {
      "$$hashKey": "object:504",
      "decimals": null,
      "format": "short",
      "label": "l/m²",
      "logBase": 1,
      "max": null,
      "min": null,
      "show": true
    }
  ],
  "yaxis": {
    "align": false,
    "alignLevel": null
  },
  "bars": false,
  "dashes": false,
  "description": "",
  "fillGradient": 0,
  "hiddenSeries": false,
  "percentage": false,
  "points": false,
  "stack": false,
  "steppedLine": false,
  "timeFrom": null,
  "timeShift": null
}


- Nutzt du Grafana in Docker?
Nein, ist direkt in einer Ubuntu 20.04 VM installiert.

Vielen Dank schon mal...

Guido

P.S.: Es ergab sich bei mir noch eine weitere Frage:
Kann ich Grafana dazu veranlassen die X Achse des Graphen jeden Tag automatisch zu aktualisieren?
Ich habe gewählt: "now - 1d" bis "now + 16d" Grafana rechnet das aber nicht vom jeweils aktuellen Tag, sondern immer vom Datum des Tages an dem ich den Zeitraum ausgewählt habe.
Ich muß also den Zeitraum jeden Tag wieder neu auswählen.

Vielen Dank nochmal!

andies

Ich habe eine Frage, die eigentlich nicht mehr FHEM betrifft (im Zweifel lagere ich das bei Offtopic aus, nur wollte ich mal schauen, ob jemand helfen kann). Wer grafana auf dem RPi installiert hat, kann dort nicht mehr ohne Weiteres rendern; es gibt da richtige Probleme und mal geht es, mal nicht (Details zum Beispiel hier: https://community.grafana.com/t/grafana-rendering-for-raspbian-jessie-on-raspberry-pi-3-b-in-end-of-year-2019-still-possible/23134). Also habe ich das hier installiert, um das rendern auf dem RPi durchzuführen:
https://developer.mozilla.org/de/docs/Mozilla/Firefox/Headless-Mode

Damit kann man headless Screenshots machen. Nur klappt das nicht, weil anscheinend grafana länger lädt als der Browser den Screenshot abliefert. Hat jemand eine Idee, wie man das hinbekommt? 
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.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

kadettilac89

Zitat von: GU!DO am 16 August 2020, 15:33:44


P.S.: Es ergab sich bei mir noch eine weitere Frage:
Kann ich Grafana dazu veranlassen die X Achse des Graphen jeden Tag automatisch zu aktualisieren?
Ich habe gewählt: "now - 1d" bis "now + 16d" Grafana rechnet das aber nicht vom jeweils aktuellen Tag, sondern immer vom Datum des Tages an dem ich den Zeitraum ausgewählt habe.
Ich muß also den Zeitraum jeden Tag wieder neu auswählen.

Vielen Dank nochmal!

Ich habe mal deine Json importiert, in 7.2 ging es nicht wegen neuen Featues, habe mir einen Docker mit 7.1.1 gemacht ... aber nichts auffälliges gesehen.

Was du testen kannst, kopiere das Panel mal in ein neues damit du dir nichts überschreibst, und teste ob es funktioniert wenn du nur eine Datenreihe hast. Ich nutze für Grafana InfluxDB, habe also keine MySQL konfiguriert, sonst hätte ich selber mal nen kleinen Test gemacht.

Zu deiner anderen Frage ... was genau meinst du? Du lässt den Monitor offen, z. B. 23 Uhr und erwartest dass um 01:00 durch den automatischen Refresh der Tag um eins verschoben wird? Oder was genau ist die Frage bzw. Anforderung. Mit den dynamischen now -1d / + 16d wird das beim Aufrufen automatisch gemacht ... hier die Frage, was erhoffst du dir mit +16d, hast du Werte aus der (vermeintlichen) Zukunft in der Datenbank?

kadettilac89

Zitat von: andies am 19 August 2020, 11:44:59
Ich habe eine Frage, die eigentlich nicht mehr FHEM betrifft (im Zweifel lagere ich das bei Offtopic aus, nur wollte ich mal schauen, ob jemand helfen kann). Wer grafana auf dem RPi installiert hat, kann dort nicht mehr ohne Weiteres rendern; es gibt da richtige Probleme und mal geht es, mal nicht (Details zum Beispiel hier: https://community.grafana.com/t/grafana-rendering-for-raspbian-jessie-on-raspberry-pi-3-b-in-end-of-year-2019-still-possible/23134). Also habe ich das hier installiert, um das rendern auf dem RPi durchzuführen:
https://developer.mozilla.org/de/docs/Mozilla/Firefox/Headless-Mode

Damit kann man headless Screenshots machen. Nur klappt das nicht, weil anscheinend grafana länger lädt als der Browser den Screenshot abliefert. Hat jemand eine Idee, wie man das hinbekommt?

Ich kann dir jetzt nicht direkt helfen, aber ist es das neuere Grafana Plugin zum Rendern, oder hast du was anderes vor? Das Plugin kam im Herbst 2019, von daher sind die Links evtl. outdated. Ob es das Render-Plugin für Raspberry gibt weiß ich nicht. Wollte es auf Docker mal testen, da hab ich es aber nicht zum Laufen gekriegt. Ohne Docker ist es nur als Plugin zu installieren.

https://grafana.com/grafana/plugins/grafana-image-renderer/installation

andies

Zitat von: kadettilac89 am 20 August 2020, 11:04:20
Ohne Docker ist es nur als Plugin zu installieren.
Und genau das Plugin funktioniert nicht bei mir bzw lässt sich nicht mal richtig installieren. Es gibt dazu mehrere Infos in diversen Foren, ohne das eine Lösung ersichtlich scheint. Die meisten haben aufgegeben und sagen, das wäre ein ARM-Problem.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.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

GU!DO

Zitat von: kadettilac89 am 20 August 2020, 10:59:02
Ich habe mal deine Json importiert, in 7.2 ging es nicht wegen neuen Featues, habe mir einen Docker mit 7.1.1 gemacht ... aber nichts auffälliges gesehen.
Sorry, ich wollte Dir nicht soviel Arbeit aufhalsen... viiielen Dank!

Zitat von: kadettilac89 am 20 August 2020, 10:59:02
Was du testen kannst, kopiere das Panel mal in ein neues damit du dir nichts überschreibst, und teste ob es funktioniert wenn du nur eine Datenreihe hast. Ich nutze für Grafana InfluxDB, habe also keine MySQL konfiguriert, sonst hätte ich selber mal nen kleinen Test gemacht.
Ich habe zum einen ein neues Panel angelegt und als zweites ein neues Dashboard mit Panel und jeweils die Abfrage der max. Temp. eingebunden.
Ergebnis: Gleicher Effekt. Linke Hälfte 18°, rechte Hälfte 21°.
Ich teste das nochmal wenn ich bei "time" eine Uhrzeit anhänge. Denke, dass ich das am Wochenende schaffe.

Zitat von: kadettilac89 am 20 August 2020, 10:59:02
Du lässt den Monitor offen, z. B. 23 Uhr und erwartest dass um 01:00 durch den automatischen Refresh der Tag um eins verschoben wird?
Ja genau.

Zitat von: kadettilac89 am 20 August 2020, 10:59:02
Mit den dynamischen now -1d / + 16d wird das beim Aufrufen automatisch gemacht
Klappt bei mir nicht. Muß da noch was konifguriert werden?
Ich mußte +1d ja bei absoluten Zeitwerten eingeben der Wert im Feld wurde dann direkt in das jeweilige Datum gewandelt.
Die realtiven Zeiten erlauben ja nur einen Rückblick in festen Zeiträumen und die scheinen auch hardcoded zu sein.

Zitat von: kadettilac89 am 20 August 2020, 10:59:02
hier die Frage, was erhoffst du dir mit +16d, hast du Werte aus der (vermeintlichen) Zukunft in der Datenbank?
Ja genau. Es ist eine Wetterprognose, also die Werte für die nächsten 16 Tage also der vermeintlichen Zukunft.

GU!DO

So, ich habe das Problem gefunden:
Meine SQL Syntax lautete wie folgt:

SELECT datum as time, niederschlag FROM WetterCom16 ORDER BY id DESC LIMIT 16;


Da ich die Werte fortlaufend in die Tabelle schreibe, aber für diese Ansicht nur die letzten 16 benötige, werden die Zeilen der Tabelle mit DESC umgekehrt und dann nur die ersten 16 für die Auswertung genommen.

Mit der zeitlichen Umkehrung der Werte hatte Grafana jedoch Probleme. Die Tabelle wurde korrekt aufgebaut, jedoch die Werte im tooltip nicht korrekt angezeigt.

Zur Abhilfe habe ich die Werte nun in in der SQL Abfrage wieder in die richtige zeitliche Reihenfolge gebracht:

SELECT datum as time, niederschlag FROM (SELECT * FROM WetterCom16 ORDER BY id DESC LIMIT 16) sub ORDER BY id ASC;


Vielen Dank nochmals an "kadettilac89" für die Hilfe!!!

andies

FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.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