Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Einsteigerfragen
    4. Automatisierung
    5. Sensorwerte in SQL-DB schreiben

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Sensorwerte in SQL-DB schreiben

    This topic has been deleted. Only users with topic management privileges can see it.
    • I
      IOMAX 0 last edited by

      @mickym

      Hallo Mickym,

      danke für deine schnelle Antwort.
      Ich glaube aber, das kann nicht funktionieren.

      Ich habe folgende Tabellen:

      060e0397-f018-4df8-835b-597388429820-grafik.png

      Datapoints enthält:

      0a75432d-fec1-4acc-8199-61c1276b49d8-grafik.png

      Bei den Zeilen 11-17 habe ich mit Aliasen herumgespielt

      Sources enthält:

      e22d1566-cd9b-4181-beb1-d7638a2b20cc-grafik.png

      Da ist nach meinem Verständnis nichts Brauchbares drin.
      Aber selbst wenn, dann könnte ich damit trotzdem nichts anfangen, denn die Zeilen in "ts_number" völlig ohne
      Identifier, sodass ein Mapping nicht möglich ist.

      df09913f-9562-4baf-9fa5-7dfa05ca2559-grafik.png

      Maxi

      mickym 3 Replies Last reply Reply Quote 0
      • mickym
        mickym Most Active @IOMAX 0 last edited by

        @iomax-0 Wieso Du hast doch bei _from immer 0 oder 1?

        Ich habe gerade mal so einen View erstellt.

        99cce1a3-8cf4-4ef9-85ec-d5c7a32b95f7-image.png

        Diese Tabelle enthält nur noch die Daten einer source.

        1 Reply Last reply Reply Quote 0
        • mickym
          mickym Most Active @IOMAX 0 last edited by mickym

          @iomax-0 Im Prinzip - gut bei Deinen Aliases ist das halt nicht so einfach - aber Du siehst doch bei jeder Tabelle, dass über _id eine eindeutige Quelle zugeordnet ist. Ist die Frage, ob es überhaupt Sinn macht hier mit Aliasen zu arbeiten, weil wenn man mal eine andere Source hat, automatisch eine neue ID erstellt wird, so dass man die Abfragen für die Views entsprechend erweitern kann.

          Über den View kann man mit dem SQL Statement ja ggf. das flexibel steuern.

          6958ec4d-7347-4175-9dc8-f2361bb94ee7-image.png

          Die Tabellen selbst schauen immer gleich aus, die legt ja der SQL Adapter an. Deswegen ist die Struktur der Tabellen bei allen identisch - egal wieviele Punkte. Das ist auch meines Erachtens sinnvoll, um da eine Struktur zu schaffen, die unabhängig von der Art und Anzahl an geloggten Punkten ist.

          1 Reply Last reply Reply Quote 0
          • mickym
            mickym Most Active @IOMAX 0 last edited by mickym

            @iomax-0 sagte in Sensorwerte in SQL-DB schreiben:

            Aber selbst wenn, dann könnte ich damit trotzdem nichts anfangen, denn die Zeilen in "ts_number" völlig ohne
            Identifier, sodass ein Mapping nicht möglich ist.

            Das stimmt nicht - mit dem _id - ist über die datapoints die Quelle eindeutig zuzuordnen. Wenn Du mal zwischenzeitlich das Logging deaktiviert hast und dann wieder aktiviert hast - dann kann es sein, dass vielleicht die datapoints nicht mehr da ist. Bei jeder Aktivierung eines Datenpunktes wird ein neuer Eintrag in der datapoints Table generiert.

            Sprich alle Datensätze in Deiner ts_number Tabelle, in der _id = 1 ist, stammen vom Datenpunkt ... consumptionMeterReadingKWh

            Sprich mit einem View consumptionMeterReadingKWh kannst Du Dir über einen entsprechenden View mit dem SQL Statement quasi eine eigene Tabelle mit genau einer definierten Quelle aus datapoints erstellen.

            1 Reply Last reply Reply Quote 0
            • OliverIO
              OliverIO @IOMAX 0 last edited by

              @iomax-0 sagte in Sensorwerte in SQL-DB schreiben:

              kann aber nicht zuordnen, welche Zeile zu welchem Datenpunkt von den 9 gehört

              dafür sind datenbanken da, das man hoch performant millionen von datensätze so abrufen kann wie man will.
              in iobroker gibt es eine separate tabelle datapoints mit allen datenpunkten die aufgezeichnet werden. der id in dieser tabelle entspricht der Zahl in _from in den Tabellen ts_number/etc,

              wenn du sehen willst wie der datenpunkt lautet, dann kann man das über eine query abfragen

              diese hier fragt den datenpunktnamen, den timestamp und den wert ab. über die where bedingung wird der id aus datapoint mit dem _from wert aus den ts_number verknüpft
              Der LIMIT befehl begrenzt mal auf 100 Datensätze, da unter umständen da ja ganz viele werte in der datenbank gespeichert ist
              evtl solltest du auch auf einen zeitbereich begrenzen

              SELECT dp.name,val.ts,val.val from ts_number as val,datapoints as dp where dp.id = val._from LIMIT 100
              

              hier ein kleines tutorial zu den datenbank abfragen
              https://www.w3schools.com/sql/sql_select.asp

              1 Reply Last reply Reply Quote 0
              • F
                fastfoot last edited by

                _from ist nicht ziehlführend, sondern die id, sie ist mit einer id aus datapoints identisch. Man muss keine view erstellen sondern macht das gleich im sql-statement

                SELECT d.id, d.name, FROM_UNIXTIME(n.ts/1000) datum, n.val
                FROM ts_number n JOIN datapoints d ON n.id=d.id AND d.name="tankerkoenig.0.stations.5.e5.feed"
                WHERE n.ts >= UNIX_TIMESTAMP(DATE('2022-6-1'))*1000
                  AND n.ts <  UNIX_TIMESTAMP(DATE('2022-6-2'))*1000;
                

                liefert

                id;name;datum;val
                1;tankerkoenig.0.stations.5.e5.feed;2022-06-01 09:56:30,2760;1.879
                1;tankerkoenig.0.stations.5.e5.feed;2022-06-01 10:41:29,9850;1.879
                1;tankerkoenig.0.stations.5.e5.feed;2022-06-01 10:56:30,1020;1.869
                1;tankerkoenig.0.stations.5.e5.feed;2022-06-01 12:11:30,0160;1.869
                1;tankerkoenig.0.stations.5.e5.feed;2022-06-01 12:26:30,0300;1.899
                1;tankerkoenig.0.stations.5.e5.feed;2022-06-01 13:41:30,0650;1.899
                1;tankerkoenig.0.stations.5.e5.feed;2022-06-01 13:56:30,0730;1.889
                1;tankerkoenig.0.stations.5.e5.feed;2022-06-01 17:11:30,1950;1.889
                1;tankerkoenig.0.stations.5.e5.feed;2022-06-01 17:26:30,1200;1.909
                1;tankerkoenig.0.stations.5.e5.feed;2022-06-01 17:41:30,1120;1.889
                1;tankerkoenig.0.stations.5.e5.feed;2022-06-01 17:56:30,1780;1.889
                1;tankerkoenig.0.stations.5.e5.feed;2022-06-01 18:11:30,1100;1.879
                1;tankerkoenig.0.stations.5.e5.feed;2022-06-01 18:41:30,2390;1.879
                1;tankerkoenig.0.stations.5.e5.feed;2022-06-01 18:56:30,1310;1.859
                1;tankerkoenig.0.stations.5.e5.feed;2022-06-01 19:11:30,1260;1.899
                1;tankerkoenig.0.stations.5.e5.feed;2022-06-01 19:26:30,1350;1.889
                1;tankerkoenig.0.stations.5.e5.feed;2022-06-01 20:41:30,1900;1.889
                1;tankerkoenig.0.stations.5.e5.feed;2022-06-01 20:56:30,1740;1.859
                1;tankerkoenig.0.stations.5.e5.feed;2022-06-01 21:59:11,8280;1.859
                
                
                mickym 1 Reply Last reply Reply Quote 0
                • mickym
                  mickym Most Active @fastfoot last edited by mickym

                  @fastfoot Ja OK - Du hast Recht - sorry mein Fehler. Ich verbessere das mal. 😉

                  In den Screenshots hatte ich es ja richtig gemacht - nur hier falsch beschrieben.
                  Finde das immer toll, wenn man das so aufmerksam mit liest. Vielen Dank an @fastfoot

                  @fastfoot sagte in Sensorwerte in SQL-DB schreiben:

                  Man muss keine view erstellen sondern macht das gleich im sql-statement

                  Ja das habe ich ja auch gesagt, nur der TE meinte ja das Grafana wohl nicht mit SQL Statements umgehen kann, sondern man quasi nur Tabellen als Ganzes als Source angeben kann. Da kann ich aber nichts zu sagen, weil ich Grafana nicht verwende.

                  S 1 Reply Last reply Reply Quote 0
                  • S
                    stefank22 @mickym last edited by

                    Man kann in Grafana sowohl SQL-Statements eingeben, als auch eine Queryeditor verwenden.

                    46b11adf-6068-4ce3-a59e-17810a756be0-grafik.png

                    717cd437-4acf-4dd3-9628-5e6ebcbe5bc6-grafik.png

                    Würde mich auch mal interessieren, wie man das löst, bin in SQL aber nicht fit genug.

                    Was müsste man denn konkret in Grafana hinterlegen, bzw. wie sähe das SQL-Statement aus,
                    wenn man beispielsweise die Werte (Tabelle ts_numbers) der Geräte-ID 10 (Tabelle datapoints) selektieren möchte ?

                    3689f05e-62e1-4df6-b7b3-c10b3540961b-grafik.png

                    ac562e3d-35b4-4786-a59b-17c8ae4b9373-grafik.png

                    I mickym 2 Replies Last reply Reply Quote 0
                    • I
                      IOMAX 0 @stefank22 last edited by

                      Hey Leute,

                      ihr habt Recht. Über die ID ist das ja eindeutig zuordenbar !!! Ist schon spät 🙂
                      Brauche quasi nur nen SQL-"SVERWEIS" zu machen.

                      Wie das geht, weiß ich aber nicht. Schließe mich daher Stefank22 an ..

                      Grüße gehen raus !

                      1 Reply Last reply Reply Quote 0
                      • mickym
                        mickym Most Active @stefank22 last edited by mickym

                        @stefank22

                        SELECT  `id`,  `ts`, `val` FROM `iobroker`.`ts_number` WHERE `id` = 10 
                        

                        OK Du kannst noch ORDER by ts einfügen.

                        Und noch ein Fehler meinerseits - die Datenpunkte stehen in Tabelle datapoints. Source enthält die Quelle, die den Datenpunkt beschrieben hat.

                        ecbb2dff-b377-483c-8c54-35fc823a0663-image.png

                        Sorry für die Verwirrung.

                        Also
                        datapoints - enthält die Quelle also den Datenpunkt
                        source - ist die ID die den Datenpunkt beschrieben hat. (Also meist die Adapterinstanz).

                        Sorry für die Verwirrung, die ich vielleicht gestiftet habe.

                        I 1 Reply Last reply Reply Quote 0
                        • I
                          IOMAX 0 @mickym last edited by

                          Ha, ich habs. Das ist ja doch einfacher, als gedacht.

                          SELECT
                          ts AS "time",
                          val
                          FROM ts_number
                          WHERE
                          id = 8
                          ORDER BY ts

                          Über die ID kann ich nun schön alle Datenpunkte ansteuern.

                          DANKE EUCH ALLEN !

                          1 Reply Last reply Reply Quote 0
                          • First post
                            Last post

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          748
                          Online

                          31.9k
                          Users

                          80.1k
                          Topics

                          1.3m
                          Posts

                          5
                          13
                          504
                          Loading More Posts
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes
                          Reply
                          • Reply as topic
                          Log in to reply
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                          The ioBroker Community 2014-2023
                          logo