@paul53, @Homoran
Kurzes Update:
async function erstelleUndLoggeTestDatenpunkt() {
const testDpId = '0_userdata.0.testVerlaufDp';
// Erstelle den Datenpunkt, falls er noch nicht existiert
const existiert = await existsStateAsync(testDpId);
if (!existiert) {
await createStateAsync(testDpId, 0, {
name: 'Test Verlauf Datenpunkt',
type: 'number',
role: 'state',
read: true,
write: true,
});
log(`Datenpunkt ${testDpId} wurde erstellt.`);
}
// Protokolliere einige Werte mit Zeitstempeln
const jetzt = Date.now();
await setStateAsync(testDpId, { val: 10, ack: false, ts: jetzt - 60000 }); // Protokolliere Wert 10 vor einer Minute
await setStateAsync(testDpId, { val: 20, ack: false, ts: jetzt - 30000 }); // Protokolliere Wert 20 vor dreißig Sekunden
await setStateAsync(testDpId, { val: 30, ack: true, ts: jetzt }); // Protokolliere Wert 30 jetzt
log('Rufe leseTestVerlauf auf...');
// Versuchen wir nun, den Verlauf dieses Datenpunkts abzurufen
await leseTestVerlauf(testDpId);
}
async function leseTestVerlauf(dpId) {
log('Testausgabe leseTestVerlauf');
const historyInstanz = 'history.0';
const jetzt = Date.now();
const startZeit = jetzt - 120000; // Lese Verlauf der letzten zwei Minuten
const endZeit = jetzt;
const optionen = {
start: startZeit,
end: endZeit,
aggregate: 'none',
addId: true,
returnNewestEntries: false,
};
log(`Versuche Verlauf für ${dpId} abzurufen...`);
log(`Sende an ${historyInstanz} 'getHistory' mit Optionen (verschachtelt): ${JSON.stringify({ id: dpId, options: optionen })}`);
try {
const verlaufsDaten = await sendToAsync(historyInstanz, 'getHistory', { id: dpId, options: { ...optionen } });
log(`Verlaufsdaten (raw) für ${dpId}: ${JSON.stringify(verlaufsDaten)}`);
if (verlaufsDaten && verlaufsDaten.result) {
log(`Verlaufsdaten für ${dpId}: ${JSON.stringify(verlaufsDaten.result)}`);
} else {
log(`Fehler beim Abrufen der Verlaufsdaten für ${dpId}: ${JSON.stringify(verlaufsDaten)}`, 'warn');
}
} catch (e) {
log(`Fehler beim Aufruf von getHistory für ${dpId}: ${e}`, 'error');
}
}
erstelleUndLoggeTestDatenpunkt();
Das Problem mit "Invalid call. No options for getHistory provided" ist gelöst! Der Schlüssel war, die Optionen für getHistory im sendToAsync-Aufruf unter der Eigenschaft options zu verschachteln. Dies funktioniert sowohl mit der direkten Übergabe des optionen-Objekts als auch mit dem Spread-Operator:
await sendToAsync(historyInstanz, 'getHistory', { id: dpId, options: optionen });
oder
await sendToAsync(historyInstanz, 'getHistory', { id: dpId, options: { ...optionen } });
Der History Adapter erwartet die Optionen in dieser Struktur. Die Abfrage funktioniert nun wie erwartet.
Als Nächstes werde ich nun mein ursprüngliches Skript anpassen, um die getHistory-Aufrufe entsprechend zu gestalten.
Danke für die Unterstützung!