Seite 1 von 1
Tagessumme, Tagesertrag einer PV-Anlage
Verfasst: 31. Mär 2022 19:44
von hurra
Hallo zusammen,
ich habe eine kleine PV-Anlage im Betrieb und würde mir gerne den Ertrag des letzten Tages anzeigen lassen. Aber mittlerweile bin ich bei der Lösung komplett verloren.
Mittels Google lande ich immer bei folgender Funktion, die sich auf withTimeAtStartOfDay beruft:
Code: Alles auswählen
val Verbrauch = Heizung.deltaSince(now.withTimeAtStartOfDay) as Number
aber mir wird immer die Regel mit folgender Fehlermeldung angezeigt:
Code: Alles auswählen
failed: 'withTimeAtStartOfDay' is not a member of 'java.time.ZonedDateTime'; line 19, column 60, length 24 in solar
ich bin mir nicht sicher, ob vielleicht eine Funktion oder ähnliches fehlt?
Persistiert wird mit rrd4j so:
Code: Alles auswählen
Strategies {
everyHour : "0 0 * * * ?"
everyDay : "0 0 0 * * ?"
default = everyChange
}
Items {
* : strategy = everyChange, everyDay, restoreOnStartup
}
Heute habe ich versucht, den manuellen Weg zu gehen, aber eigentlich will ich schon auf die komfortable Funktion wie oben zurückgreifen
Ich habe außerdem festgestellt, dass wohl die Leistung als Dateityp floatValue gehandelt werden muss
Code: Alles auswählen
var float Aktualwert_Merker1 = (Shelly1PMSolar_Leistung.state as Number).floatValue
vielleicht habt ihr eine Idee, wie ich meinen Tageswert am elegantesten und komfortabelsten als Variable abspeichern kann. Google hat mich leider nicht mehr auf einen erfolgreichen Weg führen können.
Danke und VG
Christoph
Re: Tagessumme, Tagesertrag einer PV-Anlage
Verfasst: 31. Mär 2022 20:20
von udo1toni
Die erste Frage wäre, welche Version von openHAB Du nutzt. withTimeAtStartOfDay ist Bestandteil von Joda Time, welches in openHAB1 und openHAB2 zur Verfügung steht. Jedoch steht diese Funktion nicht in JavaTime zur Verfügung, welches seit ~ openHAB2.4 mit an Bord ist und in openHAB3 exklusiv verwendet wird.
Re: Tagessumme, Tagesertrag einer PV-Anlage
Verfasst: 31. Mär 2022 22:23
von hurra
Ah ok, das ist dann wohl die Ursache.
Ich nutze OH3
Re: Tagessumme, Tagesertrag einer PV-Anlage
Verfasst: 31. Mär 2022 23:10
von udo1toni
In openHAB3 müsstest Du das now.withTimeAtStartOfDay mit ZonedDateTime.now().with(LocalTime.MIDNIGHT) ersetzen.
Re: Tagessumme, Tagesertrag einer PV-Anlage
Verfasst: 1. Apr 2022 19:18
von hurra
okay, also das funktioniert genau so! Danke für den Tipp!
Verrückt, aber die Variante mit LocalTime habe ich bisher noch nie gelesen ... vielleicht weil ich stets nach withTime.. gesucht habe
Danke!
Re: Tagessumme, Tagesertrag einer PV-Anlage
Verfasst: 3. Apr 2022 13:18
von mad-mike
Moin.
Will mal eine Frage dazu stellen.
Wo wird denn wie der Wert gespeichert?
Ich meine folgendes:
Habe gesehen das der User @hurra einen Shelly PM nutzt um seine PV zu Messen. Nun ich hatte eine Ganze Zeitlang den Shelly Plug S im Einsatz. Grundsätzlich hat es funktioniert, jedoch wurden die Werte nach einem Neustart auf 0 gesetzt.
Das hat mich dazu bewegt, eine Fritz Dect steckdose zu nutzen um die Werte mir anzeigen zulassen. Hier werden die Werte gespeichert, und Openhab bekommt weiterhin zahlen, mit den ich rechnen kann.
So wird das bei mir nun gelöst:
Code: Alles auswählen
rule "0 Uhr"
when
Time cron "0 0 0 * * ? *"
then
aktpv.postUpdate(FRITZDECT2101_Gesamtverbrauch.state as Number) // aktpv Zwischenspeicher für tag Berechnung
PVheute.postUpdate(0) // PVheute auf 0
euroheute.postUpdate(0) // euroheute auf 0
var day = LocalDate.parse("2022-02-03").atStartOfDay();
var long days = Duration.between(day, now).toDays(); // Tage zählen
Laufzeit.postUpdate(days) // Wert in Laufzeit schreiben
end
und weiter gehts dann mit:
Code: Alles auswählen
rule "FRITZDECT2101_Gesamtverbrauch changed"
when
Item FRITZDECT2101_Gesamtverbrauch changed
then
var Number nKosten = 0
if(FRITZDECT2101_Gesamtverbrauch.state instanceof Number)
nKosten = (FRITZDECT2101_Gesamtverbrauch.state as Number).floatValue * 0.28
kwheuro.postUpdate(nKosten)
PVheute.postUpdate((FRITZDECT2101_Gesamtverbrauch.state as Number).floatValue - (aktpv.state as Number).floatValue)
euroheute.postUpdate((PVheute.state as Number).floatValue * 0.28)
end
Habe so ein paar Item erstellt, welche mir die heutigen € und die heutigen kWh berechnen + den Gesamten wert. Theroretisch wäre es auch eine Leichtigkeit mir den wert von gestern in ein Item zu schreiben...
wie gesagt, mit dem Shelly Plug S, ist es nicht möglich, da der gesamte kWh nicht gespeichert wird. Der kWh wert wurde bei mir immer auf 0 gesetzt.
Re: Tagessumme, Tagesertrag einer PV-Anlage
Verfasst: 3. Apr 2022 16:21
von udo1toni
Das ist leicht erklärbar. Der Shelly Plug S speichert die Summe im RAM. Sobald das Gerät vom Netz getrennt wird oder auch nur einen Neustart macht, geht der Zählerstand verloren. Die FRITZ!DECT speichert den Wert hingegen in der FRITZ!Box, da diese als Zentrale fungiert. Ich gehe davon us, dass der Zählerwert bei einem Neustart der FRITZ!Box ebenfalls verloren geht. Kann aber auch sein, dass die Geräte sich untereinander abgleichen und so erst dann wieder bei 0 anfangen, wenn beide Geräte zeitgleich vom Strom getrennt werden.
Der Zähler kann nicht sinnvoll im Flash Speicher gesichert werden, weil der Speicher dann ständig überschrieben würde. Die Konsequenz wäre ein Ausfall des Speichers nach wenigen Stunden (wenn es günstig läuft... vielleicht auch schon nach wenigen Minuten, wenn es nicht so gut läuft).
Der einzig sinnvolle Weg, damit umzugehen, ist, den Gesamtzähler jederzeit in openHAB zu führen.
Dabei muss das Zähleritem persistiert werden und es wird jeweils das Delta zum letzten Zählerstand errechnet.
Ist das Delta negativ, so wurde der Zähler zwischenzeitlich auf 0 zurückgesetzt und es muss der Zählerstand direkt genutzt werden.
Es gibt hier im Forum mehrere Rules Beispiele, um das zu bewerkstelligen.
