Seite 1 von 1

Rule funktioniert nicht mehr seit Update auf Rel:4.3.6

Verfasst: 18. Jul 2025 11:33
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 ?

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

Verfasst: 18. Jul 2025 12:15
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

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

Verfasst: 18. Jul 2025 13:54
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...

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

Verfasst: 18. Jul 2025 14:44
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 ??!!