From 4755020730e30dcce72da8f877fb954dd5a7321e Mon Sep 17 00:00:00 2001 From: s0170071 Date: Fri, 2 Oct 2026 18:08:03 +0200 Subject: [PATCH] Wechselrichter: Hybrid-Korrektur nicht erneut anwenden, wenn kein neuer Wert gesetzt wurde --- packages/modules/common/store/_inverter.py | 6 +++++- .../modules/common/store/_inverter_test.py | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/packages/modules/common/store/_inverter.py b/packages/modules/common/store/_inverter.py index d7e28a996c..73219fcedb 100644 --- a/packages/modules/common/store/_inverter.py +++ b/packages/modules/common/store/_inverter.py @@ -1,3 +1,4 @@ +import copy import logging from control import data @@ -33,10 +34,13 @@ def __init__(self, delegate: LoggingValueStore) -> None: self.delegate = delegate def set(self, state: InverterState) -> None: + self._raw_state = state self.delegate.set(state) def update(self) -> None: - state = self.fix_hybrid_values(self.delegate.delegate.state) + # Kopie, damit bei ausbleibendem set() (Lesefehler) die Hybrid-Korrektur nicht erneut auf den bereits + # korrigierten Wert angewendet wird. + state = self.fix_hybrid_values(copy.copy(self._raw_state)) self.delegate.set(state) self.delegate.update() diff --git a/packages/modules/common/store/_inverter_test.py b/packages/modules/common/store/_inverter_test.py index 682c9ca2d8..9b66bd2414 100644 --- a/packages/modules/common/store/_inverter_test.py +++ b/packages/modules/common/store/_inverter_test.py @@ -50,3 +50,21 @@ def test_fix_hybrid_values(params): # evaluation assert vars(state) == vars(params.expected_state) + + +def test_update_without_new_reading_does_not_apply_hybrid_fix_twice(): + # setup + data.data.counter_all_data.data.get.hierarchy = HYBRID_HIERARCHY + data.data.bat_data["bat2"] = Mock(spec=Bat, data=Mock( + spec=BatData, get=Mock(spec=Get, currents=[0]*3, power=223, exported=100, imported=200))) + delegate = Mock(delegate=Mock(num=1)) + purge = PurgeInverterState(delegate=delegate) + purge.set(InverterState(power=-5786, exported=200)) + + # execution + purge.update() + purge.update() # Lesefehler: kein erneutes set() + + # evaluation + state = delegate.set.call_args.args[0] + assert (state.power, state.exported) == (-6009, 300)