11#!/usr/bin/env python3
22import logging
3- from typing import TypedDict , Any
3+ from typing import TypedDict , Any , Optional
44from modules .common .abstract_device import AbstractBat
55from modules .common .component_state import BatState
66from modules .common .component_type import ComponentDescriptor
@@ -29,6 +29,7 @@ def initialize(self) -> None:
2929 self .store = get_bat_value_store (self .component_config .id )
3030 self .fault_state = FaultState (ComponentInfo .from_component_config (self .component_config ))
3131 self .sim_counter = SimCounter (self .__device_id , self .component_config .id , prefix = "speicher" )
32+ self .last_mode = 'Undefined'
3233
3334 def update (self ) -> None :
3435 unit = self .component_config .configuration .modbus_id
@@ -46,5 +47,25 @@ def update(self) -> None:
4647 )
4748 self .store .set (bat_state )
4849
50+ def set_power_limit (self , power_limit : Optional [int ]) -> None :
51+ unit = self .component_config .configuration .modbus_id
52+ log .debug (f'last_mode: { self .last_mode } ' )
53+ # Steuerung erfolgt über SoC (mit Faktor 10)
54+ if power_limit is None :
55+ log .debug ("Keine Batteriesteuerung, Selbstregelung durch Wechselrichter" )
56+ if self .last_mode is not None :
57+ # Entladesperre ab 5%, Ansonsten Eigenregelung
58+ self .__tcp_client .write_registers (40048 , [50 ], data_type = ModbusDataType .UINT_16 , unit = unit )
59+ self .last_mode = None
60+ else :
61+ log .debug ("Aktive Batteriesteuerung. Batterie wird auf Stop gesetzt und nicht entladen" )
62+ if self .last_mode != 'stop' :
63+ # Entladesperre auch bei 100% SoC
64+ self .__tcp_client .write_registers (40048 , [1000 ], data_type = ModbusDataType .UINT_16 , unit = unit )
65+ self .last_mode = 'stop'
66+
67+ def power_limit_controllable (self ) -> bool :
68+ return True
69+
4970
5071component_descriptor = ComponentDescriptor (configuration_factory = SigenergyBatSetup )
0 commit comments