SOLVED - Verbrauch von heute (seit Mitternacht) anzeigen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Benutzeravatar
Florian.Reinartz
Beiträge: 110
Registriert: 11. Apr 2022 08:47
Answers: 0
Wohnort: bei Schwerin

SOLVED - Verbrauch von heute (seit Mitternacht) anzeigen

Beitrag von Florian.Reinartz »

Moin Zusammen,
dieses Thema gibt es schon mehrfach aber irgendwie ist bei mir der Wurm drin...

Ich benutze für die Anzeige wieviel Strom ich heute (seit 0:00 Uhr) verbraucht habe folgende Zeile in einer Rule:

Code: Alles auswählen

Verbrauch_Strom_Tag.postUpdate((Zaehlerstand_Strom_1_0_1_8_0.deltaSince(now.withTimeAtStartOfDay)) / 1000.0)
Inhalt von >Zaehlerstand_Strom_1_0_1_8_0< ist aktuell >16792821.3< und als >Number< deklariert.
>Verbrauch_Strom_Tag< wird mit >38.74575000< berechnet... Alles gut!

Nun wollte ich diese Zeile auf die Wärmemenge meiner Solarthermieanlage anwenden.

Code: Alles auswählen

SolarThermie_Waermemenge_KW.postUpdate((SolarThermie_Waermemenge_W.state as Number) / 1000)
SolarThermie_Waermemenge_Tag_W.postUpdate(SolarThermie_Waermemenge_W.deltaSince(now.withTimeAtStartOfDay))
SolarThermie_Waermemenge_Tag_kW.postUpdate(SolarThermie_Waermemenge_KW.deltaSince(now.withTimeAtStartOfDay))
>SolarThermie_Waermemenge_W< hat den Wert >92759.0< und ist als >Number< definiert.
Die Umrechnung in KW (erste Zeile) funktioniert aber ich bin zu doof die Wärmemenge des Tages ausrechnen zu lassen.

Fehler im log:
Error during the execution of rule 'Solar-Wärmemenge berechnen': The argument 'state' must not be null.

Die Daten des Items >SolarThermie_Waermemenge_W< werden über die rrd4j.persist seit vorgestern gesammelt.

Code: Alles auswählen

SolarThermie_Waermemenge_W                          : strategy = everyHour, restoreOnStartup
SolarThermie_Waermemenge_Tag_kW.postUpdate(SolarThermie_Waermemenge_KW.state.deltaSince(now.withTimeAtStartOfDay))
hilft schon mal nicht...

Ich stehe echt auf dem Schlauch...

Dankle für jede Unterstützung und Gruß
Flo
Zuletzt geändert von Florian.Reinartz am 3. Mai 2022 08:33, insgesamt 1-mal geändert.
openHAB 4.3.0 (64 bit) auf einem Raspberry Pi 5 Model B Rev 1.0 mit 8GB

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

Re: Verbrauch von heute (seit Mitternacht) anzeigen

Beitrag von udo1toni »

Mein erster Tipp wäre, VSCode zu installieren und das openHAB Plugin zu aktivieren (incl. korrekter Konfiguration - ist aber nicht soooo wild, nur der korrekte Zugang zum openHAB Server)

Wenn Du dann die DSL Rules in Dateien in /etc/openhab/rules/ speicherst (in der klassischen Version... rule ... when ... then ... end) kannst Du auf diese Weise syntaktische Fehler direkt sehen (und Code Completion geht ebenfalls...)

Ein Punkt ist allerdings absolut sicher ein Problem, nämlich dass Du ein Item beschreibst und unmittelbar danach auf die Persistence dieses Items zugreifst. Der Zugriff auf ein Item dauert vielleicht eine oder zwei Millisekunden, auf die Persistence schon länger, vermutlich zehn bis zwanzig Millisekunden. Das Schreiben hingegen dauert sicherlich zehnmal länger, und deltaSince führt eine Berechnung durch, die mit zwei Werten arbeitet.
Du kannst versuchen, mit einem Thread::sleep(300) zwischen den einzelnen .postUpdate() Anweisungen etwas (300 Millisekunden) Zeit zu schinden. Das ist nicht sonderlich elegant, kann man aber ausprobieren. Bei Erfolg kann man über eine bessere Lösung nachdenken.
openHAB4.3.0 stable in einem Debian-Container (bookworm) (Proxmox 8.3.1, LXC), mit openHABian eingerichtet

