Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Praktische Anwendungen (Showcase)
  4. Grafana-Abfragen von iobroker MySQL

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.5k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.1k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    2.8k

Grafana-Abfragen von iobroker MySQL

Geplant Angeheftet Gesperrt Verschoben Praktische Anwendungen (Showcase)
37 Beiträge 12 Kommentatoren 16.3k Aufrufe 14 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • sissiwupS Offline
    sissiwupS Offline
    sissiwup
    schrieb am zuletzt editiert von
    #25

    @piForscher:

    Hallo,

    ich habe nochmal eine SQL-lastige Frage:

    Wenn ich einen Verbrauchswert habe, der nur einmal am Tag geschrieben (erhöht) wird:

    Wie bekomme ich mit SQL diese Differenz raus (also die Differenz zwischen dem aktuellen und dem gestrigen Wert?

    Dank eurer Hilfe habe ich diese Abfrage, die mir eine Tabelle füllt - aber leider immer nur mit 0, weil ja nur ein Wert geschrieben wird, also die Different zwischen min und max 0 ist.

    SELECT CONCAT(MONTH(FROM_UNIXTIME(substring(ts,1,10))),'-', DAY(FROM_UNIXTIME(substring(ts,1,10)))) 
    AS Tag, round(max(val)-min(val),0) AS Solarpumpe 
    FROM iobroker.ts_number 
    WHERE  id=(SELECT id FROM iobroker.datapoints WHERE name="viessmann.0.get.VitoLaufzeitSolar") 
    AND FROM_UNIXTIME(substring(ts,1,10)) BETWEEN DATE_SUB(CURRENT_DATE(),INTERVAL 14 day) 
    AND CURRENT_DATE() 
    GROUP BY MONTH(FROM_UNIXTIME(substring(ts,1,10))),DAY(FROM_UNIXTIME(substring(ts,1,10))) 
    ORDER BY MONTH(FROM_UNIXTIME(substring(ts,1,10))) , DAY(FROM_UNIXTIME(substring(ts,1,10)))
    ```` `  
    

    Hmmm. Das geht bei der Datenfülle in den Tabellen nicht auf den üblichen Wegen

    (left join mit sich selbst mit dem max(datum) < aktuelle Zeile-Datum)

    (so ähnlich wie unten / ungetestet!!!)

    SELECT
        t1.ID,
        t1.val,
        t1.ts,
        t1.val - IFNULL(t2.val, 0) AS diff_val   
    FROM
        ts_number t1
        LEFT JOIN ts_number t2
            ON t2.ts = (
                SELECT MAX(ts)
                FROM ts_number t3
                WHERE t3.ts < t1.ts and t3.id=t1.id
            )
        WHERE T1.ID='865'
    ORDER BY t1.ts
    

    Ich würde es mit folgenden probieren:

    SET @OVAL=0;
    SELECT *,t.val,t.val-@OVAL,@oval := t.val FROM `ts_number` t where id = 865 order by ts limit 20
    
    

    id ist der Datenpunkt (SELECT id FROM iobroker.datapoints WHERE name="viessmann.0.get.VitoLaufzeitSolar")

    Er rechnet einfach die aktuelle Zeile minus die letzte.

    Where musst du natürlich anpassen. Limit ist nur für schnelleres Testen.

    MfG

    Sissi

    –-----------------------------------------

    1 CCU3 1 CCU2-Gateway 1 LanGateway 1 Pi-Gateway 1 I7 für ioBroker/MySQL


    W 1 Antwort Letzte Antwort
    0
    • M Offline
      M Offline
      Mitch
      schrieb am zuletzt editiert von
      #26

      Hi,

      ich lasse mir über einen Graphen immer den Tagesverbrauch angeben:

      SELECT
        floor(n.ts/1000) as time_sec,
        n.val as value,
        d.name as metric
      FROM ts_number n,datapoints d
      WHERE $__unixEpochFrom()*1000<n.ts and/$__unixepochto()*1000="">n.ts and n.id = 8 and n.id=d.id
      ORDER BY n.ts ASC</n.ts>
      

      Allerdings ist das immer der Wert von gestern, der geloggt wird. Wie kann ich jetzt immer einen Tag oben im SQL-Statement abziehen, damit der Tag wieder stimmt?

      1 Antwort Letzte Antwort
      0
      • DutchmanD Online
        DutchmanD Online
        Dutchman
        Developer Most Active Administrators
        schrieb am zuletzt editiert von
        #27

        Brauchst du nicht, in Grafana hast du Time-Shift in den grafiek Optionen

        Sent from my iPhone using Tapatalk

        1 Antwort Letzte Antwort
        0
        • M Offline
          M Offline
          Mitch
          schrieb am zuletzt editiert von
          #28

          @Dutchman:

          Brauchst du nicht, in Grafana hast du Time-Shift in den grafiek Optionen

          Sent from my iPhone using Tapatalk `

          Das verschiebt nur die Anzeige, aber die Werte bleiben an den falschen Tagen, also + 1

          1 Antwort Letzte Antwort
          0
          • andreA Offline
            andreA Offline
            andre
            Developer
            schrieb am zuletzt editiert von
            #29

            Hallo,
            ich mache gerade meine ersten Schritte in Grafana und stehe noch ein wenig mit der SQL-Syntax auf Kriegsfuß. Besser gesagt bekomme ich meinen Graphen nicht "smooth"...
            Im Detail geht es um meine PV-Leistung. Ich habe aktuell diese Abfrage:

            SELECT
              floor(ts/1000) as time_sec,
              val as value,
              "PV-Leistung" as metric
            FROM ts_number
            WHERE $__unixEpochFrom()*1000 < ts and $__unixEpochTo()*1000 > ts and id = 2
            ORDER BY ts
            
            

            Funktioniert soweit tadellos. :) Jetzt versuche ich seit Tagen übers zusammen-googlen mit MEAN bzw. AVG und GROUP BY meine Abfrage zu tunen. Zum einen in Hinblick auf kleinere Datenmengen bei der Abfrage, zum Anderen für eine "smoothe" Grafik...
            Hat vielleicht jemand ein Beispiel dazu, welches ich mit meinen SQL-Grundkenntnissen auch verstehen kann? Oder wie müsste meine Abfrage erweitert werden, wenn ich z.B. aus den Werten von jeweils 5 Minuten einen Mittelwert bilden möchte?

            Danke.

            MfG,
            André

            Bitte keine Support-Fragen per PN! Nutzt die öffentliche Kanäle damit auch andere von den Antworten profitieren können!

            1 Antwort Letzte Antwort
            0
            • D Offline
              D Offline
              Denis103
              schrieb am zuletzt editiert von
              #30

              Ich mache grad meine ersten Gehversuche mit Garfana und einer mySQL-DB als Datenquelle. Als Beispiel habe ich hier aus dem Thread meine Test-Abfrage adaptiert:

              SELECT
                floor(nb.ts/1000) AS time_sec,
                nb.val AS value,
                dp.name AS metric
              FROM ts_number AS nb, datapoints AS dp
              WHERE $__unixEpochFrom()*1000 < nb.ts AND $__unixEpochTo()*1000 > nb.ts AND nb.id = 3 AND nb.id = dp.id
              ORDER BY nb.ts ASC
              

              Beim ausführen der Abfrage erhalte ich in PHPMYADMIN folgenden Fehler:

              #1305 - FUNCTION iobroker.$__unixEpochFrom does not exist 
              

              Füge ich das Query in Grafana ein, dann kommt da kein Fehler, aber der Graph zeigt auch keine Daten an.

              Stimmt etwas mit meiner mySQL-Syntax nicht?

              simatecS 1 Antwort Letzte Antwort
              0
              • D Denis103

                Ich mache grad meine ersten Gehversuche mit Garfana und einer mySQL-DB als Datenquelle. Als Beispiel habe ich hier aus dem Thread meine Test-Abfrage adaptiert:

                SELECT
                  floor(nb.ts/1000) AS time_sec,
                  nb.val AS value,
                  dp.name AS metric
                FROM ts_number AS nb, datapoints AS dp
                WHERE $__unixEpochFrom()*1000 < nb.ts AND $__unixEpochTo()*1000 > nb.ts AND nb.id = 3 AND nb.id = dp.id
                ORDER BY nb.ts ASC
                

                Beim ausführen der Abfrage erhalte ich in PHPMYADMIN folgenden Fehler:

                #1305 - FUNCTION iobroker.$__unixEpochFrom does not exist 
                

                Füge ich das Query in Grafana ein, dann kommt da kein Fehler, aber der Graph zeigt auch keine Daten an.

                Stimmt etwas mit meiner mySQL-Syntax nicht?

                simatecS Online
                simatecS Online
                simatec
                Developer Most Active
                schrieb am zuletzt editiert von simatec
                #31

                Ich muss das Thema hier noch einmal aufwärmen. Ich bin gerade dabei bei mir auf Grafana umzustellen und hänge an folgenden Punkt.
                Ich möchte gerne eine Graph erstellen, in dem ich meinen Tagesverbrauch an Strom darstellen kann.
                Mein Stromzähler werte ich aus und alle Daten werden bei mir in die mysql Datenbank geschrieben.

                Wie bekomme ich diese Graph hin, in der mir Tageweise der Verbrauch angezeigt wird?

                Hier ein Beispiel, wie ich mir das gerne bauen will:
                Bildschirmfoto 2020-11-15 um 15.47.43.png

                Meine Datenpunkt in mysql lese ich wie folgt aus:

                SELECT
                floor(n.ts/1000) as time_sec,
                n.val as value,
                "Tagesverbrauch" as metric
                FROM ts_number n
                WHERE $__unixEpochFrom()*1000<n.ts and $__unixEpochTo()*1000>n.ts and n.id = 18
                GROUP BY $__unixEpochGroup(n.ts,$__interval,previous)
                ORDER BY n.ts ASC
                
                • Besuche meine Github Seite
                • Beitrag hat geholfen oder willst du mich unterstützen
                • HowTo Restore ioBroker
                SegwayS 1 Antwort Letzte Antwort
                0
                • simatecS simatec

                  Ich muss das Thema hier noch einmal aufwärmen. Ich bin gerade dabei bei mir auf Grafana umzustellen und hänge an folgenden Punkt.
                  Ich möchte gerne eine Graph erstellen, in dem ich meinen Tagesverbrauch an Strom darstellen kann.
                  Mein Stromzähler werte ich aus und alle Daten werden bei mir in die mysql Datenbank geschrieben.

                  Wie bekomme ich diese Graph hin, in der mir Tageweise der Verbrauch angezeigt wird?

                  Hier ein Beispiel, wie ich mir das gerne bauen will:
                  Bildschirmfoto 2020-11-15 um 15.47.43.png

                  Meine Datenpunkt in mysql lese ich wie folgt aus:

                  SELECT
                  floor(n.ts/1000) as time_sec,
                  n.val as value,
                  "Tagesverbrauch" as metric
                  FROM ts_number n
                  WHERE $__unixEpochFrom()*1000<n.ts and $__unixEpochTo()*1000>n.ts and n.id = 18
                  GROUP BY $__unixEpochGroup(n.ts,$__interval,previous)
                  ORDER BY n.ts ASC
                  
                  SegwayS Offline
                  SegwayS Offline
                  Segway
                  schrieb am zuletzt editiert von
                  #32

                  @simatec

                  Hallo Ich sowas bei mir laufen. Hier die tägliche PV Produktion - fest eingestellt auf die letzten 2 Wochen:
                  ce04fd4d-7882-47cf-83c1-2ff60c4db431-grafik.png

                  Das ganze per InfluxDB und Grafana:
                  f296e975-f988-4cce-b914-b72d3ff60450-grafik.png

                  Gruß Dirk
                  Intel Proxmox Cluster (3x NUC) mit Debian & Proxmox / IoB als VM unter Debian / 60+ Adapter installiert

                  simatecS 1 Antwort Letzte Antwort
                  0
                  • SegwayS Segway

                    @simatec

                    Hallo Ich sowas bei mir laufen. Hier die tägliche PV Produktion - fest eingestellt auf die letzten 2 Wochen:
                    ce04fd4d-7882-47cf-83c1-2ff60c4db431-grafik.png

                    Das ganze per InfluxDB und Grafana:
                    f296e975-f988-4cce-b914-b72d3ff60450-grafik.png

                    simatecS Online
                    simatecS Online
                    simatec
                    Developer Most Active
                    schrieb am zuletzt editiert von
                    #33

                    @Segway
                    Ich habe inzwischen auch auf Influx gewechselt und meine Log Daten von mysql auf Influx portiert.

                    • Besuche meine Github Seite
                    • Beitrag hat geholfen oder willst du mich unterstützen
                    • HowTo Restore ioBroker
                    SegwayS 1 Antwort Letzte Antwort
                    0
                    • simatecS simatec

                      @Segway
                      Ich habe inzwischen auch auf Influx gewechselt und meine Log Daten von mysql auf Influx portiert.

                      SegwayS Offline
                      SegwayS Offline
                      Segway
                      schrieb am zuletzt editiert von
                      #34

                      @simatec
                      Läuft es denn dann ?

                      Gruß Dirk
                      Intel Proxmox Cluster (3x NUC) mit Debian & Proxmox / IoB als VM unter Debian / 60+ Adapter installiert

                      simatecS 1 Antwort Letzte Antwort
                      0
                      • SegwayS Segway

                        @simatec
                        Läuft es denn dann ?

                        simatecS Online
                        simatecS Online
                        simatec
                        Developer Most Active
                        schrieb am zuletzt editiert von
                        #35

                        @Segway
                        Ja mit Influx lässt sich das einfacher in Grafana umsetzen

                        • Besuche meine Github Seite
                        • Beitrag hat geholfen oder willst du mich unterstützen
                        • HowTo Restore ioBroker
                        1 Antwort Letzte Antwort
                        0
                        • sissiwupS sissiwup

                          @piForscher:

                          Hallo,

                          ich habe nochmal eine SQL-lastige Frage:

                          Wenn ich einen Verbrauchswert habe, der nur einmal am Tag geschrieben (erhöht) wird:

                          Wie bekomme ich mit SQL diese Differenz raus (also die Differenz zwischen dem aktuellen und dem gestrigen Wert?

                          Dank eurer Hilfe habe ich diese Abfrage, die mir eine Tabelle füllt - aber leider immer nur mit 0, weil ja nur ein Wert geschrieben wird, also die Different zwischen min und max 0 ist.

                          SELECT CONCAT(MONTH(FROM_UNIXTIME(substring(ts,1,10))),'-', DAY(FROM_UNIXTIME(substring(ts,1,10)))) 
                          AS Tag, round(max(val)-min(val),0) AS Solarpumpe 
                          FROM iobroker.ts_number 
                          WHERE  id=(SELECT id FROM iobroker.datapoints WHERE name="viessmann.0.get.VitoLaufzeitSolar") 
                          AND FROM_UNIXTIME(substring(ts,1,10)) BETWEEN DATE_SUB(CURRENT_DATE(),INTERVAL 14 day) 
                          AND CURRENT_DATE() 
                          GROUP BY MONTH(FROM_UNIXTIME(substring(ts,1,10))),DAY(FROM_UNIXTIME(substring(ts,1,10))) 
                          ORDER BY MONTH(FROM_UNIXTIME(substring(ts,1,10))) , DAY(FROM_UNIXTIME(substring(ts,1,10)))
                          ```` `  
                          

                          Hmmm. Das geht bei der Datenfülle in den Tabellen nicht auf den üblichen Wegen

                          (left join mit sich selbst mit dem max(datum) < aktuelle Zeile-Datum)

                          (so ähnlich wie unten / ungetestet!!!)

                          SELECT
                              t1.ID,
                              t1.val,
                              t1.ts,
                              t1.val - IFNULL(t2.val, 0) AS diff_val   
                          FROM
                              ts_number t1
                              LEFT JOIN ts_number t2
                                  ON t2.ts = (
                                      SELECT MAX(ts)
                                      FROM ts_number t3
                                      WHERE t3.ts < t1.ts and t3.id=t1.id
                                  )
                              WHERE T1.ID='865'
                          ORDER BY t1.ts
                          

                          Ich würde es mit folgenden probieren:

                          SET @OVAL=0;
                          SELECT *,t.val,t.val-@OVAL,@oval := t.val FROM `ts_number` t where id = 865 order by ts limit 20
                          
                          

                          id ist der Datenpunkt (SELECT id FROM iobroker.datapoints WHERE name="viessmann.0.get.VitoLaufzeitSolar")

                          Er rechnet einfach die aktuelle Zeile minus die letzte.

                          Where musst du natürlich anpassen. Limit ist nur für schnelleres Testen.

                          W Offline
                          W Offline
                          WernerS
                          schrieb am zuletzt editiert von
                          #36

                          @sissiwup

                          Hallo

                          also das funktioniert bei mir. Ich benutze Mysql und MariaDB.

                          SELECT
                            floor(nb.ts/1000) AS time_sec,
                          
                            nb.val AS value,
                            dp.name AS metric
                          FROM ts_number AS nb, datapoints AS dp
                          WHERE $__unixEpochFrom()*1000 < nb.ts AND $__unixEpochTo()*1000 > nb.ts AND nb.id = 36 AND nb.id = dp.id
                          ORDER BY nb.ts ASC
                          

                          Ich bekomme manchmal den Fehler "Data is missing a Time Field" obwohl daten vorhanden sind

                          Gruß
                          Werner

                          Benjamin HäubleinB 1 Antwort Letzte Antwort
                          0
                          • W WernerS

                            @sissiwup

                            Hallo

                            also das funktioniert bei mir. Ich benutze Mysql und MariaDB.

                            SELECT
                              floor(nb.ts/1000) AS time_sec,
                            
                              nb.val AS value,
                              dp.name AS metric
                            FROM ts_number AS nb, datapoints AS dp
                            WHERE $__unixEpochFrom()*1000 < nb.ts AND $__unixEpochTo()*1000 > nb.ts AND nb.id = 36 AND nb.id = dp.id
                            ORDER BY nb.ts ASC
                            

                            Ich bekomme manchmal den Fehler "Data is missing a Time Field" obwohl daten vorhanden sind

                            Gruß
                            Werner

                            Benjamin HäubleinB Offline
                            Benjamin HäubleinB Offline
                            Benjamin Häublein
                            Developer
                            schrieb am zuletzt editiert von
                            #37

                            @werners Ich habe es jetzt folgendermaßen gelöst:

                            SELECT val AS value, ts AS "time" FROM iobroker.ts_number WHERE id = 12 AND $__unixEpochFilter(ts/1000)
                            

                            Das scheint mir das einfachste zu sein.

                            1 Antwort Letzte Antwort
                            0
                            Antworten
                            • In einem neuen Thema antworten
                            Anmelden zum Antworten
                            • Älteste zuerst
                            • Neuste zuerst
                            • Meiste Stimmen


                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            852

                            Online

                            32.4k

                            Benutzer

                            81.5k

                            Themen

                            1.3m

                            Beiträge
                            Community
                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                            ioBroker Community 2014-2025
                            logo
                            • Anmelden

                            • Du hast noch kein Konto? Registrieren

                            • Anmelden oder registrieren, um zu suchen
                            • Erster Beitrag
                              Letzter Beitrag
                            0
                            • Home
                            • Aktuell
                            • Tags
                            • Ungelesen 0
                            • Kategorien
                            • Unreplied
                            • Beliebt
                            • GitHub
                            • Docu
                            • Hilfe