PV Auswertung - The argument 'state' must not be null.

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
bohnehouse
Beiträge: 17
Registriert: 3. Okt 2020 12:30
Answers: 0

PV Auswertung - The argument 'state' must not be null.

Beitrag von bohnehouse »

Guten Morgen zusammen,

ich hänge mal wieder an einem Problem und komme hier nicht weiter....
Habe mein PV-Panel auf dem Balkon über einen Shelly angeschlossen und möchte nun den Ertrag (Gesamt und pro Tag) auswerten.


Folgende Rules habe ich dazu implementiert:

Code: Alles auswählen

//Berechnung PV Ertrag gesamt
rule "EM PV Ertrag gesamt"
when
    Time cron "0 0/5 * * * ?"       //every 5 minutes   
then
    EM_SumProducedTotal.postUpdate(PV_ShellyGesamtproduktion.state as DecimalType)
end


//Berechnung PV-Ertrag heute
rule "EM PV Ertrag heute"
when
    Time cron "0 0/5 * * * ?"       //every 5 minutes
then
    logInfo("Energieverbrauch.rules", "EM PV Ertrag heute")
    EM_SumProducedToday.postUpdate(PV_ShellyGesamtproduktion.deltaSince(ZonedDateTime.now().with(LocalTime.MIDNIGHT)))
end
Leider bekomme ich folgende Fehlermeldung:
2021-06-12 09:50:00.711 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'Energieverbrauch-5' failed: The argument 'state' must not be null. in Energieverbrauch

Jemand eine Idee / Lösungsvorschlag, was ich hier falsch gemacht habe?

Benutzeravatar
udo1toni
Beiträge: 15269
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: PV Auswertung - The argument 'state' must not be null.

Beitrag von udo1toni »

Warum überhaupt zwei Rules, wo doch beide mit dem gleichen Trigger auslösen?
Falls der aktuelle Wert nicht gelesen werden kann, knallt's. Entsprechend musst Du das in der Rule abfangen, z.B. so:

Code: Alles auswählen

//Berechnung PV Ertrag gesamt
rule "EM PV Ertrag"
when
    Time cron "0 0/5 * * * ?"       //every 5 minutes   
then
    if(!(PV_ShellyGesamtproduktion.state instanceof Number))
        return;
    EM_SumProducedTotal.postUpdate(PV_ShellyGesamtproduktion.state as Number)
    val nWert = PV_ShellyGesamtproduktion.deltaSince(ZonedDateTime.now().with(LocalTime.MIDNIGHT))
    logInfo("Energieverbrauch", "EM PV Ertrag heute {}",nWert)
    if(nWert !== null)
        EM_SumProducedToday.postUpdate(nWert)
end
Falls PV_ShellyGesamtproduktion.state keinen gültigen Wert enthält, wird die Rule abgebrochen. Besser kein Wert als Fehler im Log.
Ist alles in Ordnung, so wird der Wert ins andere Item kopiert (Warum eigentlich? Der WErt steht doch schon im Originalitem zur Verfügung?
Anschließend wird noch die Differenz zum Wert um Mitternacht in die Konstante nWert geschrieben. Da nWert vom Typ void ist, wird es da nicht knallen.
Der Wert von nWert wird geloggt, und falls der Wert nicht null ist ins 2. Item geschrieben.
Im Log solltest Du so sehen können, wenn die Differenz nicht korrekt gelesen werden konnte (ohne die hässliche NullPointer Exception)
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Antworten