Na, wieso komplex? Falls Du kein MySQL nutzen willst, kannst Du natürlich auch auf andere Persistence Services ausweichen. rrd4j ist schon eingebaut, es wird halt nur nicht richtig funktionieren, weil rrd4j die Messwerte mittelt, womit dann sumSince als Funktion nur für kurze Zeiträume funktioniert. Ich fürchte, eine Woche wird da nicht zuverlässig funktionieren (wobei... Versuch macht kluch, oder so).
Was Du natürlich auch machen kannst, ist, den Wert "manuell" aufzusummieren, das wäre dann eine Rule, die Montag z.B. um 6 Uhr das Zähler-Item auf 0 setzt, anschließend wird bei jedem Ausschalten die aktuelle Einschaltdauer zum aktuellen Stand addiert. Dann musst Du nur mit mapDB persistieren, damit das Zähler-Item bei einem Neustart seinen Wert behält (wobei der Neustart bei eingeschaltetem Gerät zu vermeiden ist, denn beim Neustart geht die Einschaltzeit verloren, es kann also dann für diesen Einschaltzeitraum keine Dauer angegeben werden). Das sähe so aus:
Code: Alles auswählen
// globale Variablen werden vor der ersten Rule definiert
var Long lStart = null
rule "IPhoneOnlineZeit"
when
Item IPhonePower changed
then
var Number nDauer = null
if(IPhonePower.state == ON)
lStart = now.toInstant().toEpochMilli()
else {
nDauer = ((now.toInstant().toEpochMilli() - lStart)/1000).intValue
IPhoneDauer.postUpdate(nDauer + if(IPhoneDauer.state instanceof Number) (IPhoneDauer.state as Number) else 0)
}
end
rule "Reset iPhoneDauer"
when
Time cron "0 0 6 ? * MON" // Montags um 06:00:00 Uhr
then
iPhoneDauer.postUpdate(0)
end
Nun wird also die Laufzeit jeweils am Ende aufaddiert und Montags um 6 Uhr wird das Item genullt.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet