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?
Verwirrung rrd4j persistence
- udo1toni
- Beiträge: 15243
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Verwirrung rrd4j persistence
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
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
-
- Beiträge: 8
- Registriert: 6. Aug 2020 21:25
Re: Verwirrung rrd4j persistence
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?
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?
- udo1toni
- Beiträge: 15243
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Verwirrung rrd4j persistence
Wie kommst Du zu dieser Aussage?
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 8
- Registriert: 6. Aug 2020 21:25
Re: Verwirrung rrd4j persistence
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
}
// 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
}
-
- Beiträge: 8
- Registriert: 6. Aug 2020 21:25
Re: Verwirrung rrd4j persistence
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?
- udo1toni
- Beiträge: 15243
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Verwirrung rrd4j persistence
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
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