Einschlatzeiten pro Zeiteinheit auswerten

Allgemeine Fragen zum Thema "Smart Home" und Entscheidungshilfen

Moderator: seppy

Antworten
yustbeyourself
Beiträge: 9
Registriert: 28. Dez 2019 01:24

Einschlatzeiten pro Zeiteinheit auswerten

Beitrag von yustbeyourself »

Hi,
gibt es eine möglichkeit auswertungen von schaltzuständen in abhängigkeit von zeitabschnitten zu machen. und diese dann in einer rule darauf zu reagieren.

Auswertung BINÄRER werte:
ich möchte wissen wie lange heute das Fenster bereits geöffnet war (wurde schon gelüftet) egal in wievielen zeitabschnitten?
wie lange war der längste zeitraum wo das fenster ununterbrochen geöffnet war?

Auswertung ANALOGER werte:
ich habe die leistung die ein gerät aktuell verbraucht, diese wird geloggt (ich sehe die kurve in der analyse)
wie kann ich abfragen wie viel kwh z.b eine gerät verbraucht hat in der zeit von XX.XX.XXXX XX:XX bis YY.YY.YYYY YY:YY. Mann müste ja die fläche der kurfe ausrechnen?

Benutzeravatar
udo1toni
Beiträge: 13729
Registriert: 11. Apr 2018 18:05
Answers: 221
Wohnort: Darmstadt

Re: Einschlatzeiten pro Zeiteinheit auswerten

Beitrag von udo1toni »

Also, möglich ist beides, aber eben auch nicht ganz einfach.

Binärer Zustand: meine Herangehensweise wäre, dafür zu sorgen, dass die Zustände als 1 und 0 vorliegen - also meinetwegen Fenster offen = 1, Fenster geschlossen = 0.
Der Zustand wird nun persistiert, und zwar am besten mit rrd4j und der Strategy everyMinute (die ist ohnehin zwingend).
Jetzt kann ich für einen beliebigen Zeitraum den Durchschnittswert auslesen, z.B.

Code: Alles auswählen

val dtStart = now.with(LocalTime.MIDNIGHT)
val dtEnd = now
val nDauer=Duration.between(dtStart,dtEnd).toMinutes
val nPercent = Fenster.avarageBetween(dtStart,dtEnd)
val nMinutes = nPercent * nDauer
logInfo("dauer","von {} bis {} ({} Minuten) war das Fenster {} % ({} Minuten) geöffnet.", dtStart, dtEnd, nDauer, nPercent, nMinutes)
Code ungetestet :) aber in der Theorie sollte das gehen. Der Wert ist natürlich nur angenähert.
Alternativ, da der Wert im Beispiel minütlich als 1 oder 0 gespeichert wird, könnte man auch alle Werte im Zeitraum einfach summieren:

Code: Alles auswählen

val nMinutes = Fenster.sumBetween(dtStart,dtEnd)
Man könnte auch eine Art "Betriebsstundenzähler" realisieren, der streng monoton wachsend die Öffnungsdauer aufsummiert, dann kann man mittels

Code: Alles auswählen

val nMinutes = Fenster.deltaBetween(dtStart,dtEnd)
bestimmen, wie die Differenz der beiden Werte lautet. Allerdings wird man vermutlich immer einen gültigen Bezugswert zu Beginn und Ende des Zeitraumes benötigen.

Schwieriger wird es bei der Energiemenge, wie Du schon richtig erkannt hast, müsste man das Integral der Leistung über die Zeit bestimmen. Mit vermutlich ordentlich Abweichung sollte aber auch hier ein Durchschnittswert helfen, wie schon mit dem "digitalen" Zustand, nur jetzt mit Durchschnittsleistung mal Zeit.
Wie hoch die Abweichung vom Realwert tatsächlich ist, kommt wohl vor allem darauf an, wie dynamisch die Leistung entnommen wird. rrd4j berechnet seine Durchschnittswerte tatsächlich unter Berücksichtigung der Zeitabschnitte, so dass die Werte auch mit einer Strategy everyMinute, everyChange näherungsweise korrekt sein sollten.
openHAB4.1.1 stable in einem Debian-Container (bookworm) (Proxmox 8.1.4, LXC), mit openHABian eingerichtet

Antworten