NEWS
Grafana / MariaDB: Aus 2 Queries 1 machen?
-
Ich nutze den SQL-Adapter, um aus dem ioBroker Messwerte in eine MySQL/MariaDB zu schreiben. Zwei dieser Messwerte möchte ich nun gerne in Grafana in einem Scatter-/XY-Chart visualisieren.
Mein Problem: Der SQL-Adapter schreibt die Werte mit verschiedenen IDs (je Objekt) in die selbe Tabelle ts_number. Als z.B. den Messwert Außentemperatur mit der ID 14
id ts val 14 2022-11-13 23:59:59 4.42 14 2022-11-14 23:59:59 5.88 14 2022-11-15 23:59:59 6.30und den Messwert Heizenergie mit der ID 25
id ts val 25 2022-11-13 23:59:00 23 25 2022-11-14 23:59:00 24 25 2022-11-15 23:59:00 16Wenn ich in Grafana mehrere Messwerte in einem Zeitreihen-Chart anzeigen wollte, habe ich mir bisher einfach damit beholfen, dass ich zwei Queries gemacht habe.Für die Außentemperatur z.B.
SELECT ts AS "time", val AS "Außentemperatur" FROM ts_number WHERE id = 14 ORDER BY tsund analog noch mal einen für die Heizenergie mit id = 25.
Das geht beim XY-Chart aber leider nicht, dieser Panel-Typ benötigt wohl beide Werte aus einem Query bzw. im Ergebnis in einer Datentabelle, die so aussieht:
ts Temp Energie 2022-11-13 4.42 23 2022-11-14 5.88 24 2022-11-15 6.30 16Der Query müsste also beide IDs zusammenbringen und gleichzeitig den Zeitversatz der beiden Objekte von jeweils 59 Sekunden (durch eine Gruppierung?) ausbügeln.
Leider stehe ich auf dem Schlauch: Wie müsste der entsprechende Query aussehen?
-
Ich nutze den SQL-Adapter, um aus dem ioBroker Messwerte in eine MySQL/MariaDB zu schreiben. Zwei dieser Messwerte möchte ich nun gerne in Grafana in einem Scatter-/XY-Chart visualisieren.
Mein Problem: Der SQL-Adapter schreibt die Werte mit verschiedenen IDs (je Objekt) in die selbe Tabelle ts_number. Als z.B. den Messwert Außentemperatur mit der ID 14
id ts val 14 2022-11-13 23:59:59 4.42 14 2022-11-14 23:59:59 5.88 14 2022-11-15 23:59:59 6.30und den Messwert Heizenergie mit der ID 25
id ts val 25 2022-11-13 23:59:00 23 25 2022-11-14 23:59:00 24 25 2022-11-15 23:59:00 16Wenn ich in Grafana mehrere Messwerte in einem Zeitreihen-Chart anzeigen wollte, habe ich mir bisher einfach damit beholfen, dass ich zwei Queries gemacht habe.Für die Außentemperatur z.B.
SELECT ts AS "time", val AS "Außentemperatur" FROM ts_number WHERE id = 14 ORDER BY tsund analog noch mal einen für die Heizenergie mit id = 25.
Das geht beim XY-Chart aber leider nicht, dieser Panel-Typ benötigt wohl beide Werte aus einem Query bzw. im Ergebnis in einer Datentabelle, die so aussieht:
ts Temp Energie 2022-11-13 4.42 23 2022-11-14 5.88 24 2022-11-15 6.30 16Der Query müsste also beide IDs zusammenbringen und gleichzeitig den Zeitversatz der beiden Objekte von jeweils 59 Sekunden (durch eine Gruppierung?) ausbügeln.
Leider stehe ich auf dem Schlauch: Wie müsste der entsprechende Query aussehen?
Soll das tatsächlich nur tagesgenau sein?
Werden die Werte nur 1x/Tag geschrieben? Oder muss da noch Summe/Durchschnitt oder so berechnet werden? -
Soll das tatsächlich nur tagesgenau sein?
Werden die Werte nur 1x/Tag geschrieben? Oder muss da noch Summe/Durchschnitt oder so berechnet werden?@codierknecht ja, das soll tatsächlich nur tagesgenau sein – die Werte werden nur einmal täglich zu den genannten Uhrzeiten von verschiedenen Adaptern/Scripts erzeugt.
-
@codierknecht ja, das soll tatsächlich nur tagesgenau sein – die Werte werden nur einmal täglich zu den genannten Uhrzeiten von verschiedenen Adaptern/Scripts erzeugt.
SELECT A.ts, A.val AS WERT1, B.val AS WERT2 FROM ts_number A INNER JOIN ts_number B ON date_format(from_unixtime(B.ts/1000), '%Y-%m-%d') = date_format(from_unixtime(A.ts/1000), '%Y-%m-%d') AND B.id = 25 WHERE A.id = 14 -
SELECT A.ts, A.val AS WERT1, B.val AS WERT2 FROM ts_number A INNER JOIN ts_number B ON date_format(from_unixtime(B.ts/1000), '%Y-%m-%d') = date_format(from_unixtime(A.ts/1000), '%Y-%m-%d') AND B.id = 25 WHERE A.id = 14@codierknecht Vielen Dank!
Wenn ich es direkt so übernehme, spuckt Grafana direkt folgende Meldung unter dem Query Editor aus:
db has no time column: no time column foundStreiche ich das "/1000" aus dem Join, zeigt er mir im Table View immerhin die Spalten richtig an, nur leider noch ohne Daten

