Seite 3 von 4

Re: item Wert persistieren und automatisch laden beim Openhab3 Start

Verfasst: 15. Jan 2024 15:05
von klaus1
Modbus_Energy_Waermepumpe enthält Daten, (zähler für Wärmepumpe kWh sofern diese halt läuft wird erhöht liegt aktuell bei 511461 Datentyp Number).
Die Werte gibts seit 31.12.2023 (Da hab ich das Item reingehängt).
Modbus_Energy_Waremepumpe_DAILY ist ein Number:Power und hat NULL als Wert ?

Re: item Wert persistieren und automatisch laden beim Openhab3 Start

Verfasst: 15. Jan 2024 19:51
von udo1toni
Number:Power wäre ja ohnehin falsch, wenn, dann müsste es Number:Energy sein (z.B. kWh, nicht kW)
Die Frage ist, ob die Werte durchgängig in rrd4j vorliegen, damit die dort gefunden werden können. Die Meldung deutet ja darauf hin, dass kein Zeitstempel angegeben wurde, was aber nicht stimmt, deshalb war meine Hoffnung, dass vielleicht für den betreffenden Zeitpunkt keine Daten vorliegen und lediglich die Meldung etwas "unscharf" ist.

Re: item Wert persistieren und automatisch laden beim Openhab3 Start

Verfasst: 6. Feb 2026 22:30
von klaus1
Was empfiehlst du in openhab 4 für persistierung? Hatte Standard keine Ahnung was genau vermutlich json. Dann auf rrd4j gewechselt und massive Probleme mit meinen ca. 50.rules...
Aktuell habe ich gar nichts mehr persisitiert da ich mit items die ich einmal pro Stunde aktualisiert bekomme nie rechnen konnte in Rules ...

Re: item Wert persistieren und automatisch laden beim Openhab3 Start

Verfasst: 7. Feb 2026 03:44
von udo1toni
Default verwendet openHAB rrd4j. Wichtig bei rrd4j ist, dass Du zwingend(!) als Strategy everyMinute setzen musst. Und natürlich muss dieses Strategy auch definiert sein, als "0 * * * * ?" (die 0 kannst Du auch durch eine natürliche Zahl von 1 - 59 ersetzen, dann erfolgt das Persistieren nicht zur vollen Minute)
rrd4j ist statisch, die Dateigröße betreffend. Du musst Dir also keine Gedanken wegen "Platzverschwendung" machen.

Re: item Wert persistieren und automatisch laden beim Openhab3 Start

Verfasst: 7. Feb 2026 07:41
von klaus1
Ich möchte nur Zustände sichern und bei Neustart mit diesen arbeiten ohne mit regeln variablen setzen zu müssen wir when System Started..

ich hatte damals auch eine Persistierung aller items, ohne rrd files und ohne rrd4j addon.
Ich habe dann rrd4j im addon installiert, ein config file rrd4j.persist angelegt, und dann gabs probleme mit Variablen in Rules.
Ich möchte aber das ganze wieder aktivieren, alleine schon wegen den Neustarts.
Könntest du mir sagen welche Files ich wie einstellen sollte nach installation von rrd4j im backend? (Bin in OH 4.3.6 unterwegs).
danke,

Re: item Wert persistieren und automatisch laden beim Openhab3 Start

Verfasst: 7. Feb 2026 17:49
von udo1toni
klaus1 hat geschrieben: 7. Feb 2026 07:41 Ich hatte damals auch eine Persistierung aller items, ohne rrd files und ohne rrd4j addon.
Was heißt "damals"?
rrd4j persistierte seit OH3.0.0 als default Persistence ohne dass es explizit installiert oder eingerichtet war. Das war so, um die Analyze Funktion in der Main UI zur Verfügung zu stellen.
Es gab damals (auch von mir) Kritik dazu, weil es für den Anwendewr nicht ersichtlich war, dass rrd4j überhaupt installiert war, noch, wie es konfiguriert war.
Auch das Verhalten, dass Items überhaupt persistiert werden, ohne dass man etwas dazu eingerichtet hat, ist eher ungünstig. Hätte man die entsprechenden Konfigurationen einfach als Default sichtbar hinterlegt, dann wäre das transparent gewesen, so war es aber leider nicht.
klaus1 hat geschrieben: 7. Feb 2026 07:41 Ich möchte nur Zustände sichern und bei Neustart mit diesen arbeiten
Das geht am besten mit dem mapdb Addon.
MapDB kann nur einen einzigen Wert (pro Item) speichern, mitsamt der Zeitstempel des letzten Updates und der letzten Änderung. MapDB kann (im Unterschied zu rrd4j) auch mit Strings umgehen, was es ideal für restoreOnStartup macht.

