@paul53
Ich habe einen eingegrenzt und gefunden:
fehler in den daten.PNG
Ein Timestamp des DP war weder True noch False 😲
In 12 betrachteten Monaten ist das 2 mal vorgekommen.
Finale Version:
09.03. script final.PNG
var ed, obj, result, lastValue, onTime, i, value, ts;
getHistory({
id: 'ID auswählen',
start: getDateObject('2025-09-01 00:00').getTime(),
end: getDateObject('2024-03-01 00:00').getTime(),
aggregate: 'none',
removeBorderValues: true,
}, async (err, result) => {
if (err) {
console.error(err);
} else {
ed = 0;
if (result.length > 0) {
((obj) => { if (typeof obj === 'object') { obj['val'] = false; } })((result.slice(-1)[0]));
obj = result[0];
lastValue = getAttr(obj, 'val');
if (lastValue) {
onTime = getAttr(obj, 'ts');
}
var i_end = result.length;
var i_inc = 1;
if (2 > i_end) {
i_inc = -i_inc;
}
for (i = 2; i_inc >= 0 ? i <= i_end : i >= i_end; i += i_inc) {
obj = result[(i - 1)];
value = getAttr(obj, 'val');
ts = getAttr(obj, 'ts');
if ((typeof value == 'boolean') && (typeof ts == 'number') && (value != lastValue)) {
lastValue = value;
if (value) {
onTime = ts;
} else {
ed = (typeof ed === 'number' ? ed : 0) + (ts - onTime);
}
}
}
}
console.info((Math.round(ed / 360000) / 10));
}
});
Für größere Zeiträume muss der Parameter limit von getHistory vergrößert werden.
Im Standard liest getHistory 2000 Timestamps für den Datenpunkt ein.
Die Erweiterung des Limits ist nicht im Skript darüber enthalten, sondern wurde im Objekt von getHistory eingetragen.
Das Skript funktioniert nun einwandfrei!
Ich möchte mich bei allen Herzlich bedanken für den Support!
Insbesondere bei @paul53 und @David-G ❤