diff --git a/packages/modules/devices/sigenergy/sigenergy/bat.py b/packages/modules/devices/sigenergy/sigenergy/bat.py index 55adf95bd1..b27756e92a 100644 --- a/packages/modules/devices/sigenergy/sigenergy/bat.py +++ b/packages/modules/devices/sigenergy/sigenergy/bat.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 import logging -from typing import TypedDict, Any +from typing import TypedDict, Any, Optional from modules.common.abstract_device import AbstractBat from modules.common.component_state import BatState from modules.common.component_type import ComponentDescriptor @@ -29,6 +29,7 @@ def initialize(self) -> None: self.store = get_bat_value_store(self.component_config.id) self.fault_state = FaultState(ComponentInfo.from_component_config(self.component_config)) self.sim_counter = SimCounter(self.__device_id, self.component_config.id, prefix="speicher") + self.last_mode = 'Undefined' def update(self) -> None: unit = self.component_config.configuration.modbus_id @@ -46,5 +47,25 @@ def update(self) -> None: ) self.store.set(bat_state) + def set_power_limit(self, power_limit: Optional[int]) -> None: + unit = self.component_config.configuration.modbus_id + log.debug(f'last_mode: {self.last_mode}') + # Steuerung erfolgt über SoC (mit Faktor 10) + if power_limit is None: + log.debug("Keine Batteriesteuerung, Selbstregelung durch Wechselrichter") + if self.last_mode is not None: + # Entladesperre ab 5%, Ansonsten Eigenregelung + self.__tcp_client.write_registers(40048, [50], data_type=ModbusDataType.UINT_16, unit=unit) + self.last_mode = None + else: + log.debug("Aktive Batteriesteuerung. Batterie wird auf Stop gesetzt und nicht entladen") + if self.last_mode != 'stop': + # Entladesperre auch bei 100% SoC + self.__tcp_client.write_registers(40048, [1000], data_type=ModbusDataType.UINT_16, unit=unit) + self.last_mode = 'stop' + + def power_limit_controllable(self) -> bool: + return True + component_descriptor = ComponentDescriptor(configuration_factory=SigenergyBatSetup)