Ich habe einen eingegrenzt und gefunden:
Ein Timestamp des DP war weder True noch False
In 12 betrachteten Monaten ist das 2 mal vorgekommen.
Finale Version:
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!