Rule funktioniert nicht mehr seit Update auf Rel:4.3.6

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Benutzeravatar
peter-pan
Beiträge: 2788
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Rule funktioniert nicht mehr seit Update auf Rel:4.3.6

Beitrag von peter-pan »

Ich habe seit dem Upgrade auf Version OH 4.3.6 eine Fehlermeldung im Log, die ich seither nicht hatte.

Code: Alles auswählen

2025-07-18 11:00:00.565 [ERROR] [.handler.AbstractScriptModuleHandler] - Script execution of rule with UID 'persistence_hichi-1' failed: The argument 'state' must not be null. in persistence_hichi
Die DSL-Regel:

Code: Alles auswählen

rule "persistence Stromzähler"

when
    Item Dummy_pers_9 changed from OFF to ON or
    Time cron "0 0 0/1 1/1 * ? *" 

then

   val VerbrauchTag          = esp32c3_01_total_in.deltaSince(ZonedDateTime.now().with(LocalTime.MIDNIGHT)) as Number                        // Heute aus Gesamtverbrauch
   val VerbrauchVortag       = esp32c3_01_total_in.deltaBetween(now.minusDays(1).with(LocalTime.MIN),now.minusDays(1).with(LocalTime.MAX))   // gestern
   val VerbrauchMonat        = esp32c3_01_total_in.deltaSince(now.withDayOfMonth(1).with(LocalTime.MIDNIGHT))                                // Monat

       esp32c3_01_cfPY.postUpdate(5053.0)             // Vortragswert per 15.5.24
       esp32c3_01_carryforwardini.postUpdate(8138.0)  // Vortragswert per 15.5.25

   var VerbrauchJahr         = (esp32c3_01_total_in.state as QuantityType<Energy> - esp32c3_01_carryforwardini.state as QuantityType<Energy>)     // Jahr  - hilfsweise  ;-)
   var VerbrauchVorJahr      = (esp32c3_01_carryforwardini.state as QuantityType<Energy> - esp32c3_01_cfPY.state as QuantityType<Energy>)         // Vorjahr - rechnerisch
   val VerbrauchVorMonat     = esp32c3_01_total_in.deltaBetween(ZonedDateTime.now.minusMonths(1).withDayOfMonth(1).with(LocalTime.MIDNIGHT), ZonedDateTime.now.withDayOfMonth(1).with(LocalTime.MIDNIGHT).minusSeconds(1))  // Vormonat

       esp32c3_01_yd.postUpdate(VerbrauchVortag)   // Gestern
       esp32c3_01_MTD.postUpdate(VerbrauchMonat)   // Monat
       esp32c3_01_pM.postUpdate(VerbrauchVorMonat) // VormonatMonat

       esp32c3_01_YTD.postUpdate(VerbrauchJahr)    // Jahr
       esp32c3_01_PY.postUpdate(VerbrauchVorJahr)  // Vorjahr
       esp32c3_01_curr.postUpdate(VerbrauchTag)    // Heute
  
end
Hat jemand einen Tipp für mich ?
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH5.0.1 openhabian

Benutzeravatar
peter-pan
Beiträge: 2788
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Rule funktioniert nicht mehr seit Update auf Rel:4.3.6

Beitrag von peter-pan »

Hab jetzt heraus gefunden (try and error), dass es wohl an diesem Befehl liegt:

Code: Alles auswählen

  val VerbrauchVortag       = esp32c3_01_total_in.deltaBetween(now.minusDays(1).with(LocalTime.MIN),now.minusDays(1).with(LocalTime.MAX))   // gestern
 
Hier wird wohl kein gültiger Wert ermittelt. Und wenn ich nun mit diesem Befehl

Code: Alles auswählen

esp32c3_01_yd.postUpdate(VerbrauchVortag)   // Gestern
einen Update versuche, dann kommt es zu der Fehlermeldung.

Allerdings weiss ich nicht warum ??? :? :roll: Bis gestern hat's noch funktioniert.
hichi1.jpg
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH5.0.1 openhabian

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

Re: Rule funktioniert nicht mehr seit Update auf Rel:4.3.6

Beitrag von udo1toni »

Warum nutzt Du LocalTime.MIN und LocalTime.MAX?
Mein Vorgehen wäre Mitternacht (0 Uhr) zu nehmen und für den Beginn des Zeitraums einen Tag abzuziehen.

Die Funktion als solche müsste eigentlich Werte liefern, es sei denn, es existieren keine Daten für den gewählten Zeitraum...
openHAB5.0.1 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime) (Proxmox 9.0.6, LXC)

Benutzeravatar
peter-pan
Beiträge: 2788
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Rule funktioniert nicht mehr seit Update auf Rel:4.3.6

Beitrag von peter-pan »

Hallo Udo. Danke für dein Input.
Die Rule als solche läuft eigentlich jede Stunde.
Ich verstehe zwar was du meinst, aber ich muss erst mal schauen, wo du das schon einmal erläutert hast. :oops: bzw. muss mich mit der Persistence auseinander setzen. Das mit der Zeit ist niht so meins. :(

Die Funktion, die ich da benutze macht ja eigentlich auch nichts anderes, oder ??? Aber wie gesagt, die Rule hat bis gestern funktioniert ??!!
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH5.0.1 openhabian

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

Re: Rule funktioniert nicht mehr seit Update auf Rel:4.3.6

Beitrag von udo1toni »

Ohne die Methoden MIN und MAX zu kennen, gehe ich davon aus, dass MIX immer 00:00:00.000 liefert und MAX immer 23:59:59.999. MIN entspräche damit exakt MIDNIGHT, MAX entspräche näherungsweise (und für die Anwendung ausreichend) MIDNIGHT + 1 TAG. Im Unterschied zu MIN und MAX weiß ich aber sicher, dass MIDNIGHT funktioniert... :)
openHAB5.0.1 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime) (Proxmox 9.0.6, LXC)

Benutzeravatar
peter-pan
Beiträge: 2788
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Rule funktioniert nicht mehr seit Update auf Rel:4.3.6

Beitrag von peter-pan »

Irgendwas klappt nicht so.
Ich hab das mal so umgeschrieben:

Code: Alles auswählen

   val VerbrauchVortag       = na1z_04_energy.deltaBetween(ZonedDateTime.now.minusDays(1).with(LocalTime.MIDNIGHT),ZonedDateTime.now.with(LocalTime.MIDNIGHT).minusSeconds(1)) as Number   // gestern
   if (VerbrauchVortag === null) {
       logInfo("Nous A1Z 04","Vortag ist null {}" ,VerbrauchVortag)
    }
Das Ergebnis im Log ist:

Code: Alles auswählen

2025-07-19 23:30:02.653 [INFO ] [penhab.core.model.script.Nous A1Z 04] - Vortag ist null {}
Es soll lediglich aus dem Gesamtwert der Vortageswert extrahiert werden.

Code: Alles auswählen

 Also Gesamtsumme am Tagesende des Vortages minus Gesamtsumme am Tagesanfang des Vortages bzw. der Wert dazwischen (between).
Das Item sieht so aus:

Code: Alles auswählen

Number:Energy               na1z_04_energy             "Steckdose na1z 04 Energie  [%.2f %unit%]"        <gosundsp111>           (gna1z_04)                         ["Energy", "Measurement"]                   { channel="mqtt:topic:danny:na1z04:energy" }         
Das mit dem MIN/MAX hatte ich mal hier gefunden und bisher hatte ich auch keine Probleme mit den Berechnungen. Aber seit dem Upgrade auf 4.3.6 ist das nicht mehr so.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH5.0.1 openhabian

Antworten