Skip to content

Commit

Permalink
removed last_mode and read register instead
Browse files Browse the repository at this point in the history
  • Loading branch information
seaspotter authored Mar 7, 2025
1 parent d60827f commit 85c0ef9
Showing 1 changed file with 21 additions and 11 deletions.
32 changes: 21 additions & 11 deletions packages/modules/devices/sungrow/sungrow/bat.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ def __init__(self,
self.sim_counter = SimCounter(self.device_config.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 = None

def update(self) -> None:
unit = self.device_config.configuration.modbus_id
Expand Down Expand Up @@ -71,26 +70,37 @@ def update(self) -> None:
def set_power_limit(self, power_limit: Optional[int]) -> None:
unit = self.device_config.configuration.modbus_id

try:
current_ems_mode = self.__tcp_client.read_holding_registers(13049, ModbusDataType.UINT_16, unit=unit)
log.debug(f"Aktueller EMS-Modus aus Register 13049: {current_ems_mode}")
except Exception as e:
log.error(f"Fehler beim Lesen des aktuellen Modus: {e}")
return

if power_limit is None:
log.debug("Keine Batteriesteuerung, Selbstregelung durch Wechselrichter")
if self.last_mode != "auto":
if current_ems_mode != 0:
self.__tcp_client.write_registers(13049, [0], data_type=ModbusDataType.UINT_16, unit=unit)
self.__tcp_client.write_registers(13050, [0xCC], data_type=ModbusDataType.UINT_16, unit=unit)
self.last_mode = "auto"
elif power_limit == 0:
log.debug("Aktive Batteriesteuerung. Batterie wird auf Stop gesetzt")
if self.last_mode != "stop":
log.debug("Aktive Batteriesteuerung. Batterie wird auf Stop gesetzt und nicht entladen")
if current_ems_mode != 2:
self.__tcp_client.write_registers(13049, [2], data_type=ModbusDataType.UINT_16, unit=unit)
self.__tcp_client.write_registers(13050, [0xCC], data_type=ModbusDataType.UINT_16, unit=unit)
self.last_mode = "stop"
else:
log.debug("Aktive Batteriesteuerung. Batterie wird auf Entladen gesetzt")
if self.last_mode != "discharge":
else:
# Sicherstellen, dass Register 13050 auf 0xCC gesetzt ist
self.__tcp_client.write_registers(13050, [0xCC], data_type=ModbusDataType.UINT_16, unit=unit)
elif power_limit > 0:
log.debug("Aktive Batteriesteuerung. Batterie wird entladen für den Hausverbrauch")
if current_ems_mode != 2:
self.__tcp_client.write_registers(13049, [2], data_type=ModbusDataType.UINT_16, unit=unit)
self.__tcp_client.write_registers(13050, [0xBB], data_type=ModbusDataType.UINT_16, unit=unit)
self.last_mode = "discharge"
# Die maximale Entladeleistung begrenzen auf 5000W
else:
# Sicherstellen, dass Register 13050 auf 0xBB gesetzt ist
self.__tcp_client.write_registers(13050, [0xBB], data_type=ModbusDataType.UINT_16, unit=unit)
# Die maximale Entladeleistung begrenzen auf 5000W, maximaler Wertebereich Modbusregister.
power_value = int(min(power_limit, 5000))
log.debug(f"Entladeleistung wird auf {power_value} W gesetzt")
self.__tcp_client.write_registers(13051, [power_value], data_type=ModbusDataType.UINT_16, unit=unit)


Expand Down

0 comments on commit 85c0ef9

Please sign in to comment.