Vorgehensweise:
Installiere das mapdb Addon.
Richte für alle Items, für die Du die Funktion benötigst als Strategy everyChange,restoreOnStartup ein. Falls Du Zeitstempel des letzten Updates haben möchtest, kannst Du statt everyChange auch everyUpdate setzen.

Seit openHAB4 sind diese Einstellungen auch über die Main UI erreichbar, Einstellungen -> Persistence-> Configure Policies...
Evtl. ist der Menüpunkt gewandert, ich habe gerade kein OH4 zur Hand :) aber zumindest in der Richtung müsste es liegen.

Du musst die default Persistence nicht ändern! (die bezieht sich einzig auf die Default Datenquelle, da ist rrd4j die bessere Wahl).
Du musst an der Konfiguration von rrd4j nichts ändern (höchstens zurück zur Konfiguration, bevor Du Experimente gestartet hast...)

Strategisch ist es sinnvoll, alle numerischen Items in rrd4j zu persistieren, es sei denn, Du legst auf die grafische Darstellung in openHAB (Analyze) keinen Wert, denn diese speist sich aus der Default Persistence (die deshalb unbedingt eine Historie aufweisen muss, anders als mapDB).
Weiterhin empfehle ich immer, sehr genau zu überlegen, wo die "beste" Quelle für einen Status ist. z.B. habe ich knx. knx liefert selbst beim Start die Status aller Items, sofern das korrekt konfiguriert ist -> kein restoreOnStartup.
Weiterhin habe ich verschiedene per mqtt angebundene Geräte, welche nach Anforderung ihren Status senden können -> kein restoreOnStartup, stattdessen eine Rule, welche per System started Trigger ausgelöst wird und eben diese Anforderung an alle Geräte schickt.
Aber ich habe auch Items, deren Status nirgends abrufbar ist, diese stelle ich dann mittels restoreOnStartup wieder her.
Es gilt aber immer daran zu denken, dass sich ein Status durchaus ändern kann, während openHAB gerade nicht gestartet ist. Dann ist so ein Status eventuell wertlos, ja, vielleicht sogar "gefährlich" (Zustand eines Melders wird als OK angenommen, obwohl der betreffende Kontakt beim Start von openHAB bereits auf Nicht OK stand)

Re: item Wert persistieren und automatisch laden beim Openhab3 Start

Verfasst: 7. Feb 2026 19:09
von klaus1
Ich bekomme per http addon alle 2sec. den Status der meisten Items. Ich würde nochmal rrd4j per addon im Backend installieren da auch Analyse von mir gerne verwendet wurde.
Wie muss die rrd4j.persist Datei aussehen?
Ist sonst noch eine config nötig? Ich meine irgend wo in einer Datei die Default persistence auf rrd4j zu stellen.
Danke
Klaus

Re: item Wert persistieren und automatisch laden beim Openhab3 Start

Verfasst: 8. Feb 2026 00:03
von udo1toni
Unter openHAB4 geht das, wie erwähnt auch direkt über die Main UI in den Einstellungen.
Alternativ kannst Du die passende Konfiguration auch über eine Textdatei vornehmen:
$OPENHAB_CONF/persistence/rrd4j.persist ($OPENHAB_CONF verweist gewöhnlich auf /etc/openhab/)

Code: Alles auswählen

// persistence strategies have a name and a definition and are referred to in the "Items" section
Strategies {
        // for rrd4j, we need a cron strategy everyMinute
        everyMinute    : "0 * * * * ?" // once a minute, on the minute
}
Items {
 * : strategy = everyMinute, everyChange
}
Wobei das * ohne irgendwas bedeutet: alle Items. Das ist aus verschiedenen Gründen suboptimal. Am besten definierst Du explizit, welche Items du persistieren willst, das geht entweder über die exakten (!) Itemnamen oder alternativ über die Gruppenzugehörigkeit.

Code: Alles auswählen

Items {
 MyItem1,MyItem2   : strategy = everyMinute, everyChange
 MyGroup* : strategy = everyMinute, everyUpdate
}
In der ersten Zeile werden exakt die beiden Items MyItem1 und MyItem2 für die Persistence konfiguriert, einmal pro Minute und bei jeder Änderung des Wertes.
In der zweiten Zeile werden die direkten Member der Gruppe MyGroup für die Persistence konfiguriert, einmal pro Minute und bei jedem Update.
Der Stern ist also kein Joker wie üblich, sondern das Kennzeichen, dass nicht der Status des Items selbst persistiert werden soll, sondern die Status der direkten Member. Falls das Group Item weitere Group Items enthält, wird dann deren Status gesichert, aber nicht der der nachfolgenden Member. Soll auch das Group Item selbst persistiert werden, so muss dieses ohne Stern am Ende als separates Item gelistet werden.

