matze.lingen hat geschrieben: ↑9. Feb 2021 10:59
Wenn das System neu startet, dann wird doch der Total Count genullt was mache ich den in dem Fall?
Ah, das ist natürlich suboptimal. Da müsste man mal etwas drüber nachdenken...
So auf die Schnelle: lege eine Rule an, die bei jedem change triggert. Sende dann die Differenz alter/neuer Zählstand an ein Proxy Item, welches mit everyUpdate persistiert ist. Der Verbrauch ergibt sich dann aus Item.sumSince(now.withTimeAtStartOfDay).
Du legst nun also ein Item Zaehlpulse an
Code: Alles auswählen
rule "Impulse zählen"
when
Item Total changed
then
if(!(previousState instanceof Number)) // Item war leer -> Abbbruch
return;
var diff = newState - previousState // Anzahl Impulse seit letztem Update
if(newState < previousState) // Falls der Zähler genullt wurde
diff = newState // stattdessen direkt den neuen Wert nehmen
Zaehlpulse.postUpdate(diff) // in der Persistence speichern
Thread::sleep(300) // ein wenig warten
Tagesverbrauch.postUpdate(Zaehlpulse.sumSince(now.withTimeAtStartOfDay)) // Tagesverbrauch auslesen
end
Jedes Mal, wenn sich Total ändert, errechnet die Rule die Differenz zwischen dem letzten und dem aktuellen Wert. Falls der alte Wert größer als der neue Wert ist, wurde der NodeMCU zwischendurch neu gestartet, dann muss also statt der Differenz einfach der neue Wert genommen werden.
Falls kein gültiger alter Wert vorhanden ist, wurde openHAB neu gestartet und das Item Total musste erst initialisiert werden. Entsprechend darf der Wert nicht aktualisiert werden und die Rule bricht ab.
Ansonsten wird die Differenz in das Proxy Item geschrieben, welches persistiert wird. Nach einer kleinen Pause, damit die Persistence Zeit hatte, ihre Arbeit zu erledigen, wird der neue Verbrauch ausgelesen und ins entsprechende Item geschrieben.