Seite 1 von 1

Hilfe bei PV Eigenverbrauch berechnen benötigt

Verfasst: 10. Okt 2022 17:10
von dasSofa
Hallo,

ich habe das Smartmeter Binding für den Stromzähler und das Kostal Binding für den Wechselrichter.
Jetzt wollte ich über eine DSL Rule einfach den produzierten Strom am Tag aus der PV - den eingespeisten Strom berechnen um an meinen Eigenverbauch der PV zu kommen.

Mit einer DSL Rule erstelle ich das Item House_Energy_Day_PV_Output um den täglich eingespeisten Strom als Item zu haben.

Code: Alles auswählen

var Number HEDPVO = (Stromzahler_10280.deltaSince(ZonedDateTime.now().with(LocalTime.MIDNIGHT)) as Number)
House_Energy_Day_PV_Output.postUpdate(HEDPVO / 1000)
Somit habe ich die 2 Items für die Berechnung:

Code: Alles auswählen

=items.House_Energy_Day_PV_Output { "state": "8.7657 kWh", "displayState": "8,766 kWh" } 
=Items.KOSTALPLENTICOREPlus70noBattery_YieldDay { "state": "15.067237723233701 kWh", "displayState": "15,07 kWh" }
Wenn ich dann in einer weiteren DSL Rule die Berechnung mache

Code: Alles auswählen

var Number Kostal_YD = (KOSTALPLENTICOREPlus70noBattery_YieldDay.state as Number)
var Number HEDPVO = (House_Energy_Day_PV_Output.state as Number)
var Number TGVB = (Kostal_YD - HEDPVO)
Tagesverbrauch.postUpdate(TGVB)
Kommt hier vermutlich ein falsche Wert (23298313.119847200000) wegen den verschiedenen langen Zahlen hinter dem . bei den Items raus

Wie kann ich bei dem Kostal Item die Anzahl der stellen hinter dem Punkt entfernen oder die Berechnung generell machen.
Leider habe ich nicht viel Erfahrung in OH3 und bin auch noch nicht so gut in der Programmierung darin.

Habe mehrere Tage in den Foren gelesen und versucht das selbst zu regeln, aber leider komme ich hier nicht weiter weil ich auch einiges nicht verstehe.

Gruß Bernhard

Re: Hilfe bei PV Eigenverbrauch berechnen benötigt

Verfasst: 10. Okt 2022 18:44
von udo1toni
Die Anzahl der Nachkommastellen ist irrelevant, grundsätzlich arbeitet openHAB mit Float als Datentyp. Float hat aber den Nachteil, dass nicht alle reellen Zahlen im verfügbaren Zahlenraum dargestellt werden können. Deshalb kommt es dann auch zu Rundungsfehlern und seltsamen Anzeigen wie 15.00000000007 statt 15, das betrifft also auch ganze Zahlen, weil die Zahlen aus Mantisse und Exponent gebildet werden.
Für das Rechnen mit den Werten spielt das aber keine Rolle, da immer der "nächstgelegene Wert" verwendet wird, mit dem also der Rechenfehler so gering wie möglich ist. Und wenn Du später die Anzeige auf zwei Nachkommastellen begrenzt, verschwinden die vielen Nullen auch :)

Viel wichtiger ist, dass die Units alle stimmen, entweder, alle beteiligten Items verwenden UoM oder keines.

Re: Hilfe bei PV Eigenverbrauch berechnen benötigt

Verfasst: 11. Okt 2022 14:49
von dasSofa
Ich hab alle UoM kontrolliert, nur das Item Tagesverbrauch selbst hatte keinen. Das hab ich dann über state Descriptions gesetzt.
Trotzdem kommt da nur ein falscher Wert raus.

Über diese Rule hole ich ja die Tageseinspeisung vom Stromzähler in Wh und lege den Wert in das Item House_Energy_Day_PV_Output ab und Teile das durch 1000 um damit kWh in diesem Item zu haben. Habe ich hierbei einen Fehler gemacht ?

Code: Alles auswählen

var Number HEDPVO = (Stromzahler_10280.deltaSince(ZonedDateTime.now().with(LocalTime.MIDNIGHT)) as Number)
House_Energy_Day_PV_Output.postUpdate(HEDPVO / 1000)
Ansonsten weiß ich echt nicht weiter woran das liegen kann.

Re: Hilfe bei PV Eigenverbrauch berechnen benötigt

Verfasst: 11. Okt 2022 21:17
von udo1toni
Nein, der Punkt ist, Entweder alle Items sind mit UoM konfiguriert (also hier vermutlich Number:Power) oder keines. Die State Description hat NICHTS mit UoM zu tun, die sorgt nur dafür, dass in der Anzeige hinter dem Status ein fixer Text angehängt wird.

Die Persistence kann je nach Art ebenfalls nicht mit UoM umgehen bzw. liefert nur den reinen Zahlenwert, nicht aber die Einheit mit. Dann geht die Berechnung schief.
Ausweg: Wenn Du weißt, dass alle Zahlen die gleiche Einheit darstellen (und eben nur bei manchen keine Einheit mitgeliefert wird), musst Du die Einheiten entfernen, so:

Code: Alles auswählen

var Number Kostal_YD = (KOSTALPLENTICOREPlus70noBattery_YieldDay.state as Number).floatValue
var Number HEDPVO = (House_Energy_Day_PV_Output.state as Number).floatValue
var Number TGVB = (Kostal_YD - HEDPVO)
Tagesverbrauch.postUpdate(TGVB)
Das .floatValue sorgt dafür, dass die gelieferte Zahl OHNE Einheit übergeben wird. Wahlweise könnte man auch .intValue oder .doubleValue verwenden, das sind alles Methoden der Number Klasse.

Re: Hilfe bei PV Eigenverbrauch berechnen benötigt

Verfasst: 12. Okt 2022 12:45
von dasSofa
Das mit UoM hab ich ja total missverstanden ... auch aus anderen Foreneinträgen.
Vielen Dank für Ihre tolle Erklärung dazu !

Jetzt stimmt auch der berechnete Wert.

Re: Hilfe bei PV Eigenverbrauch berechnen benötigt

Verfasst: 12. Okt 2022 20:57
von udo1toni
UoM ist ein mächtiges Werkzeug. Z.B. liefert der Messadapter den Wert als 3545 mA ab, openHAB zeigt den Wert aber als 3,545 A an, und zwar ohne Umrechnung. Die Temperatur kommt in °C an, Du liest sie aber in K oder in °F ab. OHNE Umrechnung. Du gibst für das Item nur die gewünschte Einheit an.
Windstärke, lieber in Knoten, Beaufort oder doch Meter pro Sekunde? OHNE Umrechnung.

Das ist die eigentliche Daseinsberechtigung von UoM :) Leider kennt UoM meines Wissens aber keine fortgeschrittenen Regeln, wie z.B. aus Entfernung und Zeit die Durchschnittsgeschwindigkeit zu berechnen, der Wert muss also schon in der entsprechenden Einheit vorliegen, eine Umrechnung ist nur zwischen verschiedenen Maßsystemen möglich, also im Allgemeinen zwischen metrisch und imperial. Aber auch diese "Basic" Funktionen können das Leben komfortabler machen. Gedacht ist das Ganze in meinen Augen vor allem, um ausländische Geräte bequem einbinden zu können :) aber man kann schon auch so Nutzen daraus ziehen.