diff --git a/packages/modules/common/component_state.py b/packages/modules/common/component_state.py index b2b27c970d..fbd8e6abd6 100644 --- a/packages/modules/common/component_state.py +++ b/packages/modules/common/component_state.py @@ -108,11 +108,13 @@ def __init__( self, exported: float, power: float, + imported: float = 0, # simulated import counter to properly calculate PV energy when bat is charged from AC currents: Optional[List[Optional[float]]] = None, dc_power: Optional[float] = None ): """Args: exported: total energy in Wh + imported: total energy in Wh power: actual power in W currents: actual currents for 3 phases in A dc_power: dc power in W @@ -125,6 +127,7 @@ def __init__( self.currents = currents self.power = power self.exported = exported + self.imported = imported self.dc_power = dc_power diff --git a/packages/modules/common/store/_inverter.py b/packages/modules/common/store/_inverter.py index abbae2dfda..9c47bf5275 100644 --- a/packages/modules/common/store/_inverter.py +++ b/packages/modules/common/store/_inverter.py @@ -60,6 +60,7 @@ def fix_hybrid_values(self, state: InverterState) -> InverterState: children = data.data.counter_all_data.get_entry_of_element(self.delegate.delegate.num)["children"] power = state.power exported = state.exported + imported = state.imported if len(children): hybrid = [] for c in children: @@ -70,7 +71,9 @@ def fix_hybrid_values(self, state: InverterState) -> InverterState: for bat in hybrid: bat_get = data.data.bat_data[bat].data.get power -= bat_get.power - exported += bat_get.imported - bat_get.exported + + exported += bat_get.imported - bat_get.exported - imported + if state.dc_power is not None: # Manche Systeme werden auch aus dem Netz geladen, um einen Mindest-SoC zu halten. if state.dc_power == 0: diff --git a/packages/modules/devices/sma/sma_sunny_boy/inverter.py b/packages/modules/devices/sma/sma_sunny_boy/inverter.py index 8685fd7410..7e6596b4c8 100644 --- a/packages/modules/devices/sma/sma_sunny_boy/inverter.py +++ b/packages/modules/devices/sma/sma_sunny_boy/inverter.py @@ -12,6 +12,7 @@ from modules.common.store import get_inverter_value_store from modules.devices.sma.sma_sunny_boy.config import SmaSunnyBoyInverterSetup from modules.devices.sma.sma_sunny_boy.inv_version import SmaInverterVersion +from modules.common.simcount import SimCounter log = logging.getLogger(__name__) @@ -30,6 +31,7 @@ def __init__(self, self.tcp_client = tcp_client self.store = get_inverter_value_store(self.component_config.id) self.fault_state = FaultState(ComponentInfo.from_component_config(self.component_config)) + self.sim_counter = SimCounter(device_id, self.component_config.id, prefix="Wechselrichter") def update(self) -> None: self.store.set(self.read()) @@ -76,10 +78,13 @@ def read(self) -> InverterState: 'andernfalls kann ein Defekt vorliegen.' ) + imported, _ = self.sim_counter.sim_count(power_total * -1) + inverter_state = InverterState( power=power_total * -1, dc_power=dc_power * -1, - exported=energy + exported=energy, + imported=imported ) log.debug("WR {}: {}".format(self.tcp_client.address, inverter_state)) return inverter_state