Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. History Daten lesen und Durchschnitt bilden

    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

    History Daten lesen und Durchschnitt bilden

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      stoffel67 last edited by 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)
      });
      
      
      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @stoffel67 last edited by 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 Homoran 2 Replies Last reply Reply Quote 0
        • S
          stoffel67 @paul53 last edited by

          @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

          paul53 1 Reply Last reply Reply Quote 0
          • Homoran
            Homoran Global Moderator Administrators @paul53 last edited by

            @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

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

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

              Das ist eine verkürzte Schreibweise für

              sum = sum + val;
              
              1 Reply Last reply Reply Quote 1
              • paul53
                paul53 @stoffel67 last edited by 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 1 Reply Last reply Reply Quote 0
                • S
                  stoffel67 @paul53 last edited by

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

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

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  948
                  Online

                  31.9k
                  Users

                  80.2k
                  Topics

                  1.3m
                  Posts

                  javascript
                  3
                  7
                  344
                  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