Hallo zusammen,
ich lese seit geraumer Zeit den Fronius Wechselrichter über Modbus TCP mittels Homeassistant aus und schreibe die in Teilen auf den KNX (hauptsächlich der Füllstand vom Akku und der momentane Ertrag), damit man abschätzen kann, ob die Waschmaschine mit Überschuss geladen werden kann und der Akku trotzdem nicht entladen wird, da noch genug Sonneneinstrahlung vorhanden ist.
Funktioniert seit 3 Jahren eigentlich gut. Eigentlich weil...
...die Werte springen:
Ich hole mir vom Wechselrichter die Werte nach folgendem Schema:
Hier verbirgt sich die Leistung vom DC-Strang 1 als Rohwert ohne den Skalierungsfaktor (String 2 funktioniert genauso)
Um den Wert richtig zu berechnen, skaliert sich der Wert je nach Leistung vom Dach mit einem Scalefactor und versetzt das Komma.
Den lese ich im vorher aus:
Um nun das ganze als richtigen Wert zu bekommen, Multipliziere ich den Messwert mit dem Scaltefactor:
Jetzt passiert folgendes (einfache Beispielwerte):
Der Messewert wird auf 580W gesetzt, dann wird der Scalefactor neu eingelesen und dann der korrigierte Wert mit 5800 Watt ausgegeben.
Je nach Sprunghaftigkeit der Sonneneinstrahlung liefert meine PV mit maximal 12kW plötzlich 60.000 Watt, bis der Scalefactor den wert auf 6.000 Watt oder gar 600 Watt korrigiert.
Nun meine Frage:
Wie kann ich sicherstellen, dass der Wert immer erst berechnet wird, wenn BEIDE Werte eingelesen sind und erst DANN folgt die Berechnung?
ich lese seit geraumer Zeit den Fronius Wechselrichter über Modbus TCP mittels Homeassistant aus und schreibe die in Teilen auf den KNX (hauptsächlich der Füllstand vom Akku und der momentane Ertrag), damit man abschätzen kann, ob die Waschmaschine mit Überschuss geladen werden kann und der Akku trotzdem nicht entladen wird, da noch genug Sonneneinstrahlung vorhanden ist.
Funktioniert seit 3 Jahren eigentlich gut. Eigentlich weil...
...die Werte springen:
Ich hole mir vom Wechselrichter die Werte nach folgendem Schema:
Hier verbirgt sich die Leistung vom DC-Strang 1 als Rohwert ohne den Skalierungsfaktor (String 2 funktioniert genauso)
Code:
- name: PV_GEN24_W_DC_1_RAW slave: 1 # count: 1 data_type: uint16 address: 40284 scan_interval: 10
Den lese ich im vorher aus:
Code:
- name: PV_GEN24_DCW_SF slave: 1 # count: 1 data_type: int16 address: 40267 scan_interval: 10
Code:
# Generatorfeld 1 - name: "PV_GEN24_W_DC_1" unique_id: f63974e7-2db6-4af4-926b-b13627f9e74b unit_of_measurement: W device_class: power state: "{{ max(0, (((states('sensor.PV_GEN24_W_DC_1_RAW') | int) * (10 ** (states('sensor.PV_GEN24_DCW_SF')) | int))) | round(0) ) }}"
- der Wert PV_GEN24_W_DC_1 beträgt 900 Watt
- der Scalefactor PV_GEN24_DCW_SF ist 1
- ergibt in der Ausgabe 900W
- die Sonne wird intensiver (kommt grade hinter einer Wolke hervor) und der Messwert PV_GEN24_W_DC_1 beträgt 580 Watt
- der Scalefactor PV_GEN24_DCW_SF wechselt auf 10
- sollte unmittelbar einen Wert von 5800W geben
Der Messewert wird auf 580W gesetzt, dann wird der Scalefactor neu eingelesen und dann der korrigierte Wert mit 5800 Watt ausgegeben.
Je nach Sprunghaftigkeit der Sonneneinstrahlung liefert meine PV mit maximal 12kW plötzlich 60.000 Watt, bis der Scalefactor den wert auf 6.000 Watt oder gar 600 Watt korrigiert.
Nun meine Frage:
Wie kann ich sicherstellen, dass der Wert immer erst berechnet wird, wenn BEIDE Werte eingelesen sind und erst DANN folgt die Berechnung?
Kommentar