Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Frage zu history adapter

    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

    Frage zu history adapter

    This topic has been deleted. Only users with topic management privileges can see it.
    • T
      Totte23 last edited by

      Hallo ich komme an einer Stelle nicht weiter.
      Ich möchte per History geloggte Daten (jede Mininute ein Log) auslesen und das Avarage über einen Zeitraum von einer Stunde bilden und diesen Avarage dann in einen Array schreiben der 16 Stunden vorhält und jede Stunden die Werte eine Position nach hinten schiebt.
      Ich bekomme aber die Fehlermeldung, dass ich den .val von der Result Funktion nicht auslesen kann => undefined...
      Kann mir jemand helfen?

      var Liste, i, end = Date.now();
      
      function listsRepeat(value, n) {
        var array = [];
        for (var i = 0; i < n; i++) {
          array[i] = value;
        }
        return array;
      }
      
      Liste = listsRepeat(0, 16);
      
      schedule("*/60 * * * *", async () => {
      sendTo('history.0', 'getHistory', {
          id: 'modbus.0.inputRegisters.30775_Wirkleistung_Gesamt.value',
          options: {
              start:      end - 3600000,
              end:        end,
              aggregate: 'average',
              ignoreNull: 0
          }
      }, function (result) {
          
          for (i = 0; i <= 14; i++) {
          Liste[(i)] = Liste[(i + 1)];
          }
          
          Liste[15] = result.result[0].val;
          setState('javascript.0.AWTRIX.BAR_PV', Liste);
      });
      });
      
      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @Totte23 last edited by paul53

        @totte23 sagte: aggregate: 'average',

        liefert nicht nur einen Mittelwert über die 60 Einträge. Man muss auch count: 1 einstellen.

                aggregate:  'average',
                count:      1,
                ignoreNull: 0
            }
        }, function (data) {
            Liste.shift();
            Liste.push(data.result[1].val);
        

        Eine Liste mit 16 Einträgen von 0 kann man so erzeugen und mit einer bereits existierenden Liste überschreiben:

        const idListe = 'javascript.0.AWTRIX.BAR_PV';
        
        var Liste = Array(16).fill(0);
        if(existsState(idListe) && getState(idListe).val) Liste = getState(idListe).val;
        
        T 2 Replies Last reply Reply Quote 0
        • T
          Totte23 @paul53 last edited by

          @paul53 Danke! Ich teste das später mal aus!

          1 Reply Last reply Reply Quote 0
          • T
            Totte23 @paul53 last edited by

            @paul53 Zu Testzwecken lasse ich aktuell jede Sekunde einen Wert loggen und bilde dann den Mittelwert je Minute.
            Ich habe den Code reduziert um erstmal die grundlegende Funktion zu testen.
            Leider kommt immer noch ein Fehler und ich habe keine Idee woran es liegt:

            var Liste = Array(16).fill(0), i, end = Date.now();
            
            schedule("* * * * *", async () => {
            sendTo('history.0', 'getHistory', {
                id: 'modbus.0.inputRegisters.30775_Wirkleistung_Gesamt.value',
                options: {
                    start:      end - 60000,
                    end:        end,
                    aggregate: 'average',
                    count:  1,
                    ignoreNull: 0
                }
            }, function (data) {
                Liste.shift();
                Liste.push(data.result[1].val);
                setState('javascript.0.AWTRIX.BAR_PV', Liste);
                
            });
            });
            

            Meldung aus dem Log dazu:

            States system pmessage io.messagebox.system.adapter.javascript.0 {"command":"getHistory","message":{"result":[],"step":60000,"error":null},"from":"system.adapter.history.0","callback":{"message":{"id":"modbus.0.inputRegisters.30775_Wirkleistung_Gesamt.value","options":{"start":1688561934479,"end":1688561994479,"aggregate":"average","count":1,"ignoreNull":0}},"id":791,"ack":true,"time":1688562060017},"_id":59371133} Cannot read properties of undefined (reading 'val')

            und:
            TypeError: Cannot read properties of undefined (reading 'val') at Object.cb (script.js.AWTRIX.bars:18:31) at change (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.ts:10970:45) at Immediate._onImmediate (/opt/iobroker/node_modules/@iobroker/db-states-redis/src/lib/states/statesInRedisClient.ts:379:37) at processImmediate (node:internal/timers:476:21)

            paul53 1 Reply Last reply Reply Quote 0
            • paul53
              paul53 @Totte23 last edited by paul53

              @totte23 sagte: "result":[]

              Wird der DP "modbus.0.inputRegisters.30775_Wirkleistung_Gesamt.value" mittels "history.0" aufgezeichnet? Das leere Array sieht nicht danach aus. Füge mal eine Log-Ausgabe ein:

              }, function (data) {
                  log(data.result);
              

              Bei mir spuckt das Log ein Array mit zwei Objekten aus:

              [{'ts':1688559256536,'val':78.6,'i':true},{'ts':1688561056536,'val':81.1}]
              
              T 1 Reply Last reply Reply Quote 0
              • T
                Totte23 @paul53 last edited by

                @paul53 said in Frage zu history adapter:

                log(data.result);

                sieht bei mir eigentlich ganz gesund aus....

                [{'ts':1688563452965,'val':412.7,'i':true},{'ts':1688563482965,'val':379.4},{'ts':1688563512965,'val':360.2,'i':true}]
                

                Viellecht irgendwo Tippfehler...

                paul53 1 Reply Last reply Reply Quote 0
                • paul53
                  paul53 @Totte23 last edited by

                  @totte23 sagte: sieht bei mir eigentlich ganz gesund aus...

                  Dann muss

                  data.result[1].val
                  

                  den Wert 379.4 liefern. Kann keinen Tippfehler erkennen.

                  T 1 Reply Last reply Reply Quote 0
                  • T
                    Totte23 @paul53 last edited by Totte23

                    @paul53 Läuft jetzt. Mir war aufgefallen, dass die "end" deklarierung noch außerhalb vom timer lag. Da kam dann natürlich über Laufzeit nichts sinnvolles bei rum. Mit diesem Code läuft es jetzt...

                    var Liste = Array(16).fill(0), i;
                    
                    schedule("* * * * *", async () => {
                    var  end = Date.now();
                    sendTo('history.0', 'getHistory', {
                        id: 'modbus.0.inputRegisters.30775_Wirkleistung_Gesamt',
                        options: {
                            start:      end - 60000,
                            end:        end,
                            aggregate: 'average',
                            count:  1,
                            ignoreNull: 0
                        }
                    }, function (data) {
                        Liste = getState('javascript.0.AWTRIX.BAR_PV').val;
                        Liste.shift();
                        Liste.push(data.result[1].val);
                        setState('javascript.0.AWTRIX.BAR_PV', Liste);
                    });
                    });
                    

                    Nochmals vielen Dank für den Support. Ohne dich hätte ich es nicht gelöst!

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

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    815
                    Online

                    31.9k
                    Users

                    80.1k
                    Topics

                    1.3m
                    Posts

                    2
                    8
                    350
                    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