Da ich den Wasserzähler nur stündlich bekomme reicht doch hier ein everyHour, und everyChange. Rechnen dann mit historicState( )
Es wäre ja sinnlos jede Minute denselben Wert zu speichern.
item Wert persistieren und automatisch laden beim Openhab3 Start
-
klaus1
- Beiträge: 116
- Registriert: 11. Jan 2022 13:48
- udo1toni
- Beiträge: 15622
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: item Wert persistieren und automatisch laden beim Openhab3 Start
Nein. Ich hab es oben erklärt, everyMinute ist - anders als bei allen anderen Persistence Services - nicht optional, es ist ZWINGEND.
Es spielt auch keine Rolle, es tut nicht weh, es erzeugt keinerlei Speicherprobleme (rrd4j ist statisch, was den Speicherverbrauch betrifft).
Möchtest Du, dass rrd4j funktioniert, dann belasse es bitte bei everyMinute.
Sobald Du weniger als einen Messwert pro Minute in die Datenbank schreibst, ist die Datenbank für das betreffende Item kaputt und lässt sich auch nicht mehr reparieren, d.h. Du musst dann die entsprechende Datei löschen, damit (mit everyMinute als Strategy) die Daten für Analyze wieder korrekt zur Verfügung stehen.
Das ist im Übrigen "schon immer" so, seit es Persistence in openHAB gibt, und diese Regel gilt auch für alle anderen Systeme, die rrd4j einsetzen (es sei denn, die zweite Stufe hat eine andere zeitliche Auflösung als minütlich, wie gesagt, rrd4j ist konfigurierbar)
Es spielt auch keine Rolle, es tut nicht weh, es erzeugt keinerlei Speicherprobleme (rrd4j ist statisch, was den Speicherverbrauch betrifft).
Möchtest Du, dass rrd4j funktioniert, dann belasse es bitte bei everyMinute.
Sobald Du weniger als einen Messwert pro Minute in die Datenbank schreibst, ist die Datenbank für das betreffende Item kaputt und lässt sich auch nicht mehr reparieren, d.h. Du musst dann die entsprechende Datei löschen, damit (mit everyMinute als Strategy) die Daten für Analyze wieder korrekt zur Verfügung stehen.
Das ist im Übrigen "schon immer" so, seit es Persistence in openHAB gibt, und diese Regel gilt auch für alle anderen Systeme, die rrd4j einsetzen (es sei denn, die zweite Stufe hat eine andere zeitliche Auflösung als minütlich, wie gesagt, rrd4j ist konfigurierbar)
openHAB5.1.2 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime - LXC, 4 Kerne, 3 GByte RAM)
Hostsystem Proxmox VE 9.1.5 - AMD Ryzen 5 3600 6 Kerne, 12 Threads - 64 GByte RAM - ZFS Pools: Raid Z1, 3 x 20 TB HDD -> 40 TByte und Raid Z0-Mirrored 4 x 1 TByte NVMe -> 2 TByte
Hostsystem Proxmox VE 9.1.5 - AMD Ryzen 5 3600 6 Kerne, 12 Threads - 64 GByte RAM - ZFS Pools: Raid Z1, 3 x 20 TB HDD -> 40 TByte und Raid Z0-Mirrored 4 x 1 TByte NVMe -> 2 TByte
-
klaus1
- Beiträge: 116
- Registriert: 11. Jan 2022 13:48
Re: item Wert persistieren und automatisch laden beim Openhab3 Start
Danke für die Hilfe!
Ich denke das war der Grund meiner Probleme vor Deaktivierung rrd4j. Habe nun alle rrd Files gelöscht und setze jetzt sauber das config File neu auf.
Muss ich sonst noch wo Daten bereinigen?
Danke
Ich denke das war der Grund meiner Probleme vor Deaktivierung rrd4j. Habe nun alle rrd Files gelöscht und setze jetzt sauber das config File neu auf.
Muss ich sonst noch wo Daten bereinigen?
Danke
- udo1toni
- Beiträge: 15622
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: item Wert persistieren und automatisch laden beim Openhab3 Start
Nein, die rrd Dateien zu löschen und rrd4j.persist korrekt zu konfigurieren sollte hinreichend sein.
openHAB5.1.2 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime - LXC, 4 Kerne, 3 GByte RAM)
Hostsystem Proxmox VE 9.1.5 - AMD Ryzen 5 3600 6 Kerne, 12 Threads - 64 GByte RAM - ZFS Pools: Raid Z1, 3 x 20 TB HDD -> 40 TByte und Raid Z0-Mirrored 4 x 1 TByte NVMe -> 2 TByte
Hostsystem Proxmox VE 9.1.5 - AMD Ryzen 5 3600 6 Kerne, 12 Threads - 64 GByte RAM - ZFS Pools: Raid Z1, 3 x 20 TB HDD -> 40 TByte und Raid Z0-Mirrored 4 x 1 TByte NVMe -> 2 TByte
-
klaus1
- Beiträge: 116
- Registriert: 11. Jan 2022 13:48
Re: item Wert persistieren und automatisch laden beim Openhab3 Start
das ist doch seltsam. aktuell aktiviert habe ich rrd4j, und folgende Anpassung im rrd4j.persist file vorgenommen:
Problem habe ich jetzt mit ganz anderen Items / Rules, nämlich der PV Leistung, Aktueller Verbrauch, Netz-Bezug und Netz-Einspeisung (jeweils eingefrorener Wert)
die zugehörige Sitemap:
und die rule (unangegriffen, und funktionsfähig vor rrd4j aktivierung!
Logging vollständig, da kommt sonst nichts mehr: (PV gegen SV usw. getauscht, da manche Schlüsselwerte vom log4j geblockt sind weil zu viele änderungen)
2026-02-12 13:02:54.441 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'pvcalculations.rules'
2026-02-12 13:02:58.780 [INFO ] [penhab.core.model.script.SOLAR_Rules] - Eingangswerte: PS1=2858.0 SV2=2909.5146484375 Smart=353.2
2026-02-12 13:02:58.797 [INFO ] [penhab.core.model.script.SOLAR_Rules] - Rundung SV: SV1=2858 SV2=2910 Total=5768
2026-02-12 13:06:14.303 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'pvcalculations.rules'
2026-02-12 13:06:18.311 [INFO ] [penhab.core.model.script.SOLAR_Rules] - Eingangswerte: PS1=3211.0 SV2=3317.31591796875 Smart=-123.7
2026-02-12 13:06:18.322 [INFO ] [penhab.core.model.script.SOLAR_Rules] - Rundung SV: SV1=3211 SV2=3317 Total=6528
danach kommen keine logs mehr von der rule... sieht so aus als ist das nur beim einspielen der Rule.. danach wird die rule nicht mehr getriggert...
Es läuft nur RRD4J lt. openhab4. aber ich denke das mir rrd4j die rules nicht mehr sauber triggert.
Wo ist das hier das Problem ?
openhab> bundle:list | grep -i persist
103 x Active x 80 x 2.16.0.v20190528-0725 x EMF XML/XMI Persistence
203 x Active x 80 x 4.3.6 x openHAB Core :: Bundles :: Model Persistence
204 x Active x 80 x 4.3.6 x openHAB Core :: Bundles :: Model Persistence IDE
205 x Active x 80 x 4.3.6 x openHAB Core :: Bundles :: Model Persistence Runtime
219 x Active x 80 x 4.3.6 x openHAB Core :: Bundles :: Persistence
339 x Active x 80 x 4.3.6 x openHAB Add-ons :: Bundles :: Persistence Service :: RRD4j
openhab>
Danke
Code: Alles auswählen
Strategies {
everyMinute : "0 * * * * ?" // sichert alle 60 Sekunden → verhindert Stufenprobleme in RRD
}
Items {
PV_Current, PV_Current_gen24, SMARTMETER_Current : strategy = everyChange, everyMinute
WasserZaehlerstand : strategy = everyChange, everyMinute
}
Code: Alles auswählen
Frame label="Photovoltaik 9.775 kWP - Symo" {
Text item=PV_Current label="PV Leistung: [%.0f W]" icon="none"
Text item=PV_Prozent label="PV Auslastung: [%.2f %%]" icon="none"
Text item=PV_DaySum label="PV Leistung Tag: [%.2f kWh]" icon="none"
Text item=PV_YearSum label="PV Leistung Jahr: [%.2f MWh]" icon="none"
Text item=PV_Total label="PV Leistung Total: [%.2f MWh]" icon="none"
}
Frame label="Photovoltaik 11.15 kWP - GEN24" {
Text item=PV_Current_gen24 label="PV Leistung: [%.0f W]" icon="none"
Text item=PV_Prozent_gen24 label="PV Auslastung: [%.2f %%]" icon="none"
Text item=PV_DaySum_gen24 label="PV Leistung Tag: [%.2f kWh]" icon="none"
Text item=PV_YearSum_gen24 label="PV Leistung Jahr: [%.2f MWh]" icon="none"
Text item=PV_Total_gen24 label="PV Leistung Total: [%.2f MWh]" icon="none"
}
Frame label="Photovoltaik 20.925 kWP - Gesamt" {
Text item=PV_Current_all label="PV Leistung: [%.0f W]" icon="none"
Text item=Verbrauch label="Aktueller Verbrauch: [%.2f W]" icon="none"
Text item=Bezug label="Netz-Bezug: [%.2f W]" icon="none"
Text item=Einspeisung label="Netz-Einspeisung: [%.2f W]" icon="none"
Text item=PV_DaySum_all label="PV Leistung Tag: [%.2f kWh]" icon="none"
Text item=SMARTMETER_Current label="Smartmeter: [%.2f W]" icon="none"
}
und die rule (unangegriffen, und funktionsfähig vor rrd4j aktivierung!
Code: Alles auswählen
rule "PV_Main_Calculation"
when
System started or
Item PV_Current changed or
Item PV_Current received update or
Item PV_Current_gen24 changed or
Item PV_Current_gen24 received update or
Item SMARTMETER_Current changed or
Item SMARTMETER_Current received update
then
try {
// -----------------------------
// Eingangswerte sauber lesen
// -----------------------------
val pv1 = if (PV_Current !== null && PV_Current.state instanceof Number) (PV_Current.state as Number).doubleValue else 0.0
val pv2 = if (PV_Current_gen24 !== null && PV_Current_gen24.state instanceof Number) (PV_Current_gen24.state as Number).doubleValue else 0.0
val smart = if (SMARTMETER_Current !== null && SMARTMETER_Current.state instanceof Number) (SMARTMETER_Current.state as Number).doubleValue else 0.0
logInfo("SOLAR_Rules", "Eingangswerte: PS1=" + pv1 + " SV2=" + pv2 + " Smart=" + smart)
// -----------------------------
// Runde PV Werte auf ganze Watt
// -----------------------------
val pv1Rounded = Math::round(pv1)
val pv2Rounded = Math::round(pv2)
val pvTotal = pv1Rounded + pv2Rounded
logInfo("SOLAR_Rules", "Rundung SV: SV1=" + pv1Rounded + " SV2=" + pv2Rounded + " Total=" + pvTotal)
// -----------------------------
// PV Gesamtleistung
// -----------------------------
if (PV_Current_all !== null) {
PV_Current_all.postUpdate(new DecimalType(pvTotal))
logInfo("SOLAR_Rules", "SV_Current_all aktualisiert: " + pvTotal)
} else {
logWarn("SOLAR_Rules", "PV_Current_all existiert nicht – Update übersprungen!")
}
// -----------------------------
// Auslastung Symo (9.775 kWp)
// -----------------------------
val percent1 = Math::round((pv1Rounded / 9775.0) * 100.0 * 100) / 100.0
if (PV_Prozent !== null) {
PV_Prozent.postUpdate(new DecimalType(percent1))
logInfo("SOLAR_Rules", "SV_Prozent aktualisiert: " + percent1)
}
// -----------------------------
// Auslastung GEN24 (11.15 kWp)
// -----------------------------
val percent2 = Math::round((pv2Rounded / 11150.0) * 100.0 * 100) / 100.0
if (PV_Prozent_gen24 !== null) {
PV_Prozent_gen24.postUpdate(new DecimalType(percent2))
logInfo("SOLAR_Rules", "SV_Prozent_gen24 aktualisiert: " + percent2)
}
// -----------------------------
// Netzbezug / Einspeisung
// -----------------------------
val smartRounded = Math::round(smart)
if (Bezug !== null && Einspeisung !== null) {
if (smartRounded > 0) {
Bezug.postUpdate(new DecimalType(smartRounded))
Einspeisung.postUpdate(new DecimalType(0))
} else {
Bezug.postUpdate(new DecimalType(0))
Einspeisung.postUpdate(new DecimalType(Math::abs(smartRounded)))
}
logInfo("SOLAR_Rules", "SBezug=" + Bezug.state + " SEinspeisung=" + Einspeisung.state)
}
// -----------------------------
// Verbrauch berechnen
// -----------------------------
val netzbezug = if (smartRounded > 0) smartRounded else 0
val verbrauchTotal = pvTotal + netzbezug
if (Verbrauch !== null) {
Verbrauch.postUpdate(new DecimalType(verbrauchTotal))
logInfo("SOLAR_Rules", "SVerbrauch aktualisiert: " + verbrauchTotal)
}
} catch (Exception e) {
logError("SOLAR_Rules", "Fehler in PV_Main_Calculation: " + e.toString)
}
end
2026-02-12 13:02:54.441 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'pvcalculations.rules'
2026-02-12 13:02:58.780 [INFO ] [penhab.core.model.script.SOLAR_Rules] - Eingangswerte: PS1=2858.0 SV2=2909.5146484375 Smart=353.2
2026-02-12 13:02:58.797 [INFO ] [penhab.core.model.script.SOLAR_Rules] - Rundung SV: SV1=2858 SV2=2910 Total=5768
2026-02-12 13:06:14.303 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'pvcalculations.rules'
2026-02-12 13:06:18.311 [INFO ] [penhab.core.model.script.SOLAR_Rules] - Eingangswerte: PS1=3211.0 SV2=3317.31591796875 Smart=-123.7
2026-02-12 13:06:18.322 [INFO ] [penhab.core.model.script.SOLAR_Rules] - Rundung SV: SV1=3211 SV2=3317 Total=6528
danach kommen keine logs mehr von der rule... sieht so aus als ist das nur beim einspielen der Rule.. danach wird die rule nicht mehr getriggert...
Es läuft nur RRD4J lt. openhab4. aber ich denke das mir rrd4j die rules nicht mehr sauber triggert.
Wo ist das hier das Problem ?
openhab> bundle:list | grep -i persist
103 x Active x 80 x 2.16.0.v20190528-0725 x EMF XML/XMI Persistence
203 x Active x 80 x 4.3.6 x openHAB Core :: Bundles :: Model Persistence
204 x Active x 80 x 4.3.6 x openHAB Core :: Bundles :: Model Persistence IDE
205 x Active x 80 x 4.3.6 x openHAB Core :: Bundles :: Model Persistence Runtime
219 x Active x 80 x 4.3.6 x openHAB Core :: Bundles :: Persistence
339 x Active x 80 x 4.3.6 x openHAB Add-ons :: Bundles :: Persistence Service :: RRD4j
openhab>
Danke
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
-
klaus1
- Beiträge: 116
- Registriert: 11. Jan 2022 13:48
Re: item Wert persistieren und automatisch laden beim Openhab3 Start
so meine rules klappen wieder, ich habe das everyChange bei allen Items entfernt die alle 2sec. upgedatet werden. dürfte wohl ein Performance Problem sein?
Code: Alles auswählen
Strategies {
everyMinute : "0 * * * * ?" // verhindert Stufenprobleme in RRD
}
Items {
PV_Current, PV_Current_gen24, SMARTMETER_Current : strategy = everyMinute
WasserZaehlerstand : strategy = everyChange, everyMinute
}