From c62b8e6b31a3dd91fb6361152f4d0e9586e0619d Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Thu, 27 Nov 2025 12:46:41 +0100 Subject: [PATCH] add phases --- packages/modules/devices/victron/victron/bat.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/modules/devices/victron/victron/bat.py b/packages/modules/devices/victron/victron/bat.py index 9b39cfed2a..3cfdf58048 100644 --- a/packages/modules/devices/victron/victron/bat.py +++ b/packages/modules/devices/victron/victron/bat.py @@ -51,13 +51,17 @@ def update(self) -> None: def set_power_limit(self, power_limit: Optional[int]) -> None: modbus_id = self.component_config.configuration.modbus_id vebus_id = self.component_config.configuration.vebus_id - # Wenn Victron Dynamic ESS aktiv, erfolgt keine weitere Regelung in openWB dynamic_ess_mode = self.__tcp_client.read_holding_registers(5400, ModbusDataType.UINT_16, unit=modbus_id) if dynamic_ess_mode == 1: log.debug("Dynamic ESS Mode ist aktiv, daher erfolgt keine Regelung des Speichers durch openWB") return + phases = self.__tcp_client.read_holding_registers(28, ModbusDataType.UINT_16, unit=vebus_id) + if phases == 1: + log.debug("Einphasiger Speicher erkannt, Speichersteuerung nur auf der ersten Phase.") + else: + log.debug("Mehrphasiger Speicher erkannt, Speichersteuerung auf 3 Phasen.") if power_limit is None: log.debug("Keine Batteriesteuerung, Selbstregelung durch Wechselrichter") if self.last_mode is not None: @@ -79,10 +83,18 @@ def set_power_limit(self, power_limit: Optional[int]) -> None: self.__tcp_client.write_registers(39, [0], data_type=ModbusDataType.UINT_16, unit=vebus_id) self.last_mode = 'discharge' # Die maximale Entladeleistung begrenzen auf 5000W + if phases == 3: + power_limit = power_limit / 3 power_value = int(min(power_limit, 5000)) - log.debug(f"Aktive Batteriesteuerung. Batterie wird mit {power_value} W entladen") + log.debug(f"Aktive Batteriesteuerung. Victron mit {phases} Phase(n). " + f"Batterie wird mit {power_value} W pro Phase entladen.") self.__tcp_client.write_registers( 37, [power_value & 0xFFFF], data_type=ModbusDataType.INT_16, unit=vebus_id) + if phases == 3: + self.__tcp_client.write_registers( + 40, [power_value & 0xFFFF], data_type=ModbusDataType.INT_16, unit=vebus_id) + self.__tcp_client.write_registers( + 41, [power_value & 0xFFFF], data_type=ModbusDataType.INT_16, unit=vebus_id) def power_limit_controllable(self) -> bool: return True