Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • 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. History Daten lesen und Durchschnitt bilden

NEWS

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    6
    1
    216

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    8
    1
    216

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    890

History Daten lesen und Durchschnitt bilden

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascript
7 Beiträge 3 Kommentatoren 574 Aufrufe 1 Beobachtet
  • Ä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.
  • S Offline
    S Offline
    stoffel67
    schrieb am zuletzt editiert von stoffel67
    #1

    Hallo,
    ich steh' irgendwie auf dem Schlauch, was ist hier falsch
    "avg" wird immer als NaN ausgegeben😠 (Zeile 18 und 30)

    var maxW = 0
    var minW = 10000.0
    var maxi,mini 
    var avg =0.0;
    
    sendTo('history.0', 'getHistory', {
        id: 'javascript.0.VSM.LCur',
        options: {
            start:      Date.now()-24*3600*1000,
            end:       Date.now(),
            //count:     50,
            //aggregate: 'min',
            addId:     true
        }
    }, function (result) {
        avg=1.0;
        for (var i = 0; i < result.result.length; i++) {
            avg = avg + parseFloat(result.result[i].val);
            if ( parseFloat(result.result[i].val) > maxW  ) {
                maxW = result.result[i].val
                maxi=new Date(result.result[i].ts).toISOString()
            }
            if ( parseFloat(result.result[i].val) < minW  ) {
                minW = result.result[i].val
                mini=new Date(result.result[i].ts).toISOString()
            }        
            //console.log(result.result[i].val + ' '+ new Date(result.result[i].ts).toISOString());
        }
        console.log(maxi+'#'+maxW+'  '+mini+'#'+minW)
        console.log("AVG:"+avg)
    });
    
    

    Mein Adapter: JUNG/GIRA eNet-Adapter

    paul53P 1 Antwort Letzte Antwort
    0
    • S stoffel67

      Hallo,
      ich steh' irgendwie auf dem Schlauch, was ist hier falsch
      "avg" wird immer als NaN ausgegeben😠 (Zeile 18 und 30)

      var maxW = 0
      var minW = 10000.0
      var maxi,mini 
      var avg =0.0;
      
      sendTo('history.0', 'getHistory', {
          id: 'javascript.0.VSM.LCur',
          options: {
              start:      Date.now()-24*3600*1000,
              end:       Date.now(),
              //count:     50,
              //aggregate: 'min',
              addId:     true
          }
      }, function (result) {
          avg=1.0;
          for (var i = 0; i < result.result.length; i++) {
              avg = avg + parseFloat(result.result[i].val);
              if ( parseFloat(result.result[i].val) > maxW  ) {
                  maxW = result.result[i].val
                  maxi=new Date(result.result[i].ts).toISOString()
              }
              if ( parseFloat(result.result[i].val) < minW  ) {
                  minW = result.result[i].val
                  mini=new Date(result.result[i].ts).toISOString()
              }        
              //console.log(result.result[i].val + ' '+ new Date(result.result[i].ts).toISOString());
          }
          console.log(maxi+'#'+maxW+'  '+mini+'#'+minW)
          console.log("AVG:"+avg)
      });
      
      
      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #2

      @stoffel67 sagte: "avg" wird immer als NaN ausgegeben

      avg enthält nicht den Durchschnitt, sondern die Summe.
      Vielleicht sind Einträge mit dem Wert null enthalten? Dann sollten diese ausgefiltert werden. Etwa so:

      }, function (result) {
          let sum = 0;
          let cnt = 0;
          let maxW = 0;
          let minW = 10000;
          for (let i = 0; i < result.result.length; i++) {
              let val = parseFloat(result.result[i].val);
              if(!isNaN(val)) {
                  sum += val;
                  cnt++;
                  if(val > maxW) {
                      maxW = val;
                      maxi = result.result[i].ts;
                  }
                  if(val < minW) {
                      minW = val;
                      mini = result.result[i].ts;
                  }        
                  //console.log(val + ' '+ new Date(result.result[i].ts).toISOString());
              }
          }
          console.log(new Date(maxi).toISOString() + '#' + maxW + '  ' + new Date(mini).toISOString() +'#' + minW);
          console.log("AVG: " + sum / cnt);
      });
      

      EDIT: Prüfung in Zeile 8 geändert.

      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

      S HomoranH 2 Antworten Letzte Antwort
      0
      • paul53P paul53

        @stoffel67 sagte: "avg" wird immer als NaN ausgegeben

        avg enthält nicht den Durchschnitt, sondern die Summe.
        Vielleicht sind Einträge mit dem Wert null enthalten? Dann sollten diese ausgefiltert werden. Etwa so:

        }, function (result) {
            let sum = 0;
            let cnt = 0;
            let maxW = 0;
            let minW = 10000;
            for (let i = 0; i < result.result.length; i++) {
                let val = parseFloat(result.result[i].val);
                if(!isNaN(val)) {
                    sum += val;
                    cnt++;
                    if(val > maxW) {
                        maxW = val;
                        maxi = result.result[i].ts;
                    }
                    if(val < minW) {
                        minW = val;
                        mini = result.result[i].ts;
                    }        
                    //console.log(val + ' '+ new Date(result.result[i].ts).toISOString());
                }
            }
            console.log(new Date(maxi).toISOString() + '#' + maxW + '  ' + new Date(mini).toISOString() +'#' + minW);
            console.log("AVG: " + sum / cnt);
        });
        

        EDIT: Prüfung in Zeile 8 geändert.

        S Offline
        S Offline
        stoffel67
        schrieb am zuletzt editiert von
        #3

        @paul53 said in History Daten lesen und Durchschnitt bilden:

        function (result) { let sum = 0; let cnt = 0; let maxW = 0; let minW = 10000; for (let i = 0; i < result.result.length; i++) { let val = parseFloat(result.result[i].val); if(val != NaN) { sum += val; cnt++; if(val > maxW) { maxW = val; maxi = result.result[i].ts; } if(val < minW) { minW = val; mini = result.result[i].ts; } //console.log(val + ' '+ new Date(result.result[i].ts).toISOString()); } } console.log(new Date(maxi).toISOString() + '#' + maxW + ' ' + new Date(mini).toISOString() +'#' + minW); console.log("AVG: " + sum / cnt); });

        Leider gleiches Ergebnis, ( ja es ist richtig, es wird zuerst die Summe gebildet, aber das klappt ja nicht)
        avg ist immer noch NaN

        Mein Adapter: JUNG/GIRA eNet-Adapter

        paul53P 1 Antwort Letzte Antwort
        0
        • paul53P paul53

          @stoffel67 sagte: "avg" wird immer als NaN ausgegeben

          avg enthält nicht den Durchschnitt, sondern die Summe.
          Vielleicht sind Einträge mit dem Wert null enthalten? Dann sollten diese ausgefiltert werden. Etwa so:

          }, function (result) {
              let sum = 0;
              let cnt = 0;
              let maxW = 0;
              let minW = 10000;
              for (let i = 0; i < result.result.length; i++) {
                  let val = parseFloat(result.result[i].val);
                  if(!isNaN(val)) {
                      sum += val;
                      cnt++;
                      if(val > maxW) {
                          maxW = val;
                          maxi = result.result[i].ts;
                      }
                      if(val < minW) {
                          minW = val;
                          mini = result.result[i].ts;
                      }        
                      //console.log(val + ' '+ new Date(result.result[i].ts).toISOString());
                  }
              }
              console.log(new Date(maxi).toISOString() + '#' + maxW + '  ' + new Date(mini).toISOString() +'#' + minW);
              console.log("AVG: " + sum / cnt);
          });
          

          EDIT: Prüfung in Zeile 8 geändert.

          HomoranH Nicht stören
          HomoranH Nicht stören
          Homoran
          Global Moderator Administrators
          schrieb am zuletzt editiert von
          #4

          @paul53 sagte in History Daten lesen und Durchschnitt bilden:

          sum += val;

          nicht dass ich wüsste was ich tue, aber das sieht für mich komisch aus

          kein Support per PN! - Fragen im Forum stellen -
          Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
          Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
          der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

          paul53P 1 Antwort Letzte Antwort
          0
          • HomoranH Homoran

            @paul53 sagte in History Daten lesen und Durchschnitt bilden:

            sum += val;

            nicht dass ich wüsste was ich tue, aber das sieht für mich komisch aus

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

            @homoran sagte: das sieht für mich komisch aus

            Das ist eine verkürzte Schreibweise für

            sum = sum + 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

            1 Antwort Letzte Antwort
            1
            • S stoffel67

              @paul53 said in History Daten lesen und Durchschnitt bilden:

              function (result) { let sum = 0; let cnt = 0; let maxW = 0; let minW = 10000; for (let i = 0; i < result.result.length; i++) { let val = parseFloat(result.result[i].val); if(val != NaN) { sum += val; cnt++; if(val > maxW) { maxW = val; maxi = result.result[i].ts; } if(val < minW) { minW = val; mini = result.result[i].ts; } //console.log(val + ' '+ new Date(result.result[i].ts).toISOString()); } } console.log(new Date(maxi).toISOString() + '#' + maxW + ' ' + new Date(mini).toISOString() +'#' + minW); console.log("AVG: " + sum / cnt); });

              Leider gleiches Ergebnis, ( ja es ist richtig, es wird zuerst die Summe gebildet, aber das klappt ja nicht)
              avg ist immer noch NaN

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

              @stoffel67 sagte: avg ist immer noch NaN

              Das sollte durch die Prüfung in Zeile 8 verhindert werden.

              EDIT: Habe gerade getestet: Ein Vergleich mit NaN funktioniert nicht. Ändere die Prüfung:

                      if(!isNaN(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

              S 1 Antwort Letzte Antwort
              0
              • paul53P paul53

                @stoffel67 sagte: avg ist immer noch NaN

                Das sollte durch die Prüfung in Zeile 8 verhindert werden.

                EDIT: Habe gerade getestet: Ein Vergleich mit NaN funktioniert nicht. Ändere die Prüfung:

                        if(!isNaN(val)) {
                
                S Offline
                S Offline
                stoffel67
                schrieb am zuletzt editiert von
                #7

                @paul53
                Jetzt bekomm‘ ich einen Wert, TOP
                Vielen Dank an euch 🙏

                Mein Adapter: JUNG/GIRA eNet-Adapter

                1 Antwort Letzte Antwort
                0

                Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                Registrieren Anmelden
                Antworten
                • In einem neuen Thema antworten
                Anmelden zum Antworten
                • Älteste zuerst
                • Neuste zuerst
                • Meiste Stimmen


                Support us

                ioBroker
                Community Adapters
                Donate

                471

                Online

                32.8k

                Benutzer

                82.8k

                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