LastUpdate eines Items in einer JS Rule ermitteln
Verfasst: 21. Jul 2024 11:45
Hallo zusammen,
Ich möchte den Zeitstempel des letzten Updates auf einem Item ermitteln.
Hintergrund sind ein paar Timingprobleme mit einer alten Fritzbox, die aber nicht auf OH zurückzuführen sind. Deshalb darf ich bestimmte Aktivitäten erst starten, wenn das letzte Update eine vorbestimmte Zeit zurückliegt. Soweit zum Grund.
Meine Rules sind in Javascript formuliert, das OH Release ist openHAB 4.2.0 und das ganze läuft auf einem PI3.
Als Persistenz verwende ich rrd4j.
Mein Testitem heißt "HK_Nachtabsenkung_Hamburg".
Dieses hat als "Direct Parent Groups" nur die Persistenz Gruppen "gruppe_persistenz_laden" und "gruppe_persistenz_on_update". Diese Gruppen folgendermaßen definiert:
Jetzt möchte ich in einer Rule abfrage, wann das Item das letzte Mal ein Update erfahren hat.
Dazu habe ich erst folgenden Ansatz:
Als Ergebnis erhalte ich "undefined".
Ich habe auch in den Dokus nicht mehr dazu gefunden.
Danach habe ich einen anderen Ansatz gefahren:
Hier erhalte ich nun einen Zeitstempel.
Allerdings zählt dieser Zeitstempel hoch, obwohl das Item nicht verändert wird, also weder ein Update, noch ein Change erfährt.
Hier ein Auszug aus dem Log:
Der Zeitstempel des LastUpdate wird offensichtlich 1x pro Minute hochgezählt.
Hat einer von Euch eine Idee wo mein Fehler liegt oder wie ich in JS den Zeitstempel des letzten Update korrekt auslesen kann?
Vielen Dank im Voraus!
Ich möchte den Zeitstempel des letzten Updates auf einem Item ermitteln.
Hintergrund sind ein paar Timingprobleme mit einer alten Fritzbox, die aber nicht auf OH zurückzuführen sind. Deshalb darf ich bestimmte Aktivitäten erst starten, wenn das letzte Update eine vorbestimmte Zeit zurückliegt. Soweit zum Grund.
Meine Rules sind in Javascript formuliert, das OH Release ist openHAB 4.2.0 und das ganze läuft auf einem PI3.
Als Persistenz verwende ich rrd4j.
Mein Testitem heißt "HK_Nachtabsenkung_Hamburg".
Dieses hat als "Direct Parent Groups" nur die Persistenz Gruppen "gruppe_persistenz_laden" und "gruppe_persistenz_on_update". Diese Gruppen folgendermaßen definiert:
Code: Alles auswählen
Strategies {
everyMinute : "0 * * * * ?"
}
Items {
gruppe_persistenz_laden* : strategy = restoreOnStartup
gruppe_persistenz_speichern* : strategy = everyMinute
gruppe_persistenz_on_update* : strategy = everyUpdate
gruppe_persistenz_on_change* : strategy = everyChange
}
Jetzt möchte ich in einer Rule abfrage, wann das Item das letzte Mal ein Update erfahren hat.
Dazu habe ich erst folgenden Ansatz:
Code: Alles auswählen
var item_Name = 'HK_Nachtabsenkung_Hamburg';
test = items.getItem(item_Name).lastUpdate;
Ich habe auch in den Dokus nicht mehr dazu gefunden.
Danach habe ich einen anderen Ansatz gefahren:
Code: Alles auswählen
// Bibliothek für das Auslesen des letzten Updates eines Items aus der Persistenz-Datenbank
// https://community.openhab.org/t/oh3-ecma-get-lastupdate-time-of-an-item/114068/5
var PersistenceExtensions = Java.type("org.openhab.core.persistence.extensions.PersistenceExtensions");
var PERSISTENCE_NAME = 'rrd4j'; // Systemname des Persistenz-Service
lastUpdate_Nachtabsenkung_time = parseInt(PersistenceExtensions.lastUpdate(items.getItem(item_Name), PERSISTENCE_NAME).toInstant());
Allerdings zählt dieser Zeitstempel hoch, obwohl das Item nicht verändert wird, also weder ein Update, noch ein Change erfährt.
Hier ein Auszug aus dem Log:
Code: Alles auswählen
2024-07-21 11:39:46.319 [INFO ] [org.openhab.rule.ModifyExpire ] - TestruleLetzte Änderung war am....................... : 1721554740000
2024-07-21 11:40:00.932 [INFO ] [org.openhab.rule.ModifyExpire ] - TestruleLetzte Änderung war am....................... : 1721554740000
2024-07-21 11:40:15.928 [INFO ] [org.openhab.rule.ModifyExpire ] - TestruleLetzte Änderung war am....................... : 1721554800000
2024-07-21 11:40:30.921 [INFO ] [org.openhab.rule.ModifyExpire ] - TestruleLetzte Änderung war am....................... : 1721554800000
2024-07-21 11:40:45.928 [INFO ] [org.openhab.rule.ModifyExpire ] - TestruleLetzte Änderung war am....................... : 1721554800000
2024-07-21 11:41:00.919 [INFO ] [org.openhab.rule.ModifyExpire ] - TestruleLetzte Änderung war am....................... : 1721554800000
2024-07-21 11:41:15.923 [INFO ] [org.openhab.rule.ModifyExpire ] - TestruleLetzte Änderung war am....................... : 1721554860000
2024-07-21 11:41:30.919 [INFO ] [org.openhab.rule.ModifyExpire ] - TestruleLetzte Änderung war am....................... : 1721554860000
2024-07-21 11:41:45.925 [INFO ] [org.openhab.rule.ModifyExpire ] - TestruleLetzte Änderung war am....................... : 1721554860000
2024-07-21 11:42:00.907 [INFO ] [org.openhab.rule.ModifyExpire ] - TestruleLetzte Änderung war am....................... : 1721554860000
2024-07-21 11:42:15.929 [INFO ] [org.openhab.rule.ModifyExpire ] - TestruleLetzte Änderung war am....................... : 1721554920000
2024-07-21 11:42:30.921 [INFO ] [org.openhab.rule.ModifyExpire ] - TestruleLetzte Änderung war am....................... : 1721554920000
2024-07-21 11:42:45.928 [INFO ] [org.openhab.rule.ModifyExpire ] - TestruleLetzte Änderung war am....................... : 1721554920000
2024-07-21 11:43:00.921 [INFO ] [org.openhab.rule.ModifyExpire ] - TestruleLetzte Änderung war am....................... : 1721554920000
2024-07-21 11:43:15.928 [INFO ] [org.openhab.rule.ModifyExpire ] - TestruleLetzte Änderung war am....................... : 1721554980000
Hat einer von Euch eine Idee wo mein Fehler liegt oder wie ich in JS den Zeitstempel des letzten Update korrekt auslesen kann?
Vielen Dank im Voraus!