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

Phili

Sorry aber ich glaube du hast das setup nicht verstanden.

FHEM läuft lokal mit einer MariaDB (vorher sqllite).
Da ich grafana schon mit teslamate in einem docker laufen habe wollte ich nicht nochmal grafana lokal installieren.
Deswegen musste ich es ermöglichen, dass grafana aus dem docker auf meine lokale db zugreifen kann.

ch.eick

Zitat von: Phili am 07 November 2022, 09:17:15
Sorry aber ich glaube du hast das setup nicht verstanden.

FHEM läuft lokal mit einer MariaDB (vorher sqllite).
Da ich grafana schon mit teslamate in einem docker laufen habe wollte ich nicht nochmal grafana lokal installieren.
Deswegen musste ich es ermöglichen, dass grafana aus dem docker auf meine lokale db zugreifen kann.

Das Prinzip wäre aber den FHEM Container zu verwenden und alle anderen Dienste ebenfalls in separaten Containern zu verwenden.
Bisher habe ich alle Komponenten bereits in fertigen Containern gefunden. Für MySQL auf einem RPI 4 64Bit verwende ich sogar das original MySQL vom Oracle, was bereits in der Entwicklung um einiges weiter ist als die MariaDB. Alle anderen Container greifen über TCP/IP auf den MySql standard Port zu.

VG   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: Phili am 07 November 2022, 09:17:15
Sorry aber ich glaube du hast das setup nicht verstanden.

FHEM läuft lokal mit einer MariaDB (vorher sqllite).
Da ich grafana schon mit teslamate in einem docker laufen habe wollte ich nicht nochmal grafana lokal installieren.
Deswegen musste ich es ermöglichen, dass grafana aus dem docker auf meine lokale db zugreifen kann.
Mir ging es darum, hervorzuheben dass netzwerk "host" keine Empfehlung ist, sondern vorsichtig verwendet werden soll. Wenn deine Datenbank keine Verbindung zulässt hast du vermuthlich in einer Config das unterbunden (ggf. per default).

Es gibt sowohl Fhem  als auch MySql / MariaDb als Docker. Die Aussage "speziell" bezieht sich auf die Mischung von Anwendungen lokal vs. Rest in Containern.

ch.eick

Zitat von: kadettilac89 am 07 November 2022, 09:35:24
Mir ging es darum, hervorzuheben dass netzwerk "host" keine Empfehlung ist, sondern vorsichtig verwendet werden soll.
Leider muss ich FHEM auch mit Netzwerk Host betreiben, da ich einen SMA Energymanager habe, der leider ansonsten nicht kommunizieren kann.
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 07 November 2022, 09:42:51
Leider muss ich FHEM auch mit Netzwerk Host betreiben, da ich einen SMA Energymanager habe, der leider ansonsten nicht kommunizieren kann.
Du schreibst es ja "Leider". Wenn es einen Grund gibt dann kann man das natürlich machen. Mir ging es darum, dass es ein Sonderfall bleiben soll und nicht als eine Anleitung beschrieben wird. Um auf eine DB zuzugreifen braucht man kein network_mode host. Da ist entweder der User nur für localhost freigegeben oder eine andere Einstellung. Oder es wird "nur" der falsche Host angesprochen. Phili hat sowieso ein spezielles Setup, da spielt für ihn "host" keine Rolle.

Zitat von: Phili am 06 November 2022, 13:12:27
Zur Doku falls das Setup auch jemand mal braucht.
Die docker-compose.yml muss angepasst werden damit auf die lokale sql db zugegriffen werden kann. Über die Zeile network_mode: "host" in der service config des containers kann dann ganz normal in grafana über localhost:3306 auf die sqldb auf dem host zugegriffen werden.

Phili

Hi,

sorry ich wollte den Thread mit meiner Anfrage nicht so zu müllen  :-[.

Danke kadettilac89 für den Hinweis auf die mysql config! Ich hatte mir das nochmal angeschaut und tatsächlich lag es an der config des sql servers. Ich habe mich hier orientiert und die .cnf angepasst.
bind-adress stand vorher auf localhost


# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 192.168.0.100


Damit komme ich auch ohne "networkmode = host" in der container.yml auf die Datenbank. (Ich editiere mein Beitrag oben)

Vielleicht zur Erklärung warum mein setup so ist.
Der rpi läuft schon seit Jahren mit FHEM und sqllite (ohne docker). Ich hatte dann dieses Jahr angefangen meine Tesla Daten zu loggen. Ich wollte aber Teslamate und die Postgre DB nicht parallel auf den rpi installieren aus Angst irgendwas zu zerschießen oder die Performance eventuell leidet. Deshalb hatte ich teslamate, postgresql und grafana in einem docker auf dem rpi installiert, um es zur Not einfach wieder runterschmeißen zu können. Dann kam ich auf diesen Thread hier und wollte nun das grafana im "tesla docker" mit der FHEM db die lokal läuft verbinden.

Steffen@Home

Hallo Zusammen,

kann man mit dem Raspi 3 ( Bullseye ) die offizielle Download-Platform benutzen?
https://grafana.com/grafana/download?edition=oss&pg=get&platform=arm&plcmt=selfmanaged-box1-cta1

->Edition OSS oder Enterprise ?

Ubuntu and Debian(ARMv7) nehme ich an?
Zitat
sudo apt-get install -y adduser libfontconfig1
wget https://dl.grafana.com/oss/release/grafana_9.2.4_armhf.deb
sudo dpkg -i grafana_9.2.4_armhf.deb
Zitatsudo apt-get install -y adduser libfontconfig1
wget https://dl.grafana.com/enterprise/release/grafana-enterprise_9.2.4_armhf.deb
sudo dpkg -i grafana-enterprise_9.2.4_armhf.deb


Danke für die Info!
Pi 1 - FHEM, HM-MOD-RPI-PCB, HM-RT-CC-DN, HM-WDS10-TH-O, HM-Sec-SCo, HM-LC-Sw1PBU-FM, Relais Platine für ext. Ansteuerung, LD382 Wifi LED Controller, DHT
Pi 2 - Kamera, DHT
Pi 3 - FHEM2, Grafana, DHT, Magnet-Sensoren, Relais-Platine

kadettilac89

Zitat von: Steffen@Home am 13 November 2022, 14:15:53
->Edition OSS oder Enterprise ?

Ubuntu and Debian(ARMv7) nehme ich an?

Danke für die Info!
Enterprise

The Enterprise Edition is the default and recommended edition. It includes all the features of the OSS Edition, can be used for free and can be upgraded to the full Enterprise feature set, including support for Enterprise plugins.


Die deb müsste passen. Wenn es die falsche Version ist kannst du es wegen falscher CPU-Architektur sowieso nicht installieren.

kask

Hallo,
ich versuche mich auch gerade an grafana. Soweit funktioniert das auch.
Ich habe allerdings Probleme mit der Legende.
Wenn ich ' "blahblub" as metric'  in den sql string mache dann steht immer noch value in der legende.
Grafana sollte das  neuste sein habe ich erst vor einer Woche installiert.
Ist doof das alles immer mit den overrides zu lösen. Wäre schöner wenn es über den sql query gehen würde.

kadettilac89

Zitat von: kask am 18 Januar 2023, 18:56:50
Ist doof das alles immer mit den overrides zu lösen. Wäre schöner wenn es über den sql query gehen würde.
Grafana macht ja genau was du ihm sagst. Deine Spalte hast du ja "as value" in der Query benannt. Setze hier den Namen den du willst.

kask

ähm..."as value" ist der gesetzt weil grafana das so braucht um den Wert als Feldwert zu erkennen/ zu akzeptieren.
Oder verstehe ich da was falsch? Geb mal bitte ein Beispiel was du meinst bzw. wie es bei dir ist. bzw. wie du meinst das es gehen soll.

edit:
Zitat
Ein Beispieleintrag sieht wie folgt aus

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

Solltet Ihr numerische Werte in einer Grafik ausgeben wollen, müsst Ihr das Text-Feld VALUE mittels cast(VALUE as signed) konvertieren

SELECT
UNIX_TIMESTAMP(TIMESTAMP) as time_sec,
cast(VALUE as signed) as value,  "Kurvenbezeichnung" as metric
FROM history WHERE READING="state"  AND DEVICE="MyDummy" AND $__timeFilter( TIMESTAMP )


so ist es auch im fhemwiki beschrieben...klappt auch bis auf die legende.

mariadb liefert dann folgendes, wie auch zu erwarten(limitiert anstatt dem datum!):
Zitat
MariaDB [fhem]> SELECT  UNIX_TIMESTAMP(TIMESTAMP) as time_sec,  cast(VALUE as signed) as value,  "Temp_Flur_oben" as metric   FROM history WHERE DEVICE ="DS18X20" AND READING = "Temp_Flur_oben" limit 10;
+------------+-------+----------------+
| time_sec   | value | metric         |
+------------+-------+----------------+
| 1670782925 |    17 | Temp_Flur_oben |
| 1670783225 |    18 | Temp_Flur_oben |
| 1670783525 |    18 | Temp_Flur_oben |
| 1670786670 |    18 | Temp_Flur_oben |
| 1670786730 |    18 | Temp_Flur_oben |
| 1670786910 |    18 | Temp_Flur_oben |
| 1670786970 |    18 | Temp_Flur_oben |
| 1670787030 |    18 | Temp_Flur_oben |
| 1670787150 |    18 | Temp_Flur_oben |
| 1670787210 |    18 | Temp_Flur_oben |
+------------+-------+----------------+
10 rows in set, 10 warnings (0.006 sec)


Also denke ich mir jetzt das das Feld "metric" nicht als legende übernommen wird. bzw. vieleicht nicht mehr oder ich muss irgendwo was ändern.
den time_sec ist ein feld das grafana braucht, value auch..beides muss so heissen sonst wird das nix. aber über das metric finde ich nichts.

kadettilac89

Zitat von: kask am 19 Januar 2023, 19:57:52
ähm..."as value" ist der gesetzt weil grafana das so braucht um den Wert als Feldwert zu erkennen/ zu akzeptieren.
Oder verstehe ich da was falsch? Geb mal bitte ein Beispiel was du meinst bzw. wie es bei dir ist. bzw. wie du meinst das es gehen soll.
Ich nutze kein MySQL, alles Gefrickel. Habe meine Daten in InfluxDB. Darum kann ich dir kein Beispiel geben

Zitat von: kask am 19 Januar 2023, 19:57:52
mariadb liefert dann folgendes, wie auch zu erwarten(limitiert anstatt dem datum!):
Was mariadb ausgibt ist irrelevent. Was zeigt dir der Query inspector an. Dessen Daten, Ausgabe und vor allem "Error" hilft weiter.

Was du testen kannst:
1) alles in separate Zeile und Tabs, unnötige Leerzeichen raus, Query mochte es zumindest früher nicht wenn man mehrere Teile in einer Zeite hat. Du machst value und metric in eine Zeile obwohl Syntax hier eigene Zeilen vorsieht
2)   
VALUE as value, 
READING as metric     
.... damit du keinen String sondern eine DB-Spalte nutzt
3)   
VALUE as value, 
READING as metric_1
mit metric_1 zwingst du eine Liste an metric feldern wobei du dann nur die erste nutzt

