diff --git a/packages/modules/devices/alpha_ess/alpha_ess/bat.py b/packages/modules/devices/alpha_ess/alpha_ess/bat.py index a1e8afdba3..461f6b1f56 100644 --- a/packages/modules/devices/alpha_ess/alpha_ess/bat.py +++ b/packages/modules/devices/alpha_ess/alpha_ess/bat.py @@ -30,6 +30,7 @@ def initialize(self) -> None: self.sim_counter = SimCounter(self.kwargs['device_id'], self.component_config.id, prefix="speicher") self.store = get_bat_value_store(self.component_config.id) self.fault_state = FaultState(ComponentInfo.from_component_config(self.component_config)) + self.last_mode = 'Undefined' def update(self) -> None: # keine Unterschiede zwischen den Versionen @@ -63,19 +64,25 @@ def set_power_limit(self, power_limit: Optional[int]) -> None: if power_limit is None: # Kein Powerlimit gefordert, externe Steuerung deaktivieren log.debug("Keine Batteriesteuerung gefordert, deaktiviere externe Steuerung.") - self.__tcp_client.write_registers(2127, [0], data_type=ModbusDataType.UINT_16, unit=unit) + if self.last_mode is not None: + self.__tcp_client.write_registers(2127, [0], data_type=ModbusDataType.UINT_16, unit=unit) + self.last_mode = None elif power_limit <= 0: # AlphaESS kann die Entladung nur über den SoC verhindern (komplette Entladesperre) # Netzladung mit geringen Ziel SoC verhindert auch Entladung (Default 10%) # Zeiten für Netzladung müssen im Wechselrichter aktiviert werden - log.debug("Aktive Batteriesteuerung vorhanden. Setze externe Steuerung.") - self.__tcp_client.write_registers(2127, [1], data_type=ModbusDataType.UINT_16, unit=unit) - self.__tcp_client.write_registers(2133, [10], data_type=ModbusDataType.UINT_16, unit=unit) + log.debug("Aktive Batteriesteuerung angestoßen. Setze Entladesperre.") + if self.last_mode != 'stop': + self.__tcp_client.write_registers(2127, [1], data_type=ModbusDataType.UINT_16, unit=unit) + self.__tcp_client.write_registers(2133, [10], data_type=ModbusDataType.UINT_16, unit=unit) + self.last_mode = 'stop' else: # Aktive Ladung - log.debug("Aktive Batteriesteuerung vorhanden. Setze externe Steuerung.") - self.__tcp_client.write_registers(2127, [1], data_type=ModbusDataType.UINT_16, unit=unit) - self.__tcp_client.write_registers(2133, [100], data_type=ModbusDataType.UINT_16, unit=unit) + log.debug("Aktive Batteriesteuerung angestoßen. Setze aktive Ladung.") + if self.last_mode != 'charge': + self.__tcp_client.write_registers(2127, [1], data_type=ModbusDataType.UINT_16, unit=unit) + self.__tcp_client.write_registers(2133, [100], data_type=ModbusDataType.UINT_16, unit=unit) + self.last_mode = 'charge' def power_limit_controllable(self) -> bool: return True