NEWS
History Daten lesen und Durchschnitt bilden
-
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) });
-
@stoffel67 sagte: "avg" wird immer als NaN ausgegeben
avg
enthält nicht den Durchschnitt, sondern die Summe.
Vielleicht sind Einträge mit dem Wertnull
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.
-
@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 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
-
@homoran sagte: das sieht für mich komisch aus
Das ist eine verkürzte Schreibweise für
sum = sum + val;
-
@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)) {
-
@paul53
Jetzt bekomm‘ ich einen Wert, TOP
Vielen Dank an euch