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

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] SQL getHistory Abfrage

    This topic has been deleted. Only users with topic management privileges can see it.
    • 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
            • O
              ostseeskipper @ostseeskipper last edited by

              Wenn mir nun noch einer von euch Beiden bitte sagen könne wie ich die Zahl 3.699 in eine Variable extrahiert bekomme wäre mein Abend gerettet😊

              paul53 F 2 Replies Last reply Reply Quote 0
              • F
                fastfoot @ostseeskipper last edited by

                @ostseeskipper probiere mal mit getHistory average statt minmax. Dann kannst du mit:
                log(i+' : ' + new Date(result.result[i].ts).toLocaleString() + ' => ' + result.result[i].val); das Ergebnis anschauen

                22:01:19.335	info	javascript.1 (527) script.js.Forum.getHistory: 0 : 1.4.2022, 19:14:39 => 2.0199999999999996
                22:01:19.336	info	javascript.1 (527) script.js.Forum.getHistory: 1 : 1.4.2022, 20:29:39 => 2.01
                22:01:19.337	info	javascript.1 (527) script.js.Forum.getHistory: 2 : 1.4.2022, 22:01:19 => 1.9977777777777777
                
                1 Reply Last reply Reply Quote 1
                • paul53
                  paul53 @ostseeskipper last edited by

                  @ostseeskipper sagte: wie ich die Zahl 3.699 in eine Variable extrahiert bekomme

                  let wert = result.result[0].Wert;
                  
                  O 1 Reply Last reply Reply Quote 1
                  • F
                    fastfoot @ostseeskipper last edited by

                    @ostseeskipper sagte in SQL getHistory Abfrage:

                    Wenn mir nun noch einer von euch Beiden bitte sagen könne wie ich die Zahl 3.699 in eine Variable extrahiert bekomme wäre mein Abend gerettet😊

                    mit let DeineVariable = result.result[0].Wert weist du das zu

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

                      @paul53
                      @fastfoot
                      @apollon77

                      Danke Euch erst mal.👍

                      @fastfoot ist es mit gethistory performanter als über die letzte von mir gepostete Lösung mit queries und avg ?
                      fand das now.setMinutes(-3) relativ charmat auch wenn ich es noch nicht wirklich verstehe wie das alles mit den result.result verkapselt ist.

                      Aber ein Auto muss ja auch nur fahren
                      schönen Abend euch

                      F 2 Replies Last reply Reply Quote 1
                      • apollon77
                        apollon77 last edited by

                        Ich stimme aber zu das die Beispiele vllt nicht die besten sind. Ich kann mal schauen das ich das hier gesagt dort einfließen lasse.

                        Ich bin aber auch ehrlich das mir persönlich Gerade die Zeit fehlt das alles sinnvoll und vollständig durchzuspielen und zu überlegen welche Beispiele in welcher Form aus „User“ Sicht Sinn machen. Da freuen wir uns über konkrete Vorschläge Bzw auf github einem Pull request“ für die readme (ist ganz easy: Stift bei der readme klicken, ändern, Änderung vorschlagen, pull request erstellen)

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

                          @ostseeskipper ob da performanter ist kann ich nicht sagen, für deinen gewählten Zeitraum ist das sicher egal. getHistory bietet einiges mehr, so kann man mit step noch einen Parameter mit angeben. Wie das genau funktioniert hat sich mir aber noch nicht erschlossen 🙂 Mit deiner Abfrage weisst du jedenfalls sicher was da passiert, das sehe ich erstmal als Vorteil. Wolltest du aber für den Zeitraum eines Jahres das jeweilige Tagesmittel errechnen, dann wäre getHistory einen näheren Blick wert 🙂

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

                            @apollon77 ich schaue mal ob ich da was verschlimmbessern kann. Ist jedenfalls ein guter Tipp mit dem Stift! Dauert aber etwas, an Deine Schlagzahl komme ich in 100 Jahren nicht ran 🙂 Muss mich auch erst noch etwas einarbeiten, wäre aber cool dich da etwas 'entlasten' zu können

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

                              @fastfoot Super. Vielen Dank!!

                              Das addId versuche ich die Tage mit noch zusammen mit einem anderen issue wo ich eh grad in allen 3 History Adaptern dran bin zu fixen.

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

                                @ostseeskipper sagte in SQL getHistory Abfrage:

                                fand das now.setMinutes(-3) relativ charmat

                                sieht cool aus, ist aber nicht was Du erwartest. Wenn now z.B. 09:43 ist dann setzt dir dieser Befehl dein now auf 08:57, nicht auf 09:40 🙂
                                Richtig geht es so: now.setMinutes(now.getMinutes() - 3)

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

                                  @fastfoot said in SQL getHistory Abfrage:

                                  @ostseeskipper sagte in SQL getHistory Abfrage:

                                  fand das now.setMinutes(-3) relativ charmat

                                  sieht cool aus, ist aber nicht was Du erwartest. Wenn now z.B. 09:43 ist dann setzt dir dieser Befehl dein now auf 08:57, nicht auf 09:40 🙂
                                  Richtig geht es so: now.setMinutes(now.getMinutes() - 3)

                                  Ohh, besten Dank,
                                  Wäre denn das z.B. Beispiel eine Stunde zurück?

                                          var now = new Date();
                                          now.setHours(-1);
                                  
                                  apollon77 F 2 Replies Last reply Reply Quote 0
                                  • apollon77
                                    apollon77 @ostseeskipper last edited by

                                    @ostseeskipper Naja nach gleiochem chema wie bei den Stunden:

                                    now.setHours(now.setHours() - 1)

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

                                      @ostseeskipper sagte in SQL getHistory Abfrage:

                                      Wäre denn das z.B. Beispiel eine Stunde zurück?

                                      nein, in meinem Beispiel mit now = 09:43 setzt dir der Befehl die Zeit auf 23:43 des Vortages.
                                      Abhilfe auch hier: now.setHours(now.getHours() - 1), apollon hat da noch einen typo drin.

                                      Bis Ende der Woche gibt es aktuelle Beispiele auch mit Erklärungen zu den Optionen, wobei das hier ja JS Grundkenntnisse betrifft und dort dann nicht näher behandelt wird. Ist aber alles kein Problem, dafür gibt es ja hier das Forum 🙂

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

                                        @fastfoot said in SQL getHistory Abfrage:

                                        nein, in meinem Beispiel mit now = 09:43 setzt dir der Befehl die Zeit auf 23:43 des Vortages.
                                        Abhilfe auch hier: now.setHours(now.getHours() - 1), apollon hat da noch einen typo drin.

                                        Bis Ende der Woche gibt es aktuelle Beispiele auch mit Erklärungen zu den Optionen, wobei das hier ja JS Grundkenntnisse betrifft und dort dann nicht näher behandelt wird. Ist aber alles kein Problem, dafür gibt es ja hier das Forum 🙂

                                        Jetzt bin ich völlig erschlagen.

                                                now.setHours(-1);
                                        

                                        steht auch in dem SQL Adapter Beispiel drin
                                        hatte echt gedacht und mich gefreut das es so einfach ist die Zeit von jetzt abzüglich einer Stunde zu definieren.
                                        @fastfoot Danke👍
                                        Ich werd es einfach probieren.

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

                                          Jetzt muss ich doch noch mal fragen.

                                          Das Scrpit sieht nun so aus.

                                          var pvwert=0;
                                          
                                          log("PV wert1: " + pvwert ,"info");
                                          
                                          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(now.getMinutes() - 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) {
                                                      let pvwert_1 = result.result[0].Wert
                                                      pvwert = result.result[0].Wert  // ?? Wirkungslos ??  Warum
                                                      log("PV wert2: " + pvwert_1 ,"info")
                                                  });
                                              }
                                          });
                                          log("PV wert3: " + pvwert ,"info");
                                          

                                          Habe am Anfang des JS Script pvwert definiert und will das in Zeile 13 übergeben, da ich den Wert im weiteren Scriptverlauf noch brauche.
                                          Scheinbar lässt es nichts aus der sendto raus.
                                          und wenn ich pvwert_1 ausserhalb der sendto aufrufe gibts ne Fehlermeldung.

                                          Edit: Was ich auch nicht verstehe warum wird die letzte Befehlszeile vor dem sendto ausgeführt

                                          20:21:12.047	info	javascript.0 (149) script.js.Logik.GleitDurchschnitt: PV wert1: 0
                                          20:21:12.048	info	javascript.0 (149) script.js.Logik.GleitDurchschnitt: PV wert3: 0
                                          20:21:12.048	info	javascript.0 (149) script.js.Logik.GleitDurchschnitt: registered 0 subscriptions and 0 schedules
                                          20:21:12.080	info	javascript.0 (149) script.js.Logik.GleitDurchschnitt: PV wert2: 3.5454545454545454
                                          
                                          F 1 Reply Last reply Reply Quote 0
                                          • F
                                            fastfoot @ostseeskipper last edited by

                                            @ostseeskipper sagte in SQL getHistory Abfrage:

                                            steht auch in dem SQL Adapter Beispiel drin

                                            da wird aber nicht behauptet, dass der Zeitraum 1 Std. sei 🙂 Aber ja, man unterstellt es. Wie gesagt überarbeite ich das gerade, es dauert aber noch etwas, da ich auch noch etwas zu den Optionen schreiben möchte und die Beispiele für alle dort genannten Datenbanken laufen sollen

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            888
                                            Online

                                            31.8k
                                            Users

                                            79.9k
                                            Topics

                                            1.3m
                                            Posts

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