Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

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

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    17
    1
    408

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    5.0k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.4k

Grafana-Abfragen von iobroker MySQL

Scheduled Pinned Locked Moved Praktische Anwendungen (Showcase)
37 Posts 12 Posters 16.9k Views 14 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • sissiwupS Offline
    sissiwupS Offline
    sissiwup
    wrote on last edited by
    #18

    Unter Display kannst du sagen ob null-Werte als null oder als Verbunden gehandelt werden.

    Ansonsten kannst du unter Display Override dein Gas aus dem Stacking rausnehmen und z.B. auch der rechten Y-Achse zuordnen.

    MfG

    Sissi

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

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


    1 Reply Last reply
    0
    • DutchmanD Offline
      DutchmanD Offline
      Dutchman
      Developer Most Active Administrators
      wrote on last edited by
      #19

      @sissiwup:

      Unter Display kannst du sagen ob null-Werte als null oder als Verbunden gehandelt werden.

      Ansonsten kannst du unter Display Override dein Gas aus dem Stacking rausnehmen und z.B. auch der rechten Y-Achse zuordnen. `

      Das Stacking gilt leider für die gesamte Grafik, y-Achse links und rechts werden hierbei nicht separiert womit Gas & Strom doch wieder in der Grafik zusammen aufgezählt werden.

      Nachteil vom stacking is auch das die Linie zwar aufeinander addiert werden aber kein total wert angezeigt wird (aus durch schaut nach der achse)

      979_screen_shot_2018-04-21_at_16.26.03.png

      NULL werte connected hab ich an, diese Einstellung verbindet aber nur NULL werten zischen datenpunkten und nicht wen am ende einer fehlt.

      Ich habe das jetzt gelöst durch alle 5 Minuten die werte in die DB zu schreiben auch wen diese sich nicht geändert haben diese Lösung finde ich aber nicht schön (unnötige dauen in der DB)

      ~Dutch

      1 Reply Last reply
      0
      • sissiwupS Offline
        sissiwupS Offline
        sissiwup
        wrote on last edited by
        #20

        Hallo,

        Series Override ist hier das Zauberwort:
        609_bildschirmfoto_2018-04-22_um_10.13.02.png

        Du siehst hier, alle Werte sind gestackt, nur der my-sql Wert nicht.

        Und hier machst du auch die Zuordnung zur rechten Y-Achse.

        Du kannst hier nahezu alle Default-Werte für jede Kurve überschreiben.

        Beim Hover kannst du angeben, das er die Werte addiert, d.h. wenn du mit der Maus

        über die Grafik fährst, siehts du eine Summe und nicht nur die Einzelwerte.

        MfG

        Sissi

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

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


        1 Reply Last reply
        0
        • DutchmanD Offline
          DutchmanD Offline
          Dutchman
          Developer Most Active Administrators
          wrote on last edited by
          #21

          Hi Sissiwup,

          Danke dir der Serie override hat das Problem mit dem stacking gelöst diese Funktion hatte ich übersehen :/

          Das letztere ergibt leider nicht nicht das gewünschte Resultat, wenn hover auf kumultatief wird der Gesamtwert auf dem bestehenden datenpunkt wiedergegeben.

          Dadurch hat mein ein falsches Bild ( zb Strom Abnahme Nacht ist nicht jetziger Wert sondern Nacht + Tag)

          Resultat sollte aber sein Nacht = jetziger Wert, Tag = jetziger Wert und dan ein total Nacht + Tag.

          ~~![](</s><URL url=)<link_text text="https://uploads.tapatalk-cdn.com/201804 ... e3eb19.jpg">https://uploads.tapatalk-cdn.com/20180422/29f94a17332e670d47d9c2b614e3eb19.jpg</link_text>" />

          ~~![](</s><URL url=)<link_text text="https://uploads.tapatalk-cdn.com/201804 ... d5ac26.jpg">https://uploads.tapatalk-cdn.com/20180422/b949764b71f68d7467d3f9e2fbd5ac26.jpg</link_text>" />

          Verzonden vanaf mijn iPad met Tapatalk~~~~

          1 Reply Last reply
          0
          • DutchmanD Offline
            DutchmanD Offline
            Dutchman
            Developer Most Active Administrators
            wrote on last edited by
            #22

            Mal als Beispiel, das ergibt jetzt auch solche lustige Sachen…

            Aus holländisch übersetzt, dal = Nacht/Wochenende, Piek = Tag.

            Jetzt sieht es in de Grafik aber so aus als hätte ich am Wochenende Tag Strom benutzt was natürlich nicht stimmt. An den Werten sieht man es dan aber die Linie ist lustig so.

            Daher hätte ich lieber einen total Wert separat.

            ~~![](</s><URL url=)<link_text text="https://uploads.tapatalk-cdn.com/201804 ... e4d7f4.jpg">https://uploads.tapatalk-cdn.com/20180422/1e6895ebdc50fd82a976531807e4d7f4.jpg</link_text>" />

            Verzonden vanaf mijn iPad met Tapatalk~~

            1 Reply Last reply
            0
            • sissiwupS Offline
              sissiwupS Offline
              sissiwup
              wrote on last edited by
              #23

              @Dutchman:

              Hi Sissiwup,

              Danke dir der Serie override hat das Problem mit dem stacking gelöst diese Funktion hatte ich übersehen :/

              Das letztere ergibt leider nicht nicht das gewünschte Resultat, wenn hover auf kumultatief wird der Gesamtwert auf dem bestehenden datenpunkt wiedergegeben.

              Dadurch hat mein ein falsches Bild ( zb Strom Abnahme Nacht ist nicht jetziger Wert sondern Nacht + Tag)

              Resultat sollte aber sein Nacht = jetziger Wert, Tag = jetziger Wert und dan ein total Nacht + Tag.

              ~~![](</s><URL url=)<link_text text="https://uploads.tapatalk-cdn.com/201804 ... e3eb19.jpg">https://uploads.tapatalk-cdn.com/20180422/29f94a17332e670d47d9c2b614e3eb19.jpg</link_text>" />

              ~~![](</s><URL url=)<link_text text="https://uploads.tapatalk-cdn.com/201804 ... d5ac26.jpg">https://uploads.tapatalk-cdn.com/20180422/b949764b71f68d7467d3f9e2fbd5ac26.jpg</link_text>" />

              Verzonden vanaf mijn iPad met Tapatalk~~~~ ` ~~~~Hallo,

              das lässt sich vermutlich mit ein bisschen SQL-Magic lösen:

              SELECT
                time_sec,
                sum(t.value) as value,
                "Strom (Summe)" as metric
              FROM 
              ((select cast(cast(n.ts/1000/600 as signed) * 600 as signed)  as time_sec,
                avg(n.val) as value 
                from ts_number n where $__unixEpochFrom()*1000<n.ts and/$__unixepochto()*1000="">n.ts and n.id = 110 
                group by time_sec)
                union all 
                (select cast(cast(n.ts/1000/600 as signed) * 600 as signed)  as time_sec,
                avg(n.val) as value 
                from ts_number n where $__unixEpochFrom()*1000<n.ts and/$__unixepochto()*1000="">n.ts and n.id = 107 
                group by time_sec)
                ) t
              WHERE $__unixEpochFrom()<t.time_sec and/$__unixepochto()="">t.time_sec   
              group by t.time_sec
              ORDER BY t.time_sec</t.time_sec></n.ts></n.ts>
              

              Wie gehts: die id`s sind die deiner beiden Datenpunkte.

              Es wird der Durchschnitt für 10 Minuten (daher die 600) berechnet.

              Das wird dann unter den graden Wert gespeichert, also 6:00,6:10,6:20,6:30,6:40 …

              Dann werden einfach beide Werte addiert, da sie ja jetzt immer zu exakt selben Zeit vorliegen.

              Das Intervall sollte so gewählt werden, das sicher von beiden Adaptern ein Wert vorhanden ist.

              Das kannst du auch beinflussen indem du im SQL-Adapter z.B. einstellt alle 9 Minuten Speichern.

              Auch ohne Änderung.~~~~

              MfG

              Sissi

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

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


              1 Reply Last reply
              0
              • P Offline
                P Offline
                piForscher
                wrote on last edited by
                #24

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

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

                44 HM-Geräte mit CCU2

                iobroker auf MSI Ubuntu, Raspi2 und RaspiB.


                1 Reply Last reply
                0
                • sissiwupS Offline
                  sissiwupS Offline
                  sissiwup
                  wrote on last edited by
                  #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 Reply Last reply
                  0
                  • M Offline
                    M Offline
                    Mitch
                    wrote on last edited by
                    #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 Reply Last reply
                    0
                    • DutchmanD Offline
                      DutchmanD Offline
                      Dutchman
                      Developer Most Active Administrators
                      wrote on last edited by
                      #27

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

                      Sent from my iPhone using Tapatalk

                      1 Reply Last reply
                      0
                      • M Offline
                        M Offline
                        Mitch
                        wrote on last edited by
                        #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 Reply Last reply
                        0
                        • andreA Offline
                          andreA Offline
                          andre
                          Developer
                          wrote on last edited by
                          #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 Reply Last reply
                          0
                          • D Offline
                            D Offline
                            Denis103
                            wrote on last edited by
                            #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 Reply Last reply
                            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 Offline
                              simatecS Offline
                              simatec
                              Developer Most Active
                              wrote on last edited by 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 Reply Last reply
                              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
                                wrote on last edited by
                                #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 Reply Last reply
                                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 Offline
                                  simatecS Offline
                                  simatec
                                  Developer Most Active
                                  wrote on last edited by
                                  #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 Reply Last reply
                                  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
                                    wrote on last edited by
                                    #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 Reply Last reply
                                    0
                                    • SegwayS Segway

                                      @simatec
                                      Läuft es denn dann ?

                                      simatecS Offline
                                      simatecS Offline
                                      simatec
                                      Developer Most Active
                                      wrote on last edited by
                                      #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 Reply Last reply
                                      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
                                        wrote on last edited by
                                        #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 Reply Last reply
                                        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
                                          wrote on last edited by
                                          #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 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          542

                                          Online

                                          32.7k

                                          Users

                                          82.5k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Home
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe