Skip to content

Commit 2e2c78c

Browse files
authored
Sigenery: add bat control (#2935)
* add bat control * fix register address
1 parent a45f0f6 commit 2e2c78c

File tree

1 file changed

+22
-1
lines changed
  • packages/modules/devices/sigenergy/sigenergy

1 file changed

+22
-1
lines changed

packages/modules/devices/sigenergy/sigenergy/bat.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/env python3
22
import logging
3-
from typing import TypedDict, Any
3+
from typing import TypedDict, Any, Optional
44
from modules.common.abstract_device import AbstractBat
55
from modules.common.component_state import BatState
66
from 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

5071
component_descriptor = ComponentDescriptor(configuration_factory=SigenergyBatSetup)

0 commit comments

Comments
 (0)