@paul53
Ich habe mich auch gerade damit beschäftigt und meine, dass da ein kleiner Fehler drinsteckt:
Es sollte heißen:
if(i + 1 < result.result.length) integral = integral + result.result[i].val * (result.result[i+1].ts - result.result[i].ts);
Mein Dank gebührt trotzdem @paul53. Ohne ihn hätte ich den Ansatz nicht gefunden!
Mein Code sieht komplett dann so aus (für die Nachwelt):
var end = Date.now();
sendTo('history.0', 'getHistory', {
id: 'mqtt.0.heizung.HzAnlage.Laststellung',
options: {
start: end - 86400000,
end: end,
aggregate: 'none'
}
}, function (result) {
var integral = 0;
console.log("Anzahl: "+result.result.length);
for (var i=0; i < result.result.length; i++) {
console.log(i+"---"+result.result[i].ts + "---"+ result.result[i].val);
}
// Test
for (var i=0; i < result.result.length; i++) {
// var zeitdiff = 0;
// zeitdiff = result.result[i+1].ts - result.result[i].ts;
// console.log(i+"--diff--" + zeitdiff);
if (i + 1 < result.result.length) {
integral = integral + ( result.result[i].val * (result.result[i+1].ts - result.result[i].ts) ) ;
} else {
integral = integral + result.result[i].val * (end - result.result[i].ts);
} // Else Ende
} // Schleifen Ende
var gesamtzeit = end - result.result[0].ts;
console.log("Gesamtzeit in sek: " + gesamtzeit/1000 + " = "+ gesamtzeit/(1000*60) + " min = " + gesamtzeit/(1000*60*60) + " h");
var mittelwert = integral / gesamtzeit;
console.log("Mittelwert: " + mittelwert);
// Hier Zuweisung an eine iobroker Variable
}); // function ende