Unter openHAB4 sollte das Standard-Verhalten sein, dass ohne explizite Konfiguration einfach alle Items persistiert werden, was, wie erwähnt, nicht so gut ist.

Wo Du oben erwähnst, dass Du pro Item alle zwei Sekunden ein Update reinbekommst: Ähm, das ist keine gute Idee. :)
rrd4j ist eine Round-Robin Datenbank, das heißt, der älteste Wert wird vom jüngsten Wert überschrieben. Um dennoch größere Zeiträume erfassen zu können, geschieht das mehrstufig (die Stufen sind konfigurierbar), ungefähr so:
Maximal 10 Werte der letzten Minute, 60 minütliche Mittelwerte der letzten Stunde, 168 Stundenwerte, 52 Wochenwerte. Immer wenn ein großer Wert geschrieben werden muss, wird dieser aus dem Mittelwert des nächstkleineren Intervalls gebildet.
Wenn Du nun alle 2 Sekunden einen Wert schreibst, rrd4j aber nur 10 Werte pro Minute halten kann, bildet das System den Mittelwert über die letzten 20 Sekunden, damit sind dann alle anderen Werte mindestens verfälscht.
Außerdem kann es natürlich (bei genug Items...) zu Engpässen in der Verarbeitung kommen, das könnte auch zu Schreibfehlern in der Datenbank führen.

Re: item Wert persistieren und automatisch laden beim Openhab3 Start

Verfasst: 8. Feb 2026 08:09
von klaus1
90% meiner items bekommen alle 2sec ein Update aber meist denselben Wert außer er ändert sich auf der Steuerung.
Andere items wie Wasserzähler werden 1x pro Stunde abgetragen.
Wie könnte eine sinnvolle config aussehen?
Speziell wenn ich Woche, Tages und Monatswert des Zählers darstellen möchte?

ich würde jetzt mal als beispiel mit dem wasserzähler starten, der wird 1x pro stunde upgedatet vom system, damit ich rechnen kann (monats, tages, wochenwerte) brauch ich auch die 00:00 Uhr Daten. mein Versuch:

Code: Alles auswählen

Strategies {
    everyChange : "change"
    everyHour   : "0 0 * * * ?"
}

Items {

    // Absoluter Wasserzähler (m³)
    WasserZaehlerstand : strategy = everyChange, everyHour
}

Re: item Wert persistieren und automatisch laden beim Openhab3 Start

Verfasst: 8. Feb 2026 17:36
von udo1toni
Die Konfiguration für rrd4j beinhaltet zwingend(!!!) für jedes Item, welches persistiert werden soll everyMinute.
Wenn Du andere Persistence Services nutzt, kannst Du andere Zeiten verwenden, für rrd4j nicht, hier ist everyMinute fix.
Ich habe ja oben erklärt, wie rrd4j funktioniert, wenn Du nicht mindestens einen Wert pro Minute hast, können die übrigen Stufen nicht gefüllt werden.
Andersherum wenn Du viel zu viele Daten lieferst (alle 2 Sekunden) könnte das ebenfalls zu Problemen führen, allerdings eher in dem Sinne, dass die Messwerte nicht stimmen und (je nach Menge an Daten) das System insgesamt zu stark belastet wird.

Also

Code: Alles auswählen

Items {
 meineItems : strategy = everyMinute, everyChange
}
ist prima für Werte, die sehr häufig rein kommen aber nur ab und zu geändert werden (z.B. Temperaturmesswerte) und genauso für Werte, die nur selten überhaupt erfasst werden. everyMinute stellt sicher, dass die Daten mindestens einmal pro Minute gespeichert werden, everyChange sorgt dafür, dass (außerhalb des Minutenrasters) nur Werteänderungen geschrieben werden.

Bei den Messwerten die mit sehr hoher Frequenz ankommen, kann es sinnvoll sein, eine Mindeständerung vorzusehen, damit Schwankungen im letzten Bit nicht ständige Änderungen bedeuten. Das kannst Du über den Threshold beeinflussen (und es geschieht innerhalb der Persistence, d.h. der Wert im Item wird davon nicht beeinflusst)