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

Offline JoeALLb

  • Hero Member
  • *****
  • Beiträge: 1473
Ginge aber auch mit

SELECT DATE_FORMAT(timestamp, "%H:00:00"); Wäre für komplexere Sachen minimal effektiver, da Indexe noch benutzt werden könne. Natürlich müsste man das Datum zur Zeit auch noch ergänzen.

SG Joe

FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Online kadettilac89

  • Sr. Member
  • ****
  • Beiträge: 813
hat jemand ein paar Screenshots wie Grafana in FHEMWEB aussieht? Ist es möglich die Plot per iFrame einzubinden und die Zoom-Buttons zu behalten? Ggf. mit der Definition?

Danke!

Offline andies

  • Hero Member
  • *****
  • Beiträge: 1629
Ich mache das so wie im Anhang, durch
Internals:
   DEF        iframe http://192.168.2.7:3000/dashboard/db/temperaturen
   LINK       http://192.168.2.7:3000/dashboard/db/temperaturen
   NAME       TempView
   NR         99
   STATE      initialized
   TYPE       weblink
   WLTYPE     iframe
Attributes:
   htmlattr   width="100%" height="400" frameborder="0" marginheight="0" marginwidth="0"
   room       Grafiken
   sortby     5
FHEM 5.9 auf RaspPi3 (Raspbian:  4.14.34-v7+ ); Perl: v5.20.2
SIGNALduino (433 MHz) und HM-UART (868 MHz)
wenige Brennenstuhl-IT, Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Online kadettilac89

  • Sr. Member
  • ****
  • Beiträge: 813
Ich mache das so wie im Anhang, durch


danke dir!

Vielleicht weißt du das ... wenn ich mir Post https://forum.fhem.de/index.php/topic,77724.msg696839.html#msg696839   ansehe ist das nur ein Plot ohne die Grafana-Spalte links. Ist das "nackte" Plot ein PNG? Geht ja in Grafana auch.

Habe Grafana auf einem Testsystem laufen. Muss ich mich näher befassen.

Offline andies

  • Hero Member
  • *****
  • Beiträge: 1629
Nein, das sind keine png's. Ich hatte mal das Problem, das ich png brauchte, um sie mit Telegram zu verschicken (an mich, als Kontrolle). Das ist nicht so simpel.

Ich habe in dem raspberry, auf dem grafana läuft, eine batch-Datei geschrieben, die ich zweimal pro Tag aufrufe und die aus grafana png holt. Die sieht so aus:
#!/bin/bash
curl  -H   "Authorization: Bearer XXXXXXXXXX=" "http://localhost:3000/render/dashboard-solo/db/temperaturen?orgId=1&panelId=1&from=now-1d&to=now&width=1000&height=500&tz=UTC%2B01%3A00" > /home/pi/GrafanaTemperaturen.png
curl  -H   "Authorization: Bearer XXXXXXXXXX=" "http://localhost:3000/render/dashboard-solo/db/temperaturen?orgId=1&panelId=2&from=now-1d&to=now&width=1000&height=500&tz=UTC%2B01%3A00" > /home/pi/GrafanaTemperaturen1.png
curl -s -H "Authorization: Bearer XXXXXXXXXX=" "http://localhost:3000/render/dashboard-solo/db/energie?orgId=1&panelId=1&from=now-1d&to=now&width=1000&height=500&tz=UTC%2B01%3A00" > /home/pi/GrafanaEnergie.png
curl -s -H "Authorization: Bearer XXXXXXXXXX=" "http://localhost:3000/render/dashboard-solo/db/wasser-und-entkalkung?orgId=1&panelId=1&from=now-1d&to=now&width=1000&height=500&tz=UTC%2B01%3A00" > /home/pi/GrafanaWasser.png
curl -s -H "Authorization: Bearer XXXXXXXXXX=" "http://localhost:3000/render/dashboard-solo/db/raspberry?orgId=1&panelId=1&from=now-1d&to=now&width=1000&height=500&tz=UTC%2B01%3A00" > /home/pi/GrafanaRaspberry.png
## notwendig fuer FHEM, grafiken werden gerendert und dann in fhem abgelegt
## Datei wird ueber crontab aufgerufen, derzeit zweimal taeglich (21 Uhr und 6 Uhr)
 
Die Sachen, die ich mit XXXXXXXXXX gekennzeichnet habe, sind Codes aus grafana zum autorisieren. Sie erhältst Du, wenn Du in grafana unter Configuration->API keys Angaben eingibst, dann wird Dir der Code angezeigt. Mehr hier
http://docs.grafana.org/reference/sharing/
FHEM 5.9 auf RaspPi3 (Raspbian:  4.14.34-v7+ ); Perl: v5.20.2
SIGNALduino (433 MHz) und HM-UART (868 MHz)
wenige Brennenstuhl-IT, Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Offline fischit

  • Jr. Member
  • **
  • Beiträge: 87