kask

Habe ich alles probiert.
-Der inspector gibt das gleiche aus. Habe es hier nur zum posten über die mysql consolen ausgabe gemacht.
-Der Inspector gibt auch keinen warnings/errors aus.

-Mit 'Reading as metric' kommt wie zu erwarten das gleiche raus (Zelleninhalt von Zelle "Reading" als Spalte).

tabs, leerzeichen etc. kann ich ausschliessen da auch probiert.
Und die Anordnung habe ich auch geändert. Dem Query ist es latte ob man mehrere Anweisungen oder Bedingungen in einer Zeile sind. Kenne ich nicht anders,
Mit dem SQL was ich bis dato gemacht habe war es nie ein Problem. Vieleicht gab es mal eine engine die es nicht konnte, ist mir persönlich aber noch nie untergekommen.
Und SQL query's bastel ich schon ungelogene 20 Jahre zusammen. Ob postgres, mysql, mariadb, notes, access. Das war noch nie ein Problem in meinem dasein bei meinen Aufgaben.
Wie dem auch sei. Das habe ich aber auch schon angepasst und bekomme die legende einfach nicht angezeigt.

Was mich irritiert ist die tatsache das wenn ich
z.b.
'34 as metric_int1'
anstatt dem '"blah" as metric' einfüge, dann habe ich einen zweiten Eintrag in der legende mit "metric_int1". Dazu dann auch eine Gerade im Trend/Plot mit Wert 34.

Zitatmit metric_1 zwingst du eine Liste an metric feldern wobei du dann nur die erste nutzt
habe ich auch gemacht.
Ich kann auch "READING as blahblubs" machen.
Dann habe ich auch eine Zeile mit namen blahblubs und inhalt der readingszelle. Macht das gleiche.
Nur blahblubs kennt grafana nicht und metric und metric_1 auch nicht.

Bin ich der einzige mit dem Problem. Kann ich nicht glauben!

Edit:
habe ein Bild angefügt mit allen Anmerkungen abgeändert. (tabs und leerzeichen muß man mir jetzt aber glauben.)


kadettilac89

Ich verstehe das Problem immer noch nicht. Du hast eine Spalte der du im SQL-Statement den Namen "value" gibst. Dieser Name wird auch so im Plot angezeigt. Wie viele Datenreihen hast du? Eine? Warum erstetzt du dann "value" nicht mti "Temp_Flurplan_oben"? Dann wird der Name auch im Plot angezeigt. Oder willst du dynamisch mit einem Select alle möglichen Reihen einlesen und dann im Plot ausfiltern?

Wie gesagt nutze ich InfluxDB weil Grafana darauf aufgebaut, und damit harmoniert. Vielleicht verstehe ich deshalb dein Problem nicht.

Unabhängig von Problemen und Wiki. Grafana wurde um den VErsionssprung zu 9 massiv umgebaut, die ganzen Plots neu erstellt. In dem Zuge kann es auch zu Änderungen gekommen sein. Möglicherweise ist die Funktion die du suchst jetzt in Templates oder andere Notations gewandert. Aber auch hier ... nutze ich nicht, da alles was ich brauche harmonisch in Influx enthalten.

C0mmanda

Moin,

vielleicht wurde es bereits irgendwo gefragt, dann habe ich es leider übersehen:

Gibt es die Möglichkeit die Time-Range des Graphen so einzustellen dass ich z.B. immer "Heute von 6-23Uhr" angezeigt bekomme
statt nur die letzten x-Stunden?

Danke!
Gruß