NEWS
Das Alter von Datenpunkten überprüfen
-
Hallo,
ich möchte etwas in Abhängigkeit von 2 Sensorwerten schalten, muss aber sicher sein, dass sie nicht älter als 3 h sind. Es handelt sich einmal um die zu erwartende Wolkendichte um eine bestimmte Zeit von "DasWetter" und zum Anderen um einen in OWFS eingebundenen Temperatursensor.Ich habe überlegt, die Zeitstempel werden ja in Unixzeit in Milisekunden ausgegeben. Wenn man also von der aktuellen Zeit als Datum-Objekt den Zeitstempel des Sensors abzieht und durch 60000 teilt, erhält man das Alter in Minuten. Das kann man vergleichen, ob der Wert noch "jung" genug ist, um ihn zu verwenden.
Würdet ihr das auch so machen, oder gibt es da clevere Lösungen?
Viele Grüße -
Ich mache das auch so ähnlich und nutze folgende Funktion hierfür:
/** * Vor wie vielen Sekunden wurde ein State aktualisiert? * Per Default wird der Timestamp genommen. Durch Setzen von what auf 'lc' wird die letzte Änderung genommen. * @param {string} stateId Id zum State, z.B. 'fullybrowser.0.192_168_0_10.isFullyAlive' * @param {string} [what='ts'] Optional. 'ts' für timestamp (= Default), lc für lastchanged. * @return {number} Vergangene Anzahl an Sekunden, als der State zuletzt aktualisiert wurde */ function stateLastUpdated(stateId, what) { if (what === undefined) what = 'ts'; if(what !== 'ts' && what !== 'lc') what = 'ts'; let dtNow = new Date(); let tsNow = dtNow.getTime(); let dtCheck = new Date(getState(stateId)[what]); let tsCheck = dtCheck.getTime(); return Math.round((tsNow - tsCheck) / 1000); // Zeitdifferenz in Sekunden }
Quelle: https://forum.iobroker.net/topic/24179/vorlage-hilfreiche-javascript-funktionen