Sind das denn keine brauchbaren PNGs die ich beim Sharing unter dem Punkt "Direct link rendered image" erzeuge?
Wenn ich die Bilder wegspeichere sind das PNGs.

Offline andies

  • Hero Member
  • *****
  • Beiträge: 1629
Kann ich nicht sagen - ich wollte ja automatisiert speichern, das habe ich nur so geschafft. Vielleicht geht es anders?


Gesendet von iPhone mit Tapatalk Pro
FHEM 5.9 auf RaspPi3 (Raspbian:  4.14.34-v7+ ); Perl: v5.20.2
SIGNALduino (433 MHz) und HM-UART (868 MHz)
wenige Brennenstuhl-IT, Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Online peterk_de

  • Sr. Member
  • ****
  • Beiträge: 709
Gibt es eigentlich schon eine Sammlung, was man alles tolles mit FHEM + Grafana bauen kann, insb. wo die normalen Plots absolut nicht mehr mitmachen?

Ich werfe mal einen Vergleich "Sommer 2018 vs. 2017" in den Raum. Nachbauen kann man das mit dem Carpetplot (standardmäßig bei Grafana dabei):

SELECT
  UNIX_TIMESTAMP(TIMESTAMP) as time_sec,
  VALUE+0 as value,
  "Außentemperatur" as metric
FROM history
WHERE READING="temperature" AND DEVICE="aussenthermometer" AND $__timeFilter(TIMESTAMP)
ORDER BY time_sec

Dazu noch Min und Max im Reiter "Display" feststellen (hier 10 und 30°C) und im Reiter "Time Range" ggf. einen Override (hier: now-90d) einbauen.

Dann das Ding einmal "duplizieren" und im Reiter "Time Range" noch "Add Time Shift" auf "365d" stellen für den Vorjahresvergleich setzen. Voila!

2x Intel NUC5i5 Proxmox Cluster (Ubuntu 18.04)
FHEM2FHEM-Roomnodes: 6x Raspi, 1x NUC5i5
Frontends: 4x TabletUI, Siri, Grafana, StreamDeck
IOdevs: 3xHM, CUL868, HarmonyHub, HueBridge
Devices: 86xHomematic, >30xLAN/WiFi, 18xHUE, 15xTechem, 15xBTLE, 5xIPCAM, 4xSONOS, 2xHomeConnect, DENON, Geofency, ..
Gefällt mir Gefällt mir x 1 Informativ Informativ x 1 Liste anzeigen

Offline RoBra81

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

Gibt es eigentlich schon eine Sammlung, was man alles tolles mit FHEM + Grafana bauen kann

nein, im Wiki ist nur ein Link auf diesen Thread.

Ich werfe mal einen Vergleich "Sommer 2018 vs. 2017" in den Raum.

Das nehme ich doch mal zum Anlass, meinen Plot zum Bewegungsmelder vorzustellen: Ich logge den Status meiner Bewegungsmelder und habe mir eine Auswertung über die Tageszeit gebastelt: Als plot kommt die Heatmap zum Einsatz (sollte bei Grafana dabei sein).

SQL:

SELECT
  SELECT UNIX_TIMESTAMP(date(TIMESTAMP)) as time_sec,
    count(VALUE) as value,
    CONCAT((hour(TIMESTAMP)*60*60)+floor(minute(TIMESTAMP)/15)*15*60) as metric
  FROM history
  WHERE (READING="motion" or READING="state") and device="OG.ez.BM.Whg_Tuer" AND $__timeFilter(TIMESTAMP) and VALUE not like '%off%'
  group by floor(minute(TIMESTAMP)/15), hour(TIMESTAMP), day(TIMESTAMP), month(TIMESTAMP), year(TIMESTAMP)

(READING="motion" or READING="state" kommt daher, dass sich das Reading mal geändert hat)

Bei Axis folgende Einstellungen:
  Data format -> Format -> Time series buckets
  Y-Axis -> Unit -> duration (hh:mm:ss)

Bei Display folgende Einstellungen:
  Colors -> Mode -> Spectrum
  Colors -> Scheme -> YlOrRd
  Color scale -> Min -> 0
  Color scale -> Max -> 30 (entspricht maximal 30 Auslösungen pro viertel Stunde - auto wäre auch möglich)
  Legend -> Show legend -> ja
  Buckets -> Space -> 0

