das ist doch seltsam. aktuell aktiviert habe ich rrd4j, und folgende Anpassung im rrd4j.persist file vorgenommen:
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
}
Problem habe ich jetzt mit ganz anderen Items / Rules, nämlich der PV Leistung, Aktueller Verbrauch, Netz-Bezug und Netz-Einspeisung (jeweils eingefrorener Wert)
pv_anzeige_openhab.png
die zugehörige Sitemap:
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
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