Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] SQL getHistory Abfrage

    NEWS

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    [gelöst] SQL getHistory Abfrage

    This topic has been deleted. Only users with topic management privileges can see it.
    • O
      ostseeskipper @paul53 last edited by ostseeskipper

      @paul53 said in SQL getHistory Abfrage:

      @ostseeskipper sagte: Daher vielleicht undefined oder warum liefert mir Zeile 14

      Nein. Enthält result.result[i] das Attribut "id"?

      Der Datenpunkt den ich auslsen möchte (id?) ist in zeile 5 definiert, der Rest war nur Copy Paste

      Daher bin ich irritiert das ein Beispiel aus der Adapterbeschreibung so nicht funktioniert.

      O 1 Reply Last reply Reply Quote 0
      • O
        ostseeskipper @ostseeskipper last edited by

        @apollon77 könntest du mir eventuell auf den richtigen weg helfen?

        1 Reply Last reply Reply Quote 0
        • apollon77
          apollon77 last edited by

          Ich denke das das Example falsch ist.

          mach mal in die options von dem call ein `addIr: true´ dazu ... ist Sie dann da? Wenn ja muss ich das example fixen.

          O 1 Reply Last reply Reply Quote 0
          • O
            ostseeskipper @apollon77 last edited by

            @apollon77 said in SQL getHistory Abfrage:

            `addIr: true´

            var end = Date.now();
            log(new Date());
            
            sendTo('sql.0', 'getHistory', {
                id: 'smartmeter.0.1-0:16_7_0__255.value',
                options: {
                    addIr: true,
                    start:      end - 60000,
                    end:        end,
                    aggregate: 'minmax' // or 'none' to get raw values
                }
            }, function (result) {
                for (var i = 0; i < result.result.length; i++) {
                    console.log(i);
                    console.log(result.result[i].id);
                    console.log(new Date(result.result[i].ts).toISOString());
                    //console.log(result.result[i].id + ' ' + new Date(result.result[i].ts).toISOString());
                }
            });
            

            Das ändert leider nichts.

            20:28:33.439	info	javascript.0 (149) Stop script script.js.Logik.GleitDurchschnitt
            20:28:33.439	info	javascript.1 (16606) Stop script script.js.Logik.GleitDurchschnitt
            20:28:33.442	info	javascript.0 (149) Start javascript script.js.Logik.GleitDurchschnitt
            20:28:33.447	info	javascript.0 (149) script.js.Logik.GleitDurchschnitt: Thu Mar 31 2022 20:28:33 GMT+0200 (Mitteleuropäische Sommerzeit)
            20:28:33.448	info	javascript.0 (149) script.js.Logik.GleitDurchschnitt: registered 0 subscriptions and 0 schedules
            20:28:33.458	info	javascript.0 (149) script.js.Logik.GleitDurchschnitt: 0
            20:28:33.458	info	javascript.0 (149) script.js.Logik.GleitDurchschnitt: undefined
            20:28:33.458	info	javascript.0 (149) script.js.Logik.GleitDurchschnitt: 2022-03-31T18:27:33.447Z
            20:28:33.459	info	javascript.0 (149) script.js.Logik.GleitDurchschnitt: 1
            20:28:33.459	info	javascript.0 (149) script.js.Logik.GleitDurchschnitt: undefined
            20:28:33.459	info	javascript.0 (149) script.js.Logik.GleitDurchschnitt: 2022-03-31T18:27:37.042Z
            

            Was bewirkt diese Option, finde auch keine weitere Doku dazu.

            O 1 Reply Last reply Reply Quote 0
            • O
              ostseeskipper @ostseeskipper last edited by

              @apollon77
              jetzt habe ich das Beispiel "copy paste" aus Github probiert

              sendTo('sql.0', 'query', 'SELECT id FROM datapoints WHERE name="system.adapter.admin.0.memRss"', function (result) {
                  if (result.error) {
                      console.error(result.error);
                  } else {
                      // show result
                      console.log('Rows: ' + JSON.stringify(result.result));
                      var now = new Date();
                      now.setHours(-1);
                      sendTo('sql.0', 'query', 'SELECT * FROM ts_number WHERE ts >= ' + now.getTime() + ' AND id=' + result.result[0].id, function (result) {
                          console.log('Rows: ' + JSON.stringify(result.result));
                      });
                  }
              });
              

              Das sagt mir

              21:07:56.462	info	javascript.0 (149) script.js.Logik.GleitDurchschnitt: registered 0 subscriptions and 0 schedules
              21:07:56.469	error	javascript.0 (149) script.js.Logik.GleitDurchschnitt: Error: ER_NO_DB_ERROR: No database selected
              
              1 Reply Last reply Reply Quote 0
              • apollon77
                apollon77 last edited by

                sorry hatte ein Type drin: addId: true ...

                O 1 Reply Last reply Reply Quote 0
                • O
                  ostseeskipper @apollon77 last edited by ostseeskipper

                  @apollon77

                  wenn die Beispiele schon nicht funktionieren was kann soll man dann tun?
                  Der SQL Adapter zeichnet Datenpunkte wie gewünscht auf und stellt die Infos auch bereit, also muss er doch eine Datenbank haben.
                  1c1c22c2-dede-48f2-b62b-72c1e3843b31-grafik.png

                  5b607f42-3f2e-4d73-b131-d2387cc0f0e1-grafik.png

                  Könnt Ihr bitte euer Beispiel fixen damit man das nutzen und daran lernen kann.
                  lieben Dank

                  O apollon77 2 Replies Last reply Reply Quote 0
                  • O
                    ostseeskipper @ostseeskipper last edited by

                    @apollon77

                    auch mit addId: true ... gibt es undefined 😢

                    1 Reply Last reply Reply Quote 0
                    • apollon77
                      apollon77 @ostseeskipper last edited by

                      @ostseeskipper bitte ganz locker bleiben. Was denkst du was wir in dieser Konversation gerade tun?! Du hast auf ein Problem hingewiesen und ich versuche zu helfen das wir die Beispiele fixen können und ich hab noch nicht mal um ein github issue gebeten.

                      Ich nehme also jetzt mit das es auch mit addId nicht geht. Dann muss ich wohl mal genauer schauen.

                      O 1 Reply Last reply Reply Quote 0
                      • O
                        ostseeskipper @apollon77 last edited by ostseeskipper

                        @apollon77
                        ich bleib locker 👍 😊 und hab gesucht
                        hab den Fehler gefunden und auf Github was geschrieben

                        edit: Sorry wenn es zu emotional rüber kam, Ihr macht schon tolle arbeit👍

                        apollon77 1 Reply Last reply Reply Quote 0
                        • apollon77
                          apollon77 @ostseeskipper last edited by

                          @ostseeskipper Hi,

                          ok, aber das was Du jetzt af GitHub hast ist was anderes ... oder ist es quasi kombiniert?

                          Weil "query" ist was anderes als "getHistory"

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

                            • Bei query fehlt die Angabe der Datenbank vor den Tabellennamen, steht auch so im Readme. Also SELECT id FROM iobroker.datapoints....
                            • Bei getHistory wird id nicht mit zurück geliefert, allerdings würde ich mich fragen wozu, denn die Id ist ja Bestandteil der Abfrage. Es werden nur ts und val geliefert.
                            • addId hat tatsächlich keinen Effekt, habe es im source auch nur einmal gefunden, genutzt scheint es nicht zu werden.
                            apollon77 1 Reply Last reply Reply Quote 0
                            • O
                              ostseeskipper @apollon77 last edited by

                              @apollon77

                              Es ist kombiniert, da ja query und gethistory BuildIn Funktionen sind

                              Da ich mit gethistory nicht weitergekommen bin hatte ich query versucht und auch da fehler bekommen
                              Query sagte mir das die Datenbank nicht angegeben ist.
                              also die Datenbank im ersten sendto für die id's hinzugefügt,

                              dann ging es weiter, aber nun kam wieder diese 'undefined' Fehlermeldung wie aus der gethistory funktion

                              dann habe ich im 2ten sendto der 'query' funktion zum holen der values auch die Datenbank hinzugefügt.

                              Wenn es in der internen gethistory Funktion auch so abläuft nur halt intern im programmcode, vermute ich, das da der Datenbankname nicht sauber aus den Adaptereinstellungen ermittelt wird oder in die integrierten BuildIn-Funktionen wie gethistory übergeben werden.

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

                                @ostseeskipper sagte in SQL getHistory Abfrage:

                                Wenn es in der internen gethistory Funktion auch so abläuft nur halt intern im programmcode, vermute ich, das da der Datenbankname nicht sauber aus den Adaptereinstellungen ermittelt wird oder in die integrierten BuildIn-Funktionen wie gethistory übergeben werden.

                                Schmarrn. Deine Abfrage funktionierte doch für das Datum, id ist einfach nicht im Resultset vorhanden. Weshalb erwartest du das überhaupt? logge mal val statt id

                                        console.log(result.result[i].id);
                                        console.log(new Date(result.result[i].ts).toISOString());
                                
                                
                                O 1 Reply Last reply Reply Quote 0
                                • O
                                  ostseeskipper @fastfoot last edited by

                                  @fastfoot
                                  ich hatte erst mal nur erwartet das das Beispiel in der readme funktioniert, 😇

                                          console.log(result.result[i].id + ' ' + new Date(result.result[i].ts).toISOString());
                                  

                                  für jemanden der nicht aus der JS Sprache kommt und lernen will etwas frustriend.

                                  Auch im anderen Beispiel zu queries ist die Datenbank im Beispielscript nicht enthalten, aber ja du hast Recht es steht ein paar zeilen drunter.

                                  Was ich möchte, ist von einem Datenpunkt den gleitenden Durchschnitt der letzten x Minuten in eine Variable bzw. einen Datenpunkt schreiben.
                                  .ts muss ich vermutlich durch .val ersetzen um den Wert zu bekommen

                                  console.log(new Date(result.result[i].ts).toISOString());
                                  
                                  1 Reply Last reply Reply Quote 0
                                  • apollon77
                                    apollon77 last edited by

                                    Naja, schau mal hier https://github.com/ioBroker/ioBroker.sql#structure-of-the-dbs ... da steht elche Tabelle für welchen DB Typ wie heisst ... Ja ich kann gern in der Doku darauf hinweisen das das Beispiel zB für ne PostGres bzw sqlite ist und ggf andere Tabellennamen genutzt werden müssen.

                                    .ts muss ich vermutlich durch .val ersetzen um den Wert zu bekommen

                                    ts ist der Timestamp ... und val ist was anderes.

                                    Logge doch einfach mal console.log(JSON.stringify(result.result[i])) dann sehen wir was wirklich zurückommt und raten nicht rum

                                    O F 2 Replies Last reply Reply Quote 0
                                    • apollon77
                                      apollon77 @fastfoot last edited by

                                      @fastfoot sagte in SQL getHistory Abfrage:

                                      addId hat tatsächlich keinen Effekt, habe es im source auch nur einmal gefunden, genutzt scheint es nicht zu werden.

                                      Jupp scheint so zu sein, dann wäre das ein Bug

                                      1 Reply Last reply Reply Quote 0
                                      • O
                                        ostseeskipper @apollon77 last edited by

                                        @apollon77 said in SQL getHistory Abfrage:

                                        Logge doch einfach mal console.log(JSON.stringify(result.result[i])) dann sehen wir was wirklich zurückommt und raten nicht rum

                                        In der query oder gethistory ?

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

                                          @apollon77 sagte in SQL getHistory Abfrage:

                                          val ist was anderes.

                                          val ist der Wert, wir müssen nicht raten, ich habe das schon geprüft 🙂
                                          {'ts':1648832706691,'val':2.029}

                                          O 1 Reply Last reply Reply Quote 0
                                          • O
                                            ostseeskipper @fastfoot last edited by

                                            @fastfoot und @apollon77

                                            sendTo('sql.0', 'query', 'SELECT id FROM iobroker.datapoints WHERE name="smartmeter.0.1-0:16_7_0__255.value"', function (result) {
                                                if (result.error) {
                                                    console.error(result.error);
                                                } else {
                                                    var now = new Date();
                                                    now.setMinutes(-3);
                                                    sendTo('sql.0', 'query', 'SELECT AVG(val) AS Wert FROM iobroker.ts_number WHERE ts >= ' + now.getTime() + ' AND id=' + result.result[0].id, function (result) {
                                                        console.log(JSON.stringify(result.result[0]));
                                                    });
                                                }
                                            });
                                            

                                            ergibt

                                            21:54:35.208	info	javascript.0 (149) Start javascript script.js.Logik.GleitDurchschnitt
                                            21:54:35.226	info	javascript.0 (149) script.js.Logik.GleitDurchschnitt: registered 0 subscriptions and 0 schedules
                                            21:54:35.242	info	javascript.0 (149) script.js.Logik.GleitDurchschnitt: {"Wert":3.6997549019607843}
                                            
                                            O 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            338
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

                                            4
                                            58
                                            2672
                                            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