Verwirrung rrd4j persistence

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
mors80
Beiträge: 8
Registriert: 6. Aug 2020 21:25
Answers: 0

Verwirrung rrd4j persistence

Beitrag von mors80 »

Hi,

ich bin gerade verwirrt, was die Persistenz in OH 4.0.3 angeht:
Standard mit rrd4j ist doch everyChange, everyMinute, restoreOnStartup, oder?

Daher sieht mein config file auch so aus:
Items {
* : strategy = everyChange, everyMinute
[...]
GrundpreisMonat : strategy = everyChange
}

Damit sollte für das Item GrundpreisMonat doch gelten: everyChange, everyMinute.
Das Item GrundpreisMonat wurde gerade neu angelegt, um auszuschließen, dass irgendwo eine rule dazwischen kommt. Nun ist es aber so, dass der über HabPanel geänderte Wert nach dem nächsten OH-Neustart wieder im HabPanel angezeigt wird.

Wo ist mein Denkfehler?

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

Re: Verwirrung rrd4j persistence

Beitrag von udo1toni »

Punkt 1: das Default Verhalten sollte restoreOnStartup nicht enthalten, schon weil ein restoreOnStartup mit großer Sicherheit nicht für alle Items wünschenswert ist, aber auch, weil es nur für numerische Items zuverlässig funktionieren wird.

Punkt 2: rrd4j setzt zwingend everyMinute als strategy voraus. Sobald Du diese Strategy abschaltest, funktioniert rrd4j nicht mehr, und da gibt es auch kein "aber...".

Hintergrund zu Punkt 2: rrd4j hat mehrere aufeinander aufbauende Speicher mit unterschiedlicher zeitlicher Auflösung. Die "beste" Auflösung beträgt (zumindest bei der Standard Konfiguration) 10 Sekunden. Man kann also nur alle 10 Sekunden einen Wert in die Datenbank schreiben, ohne den zuletzt geschriebenen Wert zu überschreiben. Ich habe die genaue Konfiguration nicht im Kopf, aber nehmen wir mal an, die nächst-gröbere Auflösung beträgt 10 Minuten. Dann nimmt rrd4j alle 10 Minuten alle Werte der feinsten Auflösung und errechnet deren Durchschnitt (unter Berücksichtigung der zeitlichen Abstände...). Dieser Durchschnittswert wird als neuer Wert in der 10-Minuten-Auflösung gespeichert und der älteste Wert der 10-Minuten-Auflösung wird gelöscht. Dies geschieht auch mit den anderen Stufen, jeweils als Quelle mit der nächst-feineren Stufe.
Als Konsequenz müssen aber zwingend genügend Daten vorhanden sein, um die Durchschnittsberechnung auszuführen. Deshalb ist everyMinute für diesen Persistence Service obligatorisch.

Woher Dein Item beim Neustart seinen alten Wert bekommt, ist damit natürlich nicht geklärt :)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

mors80
Beiträge: 8
Registriert: 6. Aug 2020 21:25
Answers: 0

Re: Verwirrung rrd4j persistence

Beitrag von mors80 »

Dass zwingend everyMinute gesetzt sein muss, war mir bewusst.
Die default strategy sieht auch so aus:
default = everyChange
Was mir Kopfschmerzen bereitet ist tatsächlich, dass das neue Item ohne strategy einfach mit dem letzten Wert wiederhergestellt wird.
Gibt es sonst noch irgendwo einen (allgemeinen) Wert, den ich verstellt haben könnte?

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

Re: Verwirrung rrd4j persistence

Beitrag von udo1toni »

mors80 hat geschrieben: 24. Jan 2024 20:13 Die default strategy sieht auch so aus:
default = everyChange
Wie kommst Du zu dieser Aussage?
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

mors80
Beiträge: 8
Registriert: 6. Aug 2020 21:25
Answers: 0

Re: Verwirrung rrd4j persistence

Beitrag von mors80 »

Falsch ausgedrückt: So steht es in meiner .persist:

// persistence strategies have a name and definition and are referred to in the "Items" section
Strategies {
everyHour : "0 0 * * * ?"
everyDay : "0 0 0 * * ?"
future : "0 0 12 1 1 ? 2047"
every10seconds : "*/10 * * * * ?"
every5seconds : "*/5 * * * * ?"

// if no strategy is specified for an Item entry below, the default list will be used
default = everyChange
}

mors80
Beiträge: 8
Registriert: 6. Aug 2020 21:25
Answers: 0

Re: Verwirrung rrd4j persistence

Beitrag von mors80 »

Oh man... hatte rrd4j UND jdbc für persitence aktiv... und dabei nur eine jdbc.persist-Datei. Somit wurde das neue Item nach rrd4j-Standard beim Hochfahren auf den letzten Wert gesetzt. Was wird denn dann bei z.B. <item>.deltaSince(ZonedDateTime) zurückgegeben? Der Wert aus rrd4j oder aus jdbc?

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

Re: Verwirrung rrd4j persistence

Beitrag von udo1toni »

ja, das ist dann eher ungünstig (weil für rrd4j völlig ungeeignet). Wie gesagt, everyMinute ist bei rrd4j nicht optional (Du kannst natürlich auch eine kürzere Zeitspanne nehmen, was aber fast sicher auch Quatsch ist).
Tatsächlich ist das sogar (etwas arg ungenau) aus der Dokumentation ersichtlich: https://www.openhab.org/addons/persiste ... rsist-file

Code: Alles auswählen

Strategies {
    // for rrd charts, we need a cron strategy
    everyMinute : "0 * * * * ?"
}

Items {
    // persist items on every change and every minute
    * : strategy = everyChange, everyMinute
}
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten