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. History Daten lesen und Durchschnitt bilden

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

History Daten lesen und Durchschnitt bilden

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascript
7 Beiträge 3 Kommentatoren 539 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.
  • 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:angry: (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:angry: (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 - es gibt fast nichts, was nicht auch für andere interessant ist.

          Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

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


                Support us

                ioBroker
                Community Adapters
                Donate

                661

                Online

                32.6k

                Benutzer

                82.2k

                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