Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Frage zu history adapter

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.0k

Frage zu history adapter

Geplant Angeheftet Gesperrt Verschoben JavaScript
8 Beiträge 2 Kommentatoren 586 Aufrufe 1 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • T Offline
    T Offline
    Totte23
    schrieb am zuletzt editiert von
    #1

    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);
    });
    });
    
    paul53P 1 Antwort Letzte Antwort
    0
    • T Totte23

      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);
      });
      });
      
      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #2

      @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;
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      T 2 Antworten Letzte Antwort
      0
      • paul53P 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 Offline
        T Offline
        Totte23
        schrieb am zuletzt editiert von
        #3

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

        1 Antwort Letzte Antwort
        0
        • paul53P 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 Offline
          T Offline
          Totte23
          schrieb am zuletzt editiert von
          #4

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

          paul53P 1 Antwort Letzte Antwort
          0
          • T Totte23

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

            paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von paul53
            #5

            @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}]
            

            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

            T 1 Antwort Letzte Antwort
            0
            • paul53P 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 Offline
              T Offline
              Totte23
              schrieb am zuletzt editiert von
              #6

              @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...

              paul53P 1 Antwort Letzte Antwort
              0
              • T Totte23

                @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...

                paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von
                #7

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

                Dann muss

                data.result[1].val
                

                den Wert 379.4 liefern. Kann keinen Tippfehler erkennen.

                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                T 1 Antwort Letzte Antwort
                0
                • paul53P paul53

                  @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 Offline
                  T Offline
                  Totte23
                  schrieb am zuletzt editiert von Totte23
                  #8

                  @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 Antwort Letzte Antwort
                  0
                  Antworten
                  • In einem neuen Thema antworten
                  Anmelden zum Antworten
                  • Älteste zuerst
                  • Neuste zuerst
                  • Meiste Stimmen


                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  647

                  Online

                  32.6k

                  Benutzer

                  82.0k

                  Themen

                  1.3m

                  Beiträge
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                  ioBroker Community 2014-2025
                  logo
                  • Anmelden

                  • Du hast noch kein Konto? Registrieren

                  • Anmelden oder registrieren, um zu suchen
                  • Erster Beitrag
                    Letzter Beitrag
                  0
                  • Home
                  • Aktuell
                  • Tags
                  • Ungelesen 0
                  • Kategorien
                  • Unreplied
                  • Beliebt
                  • GitHub
                  • Docu
                  • Hilfe