Woran könnte das liegen? -
@codierknecht Vielen Dank!
Wenn ich es direkt so übernehme, spuckt Grafana direkt folgende Meldung unter dem Query Editor aus:
db has no time column: no time column foundStreiche ich das "/1000" aus dem Join, zeigt er mir im Table View immerhin die Spalten richtig an, nur leider noch ohne Daten

Woran könnte das liegen?@bfit
Das "/1000" darfst Du an der Stelle nicht entfernen.
Das "ts" ist ein timestamp - dummerweise mit Millisekunden. Damit kommt MySQL nicht klar um ein Datum auszurechnen.
Das wird aber gebraucht um die beiden Tabelleneinträge in Beziehung zu setzen.Ich schau mal in Grafana ...
-
@bfit
Das "/1000" darfst Du an der Stelle nicht entfernen.
Das "ts" ist ein timestamp - dummerweise mit Millisekunden. Damit kommt MySQL nicht klar um ein Datum auszurechnen.
Das wird aber gebraucht um die beiden Tabelleneinträge in Beziehung zu setzen.Ich schau mal in Grafana ...
SELECT A.ts AS "time", A.val AS WERT1, B.val AS WERT2Liefert bei mir zumindest mal Daten.

-
SELECT A.ts AS "time", A.val AS WERT1, B.val AS WERT2Liefert bei mir zumindest mal Daten.

-
Ich nutze den SQL-Adapter, um aus dem ioBroker Messwerte in eine MySQL/MariaDB zu schreiben. Zwei dieser Messwerte möchte ich nun gerne in Grafana in einem Scatter-/XY-Chart visualisieren.
Mein Problem: Der SQL-Adapter schreibt die Werte mit verschiedenen IDs (je Objekt) in die selbe Tabelle ts_number. Als z.B. den Messwert Außentemperatur mit der ID 14
id ts val 14 2022-11-13 23:59:59 4.42 14 2022-11-14 23:59:59 5.88 14 2022-11-15 23:59:59 6.30und den Messwert Heizenergie mit der ID 25
id ts val 25 2022-11-13 23:59:00 23 25 2022-11-14 23:59:00 24 25 2022-11-15 23:59:00 16Wenn ich in Grafana mehrere Messwerte in einem Zeitreihen-Chart anzeigen wollte, habe ich mir bisher einfach damit beholfen, dass ich zwei Queries gemacht habe.Für die Außentemperatur z.B.
SELECT ts AS "time", val AS "Außentemperatur" FROM ts_number WHERE id = 14 ORDER BY tsund analog noch mal einen für die Heizenergie mit id = 25.
Das geht beim XY-Chart aber leider nicht, dieser Panel-Typ benötigt wohl beide Werte aus einem Query bzw. im Ergebnis in einer Datentabelle, die so aussieht:
ts Temp Energie 2022-11-13 4.42 23 2022-11-14 5.88 24 2022-11-15 6.30 16Der Query müsste also beide IDs zusammenbringen und gleichzeitig den Zeitversatz der beiden Objekte von jeweils 59 Sekunden (durch eine Gruppierung?) ausbügeln.
Leider stehe ich auf dem Schlauch: Wie müsste der entsprechende Query aussehen?
-
@bfit sagte in Grafana / MariaDB: Aus 2 Queries 1 machen?:
SELECT ts AS "time", val AS "Außentemperatur" FROM ts_number WHERE id = 14 OR id = 25 ORDER BY tsund wenn man in die Abfrage den ID des anderen Datenpunkts mit einschließt?
@oliverio
Dann hast Du jeweils 2 Zeilen, weil die Timestamps unterschiedlich sind.