Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ def set_power_limit(self, power_limit: Optional[int]) -> None:
# Wenn der Speicher die Steuerung der Ladeleistung unterstützt, muss bei Übergabe einer Zahl auf aktive
# Speichersteurung umgeschaltet werden, sodass der Speicher mit der übergebenen Leistung lädt/entlädt. Wird
# None übergeben, muss der Speicher die Null-Punkt-Ausregelung selbst übernehmen.
Copy link

Copilot AI Feb 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same as above: write_register requires a numeric value, but power_limit is Optional[int]. Update the sample to handle the None case explicitly so the example doesn’t raise at runtime.

Suggested change
# None übergeben, muss der Speicher die Null-Punkt-Ausregelung selbst übernehmen.
# None übergeben, muss der Speicher die Null-Punkt-Ausregelung selbst übernehmen.
if power_limit is None:
# In diesem Fall übernimmt der Speicher selbst die Null-Punkt-Ausregelung, daher kein Register schreiben.
return

Copilot uses AI. Check for mistakes.
self.client.write_registers(reg, power_limit)
self.client.write_register(reg, power_limit)
# Wenn der Speicher keine Steuerung der Ladeleistung unterstützt
pass

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ def set_power_limit(self, power_limit: Optional[int]) -> None:
# Wenn der Speicher die Steuerung der Ladeleistung unterstützt, muss bei Übergabe einer Zahl auf aktive
# Speichersteurung umgeschaltet werden, sodass der Speicher mit der übergebenen Leistung lädt/entlädt. Wird
# None übergeben, muss der Speicher die Null-Punkt-Ausregelung selbst übernehmen.
Copy link

Copilot AI Feb 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The sample now calls write_register(reg, power_limit) but write_register expects a numeric value; power_limit is Optional[int] and may be None. Adjust the sample to either guard against None (and document the behavior) or write an explicit numeric fallback value.

Suggested change
# None übergeben, muss der Speicher die Null-Punkt-Ausregelung selbst übernehmen.
# None übergeben, muss der Speicher die Null-Punkt-Ausregelung selbst übernehmen.
if power_limit is None:
# Keine Vorgabe an den Speicher senden; dieser übernimmt die Null-Punkt-Ausregelung selbst.
return

Copilot uses AI. Check for mistakes.
self.client.write_registers(reg, power_limit)
self.client.write_register(reg, power_limit)
# Wenn der Speicher keine Steuerung der Ladeleistung unterstützt
pass

Expand Down
4 changes: 2 additions & 2 deletions packages/modules/devices/sigenergy/sigenergy/bat.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,13 +55,13 @@ def set_power_limit(self, power_limit: Optional[int]) -> None:
log.debug("Keine Batteriesteuerung, Selbstregelung durch Wechselrichter")
if self.last_mode is not None:
# Entladesperre ab 5%, Ansonsten Eigenregelung
self.client.write_register(40048, [50], data_type=ModbusDataType.UINT_16, unit=unit)
self.client.write_register(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.client.write_register(40048, [1000], data_type=ModbusDataType.UINT_16, unit=unit)
self.client.write_register(40048, 1000, data_type=ModbusDataType.UINT_16, unit=unit)
self.last_mode = 'stop'

def power_limit_controllable(self) -> bool:
Expand Down
14 changes: 7 additions & 7 deletions packages/modules/devices/solarmax/solarmax/bat.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,24 +53,24 @@ def set_power_limit(self, power_limit: Optional[int]) -> None:
if power_limit is None:
log.debug("Keine Batteriesteuerung, Selbstregelung durch Wechselrichter")
if self.last_mode is not None:
self.__tcp_client.write_registers(142, [0], data_type=ModbusDataType.INT_16, unit=unit)
self.client.write_register(142, 0, data_type=ModbusDataType.INT_16, unit=unit)
self.last_mode = None
elif power_limit >= 0:
# Solarmax kann nicht aktiv laden
log.debug("Aktive Batteriesteuerung. Batterie wird auf Stop gesetzt und nicht entladen")
self.__tcp_client.write_registers(140, [0], data_type=ModbusDataType.INT_16, unit=unit)
self.__tcp_client.write_registers(141, [0], data_type=ModbusDataType.INT_16, unit=unit)
self.__tcp_client.write_registers(142, [1], data_type=ModbusDataType.INT_16, unit=unit)
self.client.write_register(140, 0, data_type=ModbusDataType.INT_16, unit=unit)
self.client.write_register(141, 0, data_type=ModbusDataType.INT_16, unit=unit)
self.client.write_register(142, 1, data_type=ModbusDataType.INT_16, unit=unit)
self.last_mode = 'stop'
elif power_limit < 0:
log.debug(f"Aktive Batteriesteuerung. Batterie wird mit {power_limit} W entladen für den Hausverbrauch")
self.__tcp_client.write_registers(142, [1], data_type=ModbusDataType.INT_16, unit=unit)
self.client.write_register(142, 1, data_type=ModbusDataType.INT_16, unit=unit)
self.last_mode = 'discharge'
# Die maximale Entladeleistung begrenzen auf 5000W, maximaler Wertebereich Modbusregister.
power_value = int(min(abs(power_limit), 7000))
log.debug(f"Aktive Batteriesteuerung. Batterie wird mit {power_value} W entladen für den Hausverbrauch")
self.__tcp_client.write_registers(140, [power_value], data_type=ModbusDataType.INT_16, unit=unit)
self.__tcp_client.write_registers(141, [power_value], data_type=ModbusDataType.INT_16, unit=unit)
self.client.write_register(140, power_value, data_type=ModbusDataType.INT_16, unit=unit)
self.client.write_register(141, power_value, data_type=ModbusDataType.INT_16, unit=unit)

def power_limit_controllable(self) -> bool:
return self.component_config.configuration.power_limit_controllable
Expand Down