Im Ergebnis sieht man dann, zu welcher Tageszeit der Raum benutzt wurde. Im Anhang sieht man einen Plot eines Bewegungsmelders im allgemein zugänglichen Hausflur - spannender sind hier aber die Plots der Bewegungsmelder in der Wohnung, da man hier auch die Wochentage sehr gut erkennen kann, aber die will ich hier nicht zeigen, da ja nicht jeder wissen muss, wann bei uns niemand zu Hause ist ;-)

Ronny

Gefällt mir Gefällt mir x 2 Informativ Informativ x 1 Liste anzeigen

Online peterk_de

  • Sr. Member
  • ****
  • Beiträge: 709
Hey super :-) Die Heatmap habe ich noch gar nicht ausprobiert, aber das ist ein schöner Use Case dafür!

Dann zeige ich gleich einmal noch meine "Anwesenheitsauswertung", die ich vor allem für die Optimierung der Heizzeiten einsetze:

Für jeden Raum habe ich in FHEM einen Dummy (hier z.B. kueche.anwesenheit), in dem ich verschiedene Sensoren über ein DOIF zu einem "Rating" kombiniere, ob dort jemand ist:

defmod di_kueche.anwesenheit DOIF (0) (set kueche.anwesenheit Ja) (set kueche.anwesenheit Unbekannt) (set kueche.anwesenheit Unwahrscheinlich) (set kueche.anwesenheit Nein)\
\
DOELSEIF  ( ( [kueche.wandtaster.praesenz:"motion.*on"] \
              or [kueche.fenster:"^(offen|geschlossen)$"]\
              or [kueche.fenster2:"^(offen|geschlossen)$"]              \
            ) and [?kueche.tuer] eq "geschlossen"\
          ) \
          (set kueche.anwesenheit Ja) \
\
DOELSEIF ([kueche.wandtaster.praesenz:"motion.*on"] \
          or [kueche.tuer:"offen"] \
          or [kueche.tuer:"geschlossen"]\
          or [kueche.fenster:"^(offen|geschlossen)$"]\
          or [kueche.fenster2:"^(offen|geschlossen)$"]  \
          ) \
         (set $SELF cmd_1)

attr di_kueche.anwesenheit do resetwait
attr di_kueche.anwesenheit wait 0,60,300,900:0:0

Das DOIF wäre ein Thema für sich und verwendet einige Kniffe - jedenfalls bekomme ich so relativ "sauber" mit, ob dort gerade jemand ist (Ja) bzw. abgestuft nach der Dauer der Inaktivität eine Wahrscheinlichkeit (Unbekannt / Unwahrscheinlich / Nein) - auch unter Berücksichtigung der Tatsache, dass der Raum bei geschlossener Tür normalerweise nicht verlassen werden kann, selbst wenn der Bewegungsmelder nichts erkennt ;-)

In Grafana visualisiere ich das dann für jeden Raum über das "Discrete"-Plugin. Damit das sauber aussieht, habe ich den Hack für das Erweitern des Plots über den Anzeigezeitraum ("Plotabriss vermeiden") hinaus noch etwas verbessert. Die Metric für die Küche sieht z.B. so aus (bei allen anderen wird nur der Name der Metric und das device einmal geändert):

SELECT
  data.time_sec as time_sec,
  "Küche" as metric,
      case
        when data.rawValue = 'Ja' then 3
        when data.rawValue = 'Unbekannt' then 2
        when data.rawValue = 'Unwahrscheinlich' then 1
        when data.rawValue = 'Nein' then 0
        when data.rawValue is null then 0
    end as value
FROM
(
   SELECT @reading:="state", @device:="kueche.anwesenheit"
) AS var,
(
   (
   SELECT
      $__unixEpochFrom() as time_sec,
      VALUE as rawValue
   FROM history
   WHERE READING=@reading AND DEVICE=@device AND UNIX_TIMESTAMP(TIMESTAMP) <= $__unixEpochFrom()
   ORDER BY TIMESTAMP DESC
   LIMIT 1
   )
UNION
   (
   SELECT
      UNIX_TIMESTAMP(TIMESTAMP) as time_sec,
      VALUE as rawValue
   FROM history
   WHERE READING=@reading AND DEVICE=@device AND $__timeFilter(TIMESTAMP)
   )
UNION
   (
   SELECT
      $__unixEpochTo() as time_sec,
      VALUE as rawValue
   FROM history
   WHERE READING=@reading AND DEVICE=@device AND UNIX_TIMESTAMP(TIMESTAMP) <= $__unixEpochTo()
   ORDER BY TIMESTAMP DESC
   LIMIT 1
   )
) as data
ORDER BY time_sec ASC

Jetzt macht man in dem Tab "Mappings" noch folgendes ...

0 -> Nein
1 -> Unbekannt
2 -> Unwahrscheinlich
3 -> Ja

