Seite 1 von 1

Update einer Number Variable

Verfasst: 6. Feb 2026 18:02
von klaus1
Ich kämpfe jetzt schon Stunden wegen folgendem Problem in openhab 4.3.6:
Sitemap:

Code: Alles auswählen

        
        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"    
Variablen:
Folgende rule:

Code: Alles auswählen

rule "current all safe"
when
    Item PV_Current changed or
    Item PV_Current_gen24 changed
then
    val pv1 = if (PV_Current.state != NULL && PV_Current.state != UNDEF) (PV_Current.state as Number).floatValue else 0
    val pv2 = if (PV_Current_gen24.state != NULL && PV_Current_gen24.state != UNDEF) (PV_Current_gen24.state as Number).floatValue else 0
    PV_Current_all.postUpdate(pv1 + pv2)
end

rule "verbrauch safe"
when
    Item SMARTMETER_Current changed or
    Item PV_Current changed or
    Item PV_Current_gen24 changed
then
    val sm = if (SMARTMETER_Current.state != NULL && SMARTMETER_Current.state != UNDEF) (SMARTMETER_Current.state as Number).floatValue else 0
    val pv1 = if (PV_Current.state != NULL && PV_Current.state != UNDEF) (PV_Current.state as Number).floatValue else 0
    val pv2 = if (PV_Current_gen24.state != NULL && PV_Current_gen24.state != UNDEF) (PV_Current_gen24.state as Number).floatValue else 0
    Verbrauch.postUpdate(sm + pv1 + pv2)
end
Variablendefinition im Backend:
label: PV_Current_all (Wert aktuell NULL)
type: Number:Power
category: ""
groupNames: []
tags:
- Point

label: Verbrauch (Wert aktuell NULL)
type: Number
category: ""
groupNames: []
tags: []

label: Bezug (Wert aktuell NULL)
type: Number
category: ""
groupNames: []
tags: []

label: PV_Current_gen24 (Wert aktuell 0W)
type: Number:Power
category: ""
groupNames: []
tags:
- Point

label: SMARTMETER_Current (wert aktuell 600W und ändert sich)
type: Number:Power
category: ""
groupNames: []
tags:
- Point

SMARTMETER_Current liefert im Backend laufen Werte vom Smartmeter.

Die anzeige in der sitemap sind daher immer mit - gekennzeichnet.
pv_bild.png
Ich bin am Ende. begonnen hat alles weil ich rrd4j installiert habe, die rrd files dann gehabt hab, und seitdem alles begonnen hat. hab dann rrd4j entfernt in den addons, die rrd files auch (kommen auch nicht nach).

Das hat jetzt jahrelang immer funktioniert. kann es mit der persistierung zusammenhängen?

Re: Update einer Number Variable

Verfasst: 6. Feb 2026 18:39
von klaus1
Verbrauch und Bezug kommen jetzt endlich richtig. PV_Current_all immer noch NULL:

Code: Alles auswählen

// ---------------------------
// Verbrauch safe
// ---------------------------
rule "verbrauch safe"
when
    Item SMARTMETER_Current changed or
    Item PV_Current changed or
    Item PV_Current_gen24 changed
then
    val sm = if (SMARTMETER_Current.state != NULL && SMARTMETER_Current.state != UNDEF) (SMARTMETER_Current.state as Number).floatValue else 0
    val pv1 = if (PV_Current.state != NULL && PV_Current.state != UNDEF) (PV_Current.state as Number).floatValue else 0
    val pv2 = if (PV_Current_gen24.state != NULL && PV_Current_gen24.state != UNDEF) (PV_Current_gen24.state as Number).floatValue else 0
    val total = sm + pv1 + pv2
    if (Verbrauch.state != total) {
        Verbrauch.postUpdate(total)
    }
end

// ---------------------------
// Bezug / Einspeisung safe
// ---------------------------
rule "einspeisungCalc safe"
when
    Item SMARTMETER_Current changed
then
    val smart = if (SMARTMETER_Current.state != NULL && SMARTMETER_Current.state != UNDEF) (SMARTMETER_Current.state as Number).floatValue else 0

    if (smart > 0) {
        if (Bezug.state != smart) Bezug.postUpdate(smart)
        if (Einspeisung.state != 0) Einspeisung.postUpdate(0)
    } else {
        if (Bezug.state != 0) Bezug.postUpdate(0)
        if (Einspeisung.state != -smart) Einspeisung.postUpdate(-smart)
    }
end

// ---------------------------
// PV Current all
// ---------------------------
rule "current all safe"
when
    Item PV_Current changed or
    Item PV_Current_gen24 changed
then
    val pv1 = if (PV_Current.state != NULL && PV_Current.state != UNDEF) (PV_Current.state as Number).floatValue else 0
    val pv2 = if (PV_Current_gen24.state != NULL && PV_Current_gen24.state != UNDEF) (PV_Current_gen24.state as Number).floatValue else 0
    val total = pv1 + pv2
    if (PV_Current_all.state != total) {
        PV_Current_all.postUpdate(total)
    }
end