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

JoeALLb

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

kadettilac89

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!

andies

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 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: andies am 25 August 2018, 20:04:00
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.

andies

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 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

fischit

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.

andies

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 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

peterk_de

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!

FHEM auf Ubuntu-VM / 2xNUC Proxmox Cluster
UI: HomeKit, TabletUI, Grafana
IOdevs: 2xHueBridge, RaspiMatic-CCU, CUL868, 2xHarmonyHub, 6xRaspi-Roomnode mit CO2, VOC und lepresenced
Devices: 107xHomematic(IP), 96xPhilips Hue, 17xTECHEM, 12xBTLE, 8xSONOS, 2xHomeConnect, 1xShelly 3em, 1xNanoleaf ...

RoBra81

Hallo,

Zitat von: peterk_de am 30 August 2018, 13:35:00
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.

Zitat von: peterk_de am 30 August 2018, 13:35:00
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


peterk_de

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 :-)
FHEM auf Ubuntu-VM / 2xNUC Proxmox Cluster
UI: HomeKit, TabletUI, Grafana
IOdevs: 2xHueBridge, RaspiMatic-CCU, CUL868, 2xHarmonyHub, 6xRaspi-Roomnode mit CO2, VOC und lepresenced
Devices: 107xHomematic(IP), 96xPhilips Hue, 17xTECHEM, 12xBTLE, 8xSONOS, 2xHomeConnect, 1xShelly 3em, 1xNanoleaf ...

devil77

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: 0
In 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

andies

Mache mal ein list des log-devices


Gesendet von iPhone mit Tapatalk Pro
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

devil77

Welches meinst Du speziell? Das Gerät was die log Einträge (sprich Thermostat) erzeugt oder mein dblog Device?

andies

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 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

devil77

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?