Benutzeravatar
Florian.Reinartz
Beiträge: 110
Registriert: 11. Apr 2022 08:47
Answers: 0
Wohnort: bei Schwerin

Re: Verbrauch von heute (seit Mitternacht) anzeigen

Beitrag von Florian.Reinartz »

Moin in die Runde,
ich arbeite seit Anfang an mit VSCode und dem openHAB PlugIn. Viele Fehler werden so vermieden aber bei diesem Thema bekomme ich keine Gedankenanstöße vom openHAB PlugIn.

Die dritte Zeile habe ich erst später hinzugefügt.
Ursprünglich sah es so aus:

Code: Alles auswählen

rule "Solar-Wärmemenge berechnen"
    when
        Item SolarThermie_Waermemenge_W changed
    then
        SolarThermie_Waermemenge_KW.postUpdate((SolarThermie_Waermemenge_W.state as Number) / 1000)
        SolarThermie_Waermemenge_Tag_kW.postUpdate((SolarThermie_Waermemenge_W.deltaSince(now.withTimeAtStartOfDay)) / 1000)
end
Funktioniert aber auch nicht...
Die Verzögerung habe ich jetzt noch nicht ausprobiert weil es - glaube ich - in der Version nicht relevant ist.
Muss ich den Wert >SolarThermie_Waermemenge_W< vielleicht häufiger als stündlich in die Persistence schreiben?
Der Wert des Items >SolarThermie_Waermemenge_Tag_kW< bleibt >NULL<

So kann es doch eigentlich nicht an der Schreibverzögerung liegen...
fehlt bestimmt wieder nur so ein .state oder .state as Number oder so...
Ich bekomme es aber nicht zum Laufen ?!?

Sieht Jemand den Fehler?
Danke und Gruß
Florian
openHAB 4.3.0 (64 bit) auf einem Raspberry Pi 5 Model B Rev 1.0 mit 8GB

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

Re: Verbrauch von heute (seit Mitternacht) anzeigen

Beitrag von udo1toni »

Ah, gut. Welche Version von openHAB nutzt Du eigentlich? Weil... withTimeAtStartOfDay ist OH <= 2.5.12.
In openHAB3 ff. ist Joda Time durch JavaTime ersetzt. Dort sieht das dann so aus:

Code: Alles auswählen

rule "Solar-Wärmemenge berechnen"
    when
        Item SolarThermie_Waermemenge_W changed
    then
        SolarThermie_Waermemenge_KW.postUpdate((SolarThermie_Waermemenge_W.state as Number) / 1000)
        SolarThermie_Waermemenge_Tag_kW.postUpdate((SolarThermie_Waermemenge_W.deltaSince(ZonedDateTime.now().with(LocalTime.MIDNIGHT)) as Number) / 1000)
end
Sorry, dass mir das erst jetzt aufgefallen ist... ich nutze halt selbst noch 2.5.12 produktiv und hatte gestern Frühdienst... ;)

Oder etwas weniger länglich und besser lesbar (insbesondere um die Klammern besser zählen zu können...):

Code: Alles auswählen

rule "Solar-Wärmemenge berechnen"
when
    Item SolarThermie_Waermemenge_W changed
then
    val dtMidnight = ZonedDateTime.now().with(LocalTime.MIDNIGHT)
    SolarThermie_Waermemenge_KW.postUpdate((SolarThermie_Waermemenge_W.state as Number) / 1000)
    SolarThermie_Waermemenge_Tag_kW.postUpdate((SolarThermie_Waermemenge_W.deltaSince(dtMidnight) as Number) / 1000)
end
openHAB4.3.0 stable in einem Debian-Container (bookworm) (Proxmox 8.3.1, LXC), mit openHABian eingerichtet

Benutzeravatar
Florian.Reinartz
Beiträge: 110
Registriert: 11. Apr 2022 08:47
Answers: 0
Wohnort: bei Schwerin

Re: Verbrauch von heute (seit Mitternacht) anzeigen

Beitrag von Florian.Reinartz »

...aber ich nutzew doch 2.5.12 ... :cry:

SolarThermie_Waermemenge_Tag_kW.postUpdate((SolarThermie_Waermemenge_W.deltaSince(ZonedDateTime.now().with(LocalTime.MIDNIGHT)) as Number) / 1000)
->
2022-05-02 20:13:30.009 [ERROR] [ntime.internal.engine.ExecuteRuleJob] - Error during the execution of rule 'Solar-Wärmemenge berechnen': An error occurred during the script execution: Could not invoke method: org.eclipse.smarthome.model.persistence.extensions.PersistenceExtensions.deltaSince(org.eclipse.smarthome.core.items.Item,org.joda.time.base.AbstractInstant) on instance: null

SolarThermie_Waermemenge_Tag_kW.postUpdate((SolarThermie_Waermemenge_W.deltaSince(now.withTimeAtStartOfDay)) / 1000)
->
2022-05-02 20:14:32.258 [ERROR] [ntime.internal.engine.ExecuteRuleJob] - Error during the execution of rule 'Solar-Wärmemenge berechnen': null
openHAB 4.3.0 (64 bit) auf einem Raspberry Pi 5 Model B Rev 1.0 mit 8GB

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

Re: Verbrauch von heute (seit Mitternacht) anzeigen

Beitrag von udo1toni »

Nun ja, das weißt Du... ;)
Schade, weil das eine schöne Variante gewesen wäre, um den Fehler zu korrigieren...

Das as Number hast Du schon ergänzt?

Code: Alles auswählen

SolarThermie_Waermemenge_Tag_kW.postUpdate((SolarThermie_Waermemenge_W.deltaSince(now.withTimeAtStartOfDay) as Number) / 1000)
openHAB4.3.0 stable in einem Debian-Container (bookworm) (Proxmox 8.3.1, LXC), mit openHABian eingerichtet

Benutzeravatar
Florian.Reinartz
Beiträge: 110
Registriert: 11. Apr 2022 08:47
Answers: 0
Wohnort: bei Schwerin

Re: Verbrauch von heute (seit Mitternacht) anzeigen

Beitrag von Florian.Reinartz »

ja :cry:

SolarThermie_Waermemenge_Tag_kW.postUpdate((SolarThermie_Waermemenge_W.deltaSince(now.withTimeAtStartOfDay) as Number) / 1000)
->
2022-05-02 20:56:30.020 [ERROR] [ntime.internal.engine.ExecuteRuleJob] - Error during the execution of rule 'Solar-Wärmemenge berechnen': null
openHAB 4.3.0 (64 bit) auf einem Raspberry Pi 5 Model B Rev 1.0 mit 8GB

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

Re: Verbrauch von heute (seit Mitternacht) anzeigen

Beitrag von udo1toni »

Dann hast Du schlicht keine Daten persistiert.

Du hast als Strategy everyHour angegeben. Hast Du diese Strategy auch definiert?
openHAB4.3.0 stable in einem Debian-Container (bookworm) (Proxmox 8.3.1, LXC), mit openHABian eingerichtet

Benutzeravatar
Florian.Reinartz
Beiträge: 110
Registriert: 11. Apr 2022 08:47
Answers: 0
Wohnort: bei Schwerin

Re: Verbrauch von heute (seit Mitternacht) anzeigen

Beitrag von Florian.Reinartz »

{
everyMinute: "0 * * * * ?"
everyHour: "0 0 * * * ?"
everyDay: "0 0 0 * * ?"
default = everyChange
}
openHAB 4.3.0 (64 bit) auf einem Raspberry Pi 5 Model B Rev 1.0 mit 8GB

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

Re: Verbrauch von heute (seit Mitternacht) anzeigen

Beitrag von udo1toni »

Kannst Du bitte mal statt everyHour everyMinute nehmen? Für das Delta spielt das keine Rolle, ebenso wenig beim Datenverbrauch. rrd4j verhält sich in mancherlei Beziehung seltsam, wenn es nicht minütlich persistiert, vielleicht schlägt das auch hier zu...
openHAB4.3.0 stable in einem Debian-Container (bookworm) (Proxmox 8.3.1, LXC), mit openHABian eingerichtet

Antworten