... und legt die Farben nach Wunsch fest. Fertig ist eine schicke "Raumbenutzungsansicht" :-) Im Screenshot sieht man sehr schön, dass an dem ersten der beiden dargestellten Tage (10-16 Uhr) im Schlafzimmer ein Bewegungsmelder "Amok" läuft. Ist also auch gut zum Debuggen :-)
« Letzte Änderung: 31 August 2018, 09:32:17 von peterk_de »
2x Intel NUC5i5 Proxmox Cluster (Ubuntu 18.04)
FHEM2FHEM-Roomnodes: 6x Raspi, 1x NUC5i5
Frontends: 4x TabletUI, Siri, Grafana, StreamDeck
IOdevs: 3xHM, CUL868, HarmonyHub, HueBridge
Devices: 86xHomematic, >30xLAN/WiFi, 18xHUE, 15xTechem, 15xBTLE, 5xIPCAM, 4xSONOS, 2xHomeConnect, DENON, Geofency, ..

Offline devil77

  • Full Member
  • ***
  • Beiträge: 343
Hallo,
versuche mich auch gerade mit grafana und komme nicht weiter.
Bei einigen Geräten lasse ich "state" loggen mit folgendem Inhalt
T: 18.9 desired: 5.0 valve: 0In Fhem habe ich per regex mit
T:\s([-\.\d]+).* den Wert für die Temperatur bekommen.
Jetzt wollte ich das gleiche bei grafana probieren und komme aber absolut nicht weiter wo und wie ich das ganze dort hinterlegen muss.
Hat jemand evtl. ein Beispiel wie ich das ganze bei gafana zum laufen bekommen?
Danke im Voraus und
Grüße Sten

Offline andies

  • Hero Member
  • *****
  • Beiträge: 1629
Mache mal ein list des log-devices


Gesendet von iPhone mit Tapatalk Pro
FHEM 5.9 auf RaspPi3 (Raspbian:  4.14.34-v7+ ); Perl: v5.20.2
SIGNALduino (433 MHz) und HM-UART (868 MHz)
wenige Brennenstuhl-IT, Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Offline devil77

  • Full Member
  • ***
  • Beiträge: 343
Welches meinst Du speziell? Das Gerät was die log Einträge (sprich Thermostat) erzeugt oder mein dblog Device?

Offline andies

  • Hero Member
  • *****
  • Beiträge: 1629
Ich nehme an, das ist ein Homematic? Ich mache das so:
defmod DbLog DbLog ./db.conf (DECT1:power.*|.*thermostat_Clima:measured-temp.*|.*rssi_at_WLAN_HmUART.*|Blitzwolf(1|2):.*)
und damit werden die Temperaturen erfasst. Valve kannst du dann hinzufügen. In Grafana wird das so angezeigt
SELECT
    UNIX_TIMESTAMP(TIMESTAMP) as time_sec,
    AVG(VALUE) as value,
    "Deine Beschreibung" as metric
  FROM history
  WHERE READING="measured-temp" AND DEVICE="Badezimmerthermostat_Clima" AND $__timeFilter(TIMESTAMP)
  GROUP BY UNIX_TIMESTAMP(TIMESTAMP) DIV 1200
wobei "Badezimmerthermostat_Clima" das device (genauer der channel) des HM ist. 1200 ist die Anzahl der Sekunden, über die gemittelt wird.
FHEM 5.9 auf RaspPi3 (Raspbian:  4.14.34-v7+ ); Perl: v5.20.2
SIGNALduino (433 MHz) und HM-UART (868 MHz)
wenige Brennenstuhl-IT, Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Offline devil77

  • Full Member
  • ***
  • Beiträge: 343
Richtig, ist Homemtaic ABER ich loge nicht jeden Wert einzeln bei meinen Stellventilen sondern nur state.
Was dann so aussieht.
state T: 21.2 desired: 19.5 valve: 0
Meine gplot files in FHEM sind im Datenteil wie folgt definiert
#myLogDB <SPEC1>:state:::$val=~s/T:\s([-\.\d]+).*/$1/eg
#myLogDB <SPEC1>:state:::$val=~s/.*valve:\s([-\.\d]+).*/$1/eg

Damit suche ich mir aus dem state den Teil für die Temperatur und den Teil für die Ventilstellung.
In dem Beispiel oben für state zeigt er dann im Plot folgende Werte für Temperatur und Ventilstellung
21.2
0

Und mein Problem ist das Grafana aus der dblog Datenbank für state ja das gleiche bekommt und ich
nicht weiß wie ich in Grafana mit regex oder ähnliches mir den nummerischen Wert "heraus ziehen" kann.
Ich hoffe ich konnte das Problem jetzt rüberbringen?