From b328f315f7365c84207fe476268b3205faf8abee Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Thu, 20 Nov 2025 11:44:17 +0100 Subject: [PATCH 1/2] adjustable vebus reg --- packages/helpermodules/update_config.py | 19 +++++++++++++++++++ .../modules/devices/victron/victron/bat.py | 10 ++++++---- .../modules/devices/victron/victron/config.py | 3 ++- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index c164bf7572..40bab2c29d 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -2636,3 +2636,22 @@ def upgrade(topic: str, payload) -> None: return {"openWB/optional/ep/flexible_tariff/provider": decode_payload(payload)} self._loop_all_received_topics(upgrade) self.__update_topic("openWB/system/datastore_version", 102) + + def upgrade_datastore_103(self) -> None: + def upgrade(topic: str, payload) -> None: + if re.search("openWB/system/device/[0-9]+", topic) is not None: + payload = decode_payload(payload) + index = get_index(topic) + if payload.get("type") == "victron": + for component_topic, component_payload in self.all_received_topics.items(): + if re.search(f"openWB/system/device/{index}/component/[0-9]+/config", + component_topic) is not None: + config_payload = decode_payload(component_payload) + if (config_payload["type"] == "bat" and + config_payload["configuration"].get("vebus_id") is None): + config_payload["configuration"].update({ + "vebus_id": 228, + }) + return {component_topic: config_payload} + self._loop_all_received_topics(upgrade) + self.__update_topic("openWB/system/datastore_version", 103) diff --git a/packages/modules/devices/victron/victron/bat.py b/packages/modules/devices/victron/victron/bat.py index d0fd546fb3..9b39cfed2a 100644 --- a/packages/modules/devices/victron/victron/bat.py +++ b/packages/modules/devices/victron/victron/bat.py @@ -50,6 +50,7 @@ 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) @@ -61,26 +62,27 @@ def set_power_limit(self, power_limit: Optional[int]) -> None: log.debug("Keine Batteriesteuerung, Selbstregelung durch Wechselrichter") if self.last_mode is not None: # ESS Mode 1 für Selbstregelung mit Phasenkompensation setzen - self.__tcp_client.write_registers(39, [0], data_type=ModbusDataType.UINT_16, unit=228) self.__tcp_client.write_registers(2902, [1], data_type=ModbusDataType.UINT_16, unit=modbus_id) + self.__tcp_client.write_registers(39, [0], data_type=ModbusDataType.UINT_16, unit=vebus_id) self.last_mode = None elif power_limit == 0: log.debug("Aktive Batteriesteuerung. Batterie wird auf Stop gesetzt und nicht entladen") if self.last_mode != 'stop': # ESS Mode 3 für externe Steuerung und keine Entladung self.__tcp_client.write_registers(2902, [3], data_type=ModbusDataType.UINT_16, unit=modbus_id) - self.__tcp_client.write_registers(39, [1], data_type=ModbusDataType.UINT_16, unit=228) + self.__tcp_client.write_registers(39, [1], data_type=ModbusDataType.UINT_16, unit=vebus_id) self.last_mode = 'stop' elif power_limit < 0: if self.last_mode != 'discharge': # ESS Mode 3 für externe Steuerung und auf L1 wird entladen self.__tcp_client.write_registers(2902, [3], data_type=ModbusDataType.UINT_16, unit=modbus_id) - self.__tcp_client.write_registers(39, [0], data_type=ModbusDataType.UINT_16, unit=228) + 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 power_value = int(min(power_limit, 5000)) log.debug(f"Aktive Batteriesteuerung. Batterie wird mit {power_value} W entladen") - self.__tcp_client.write_registers(37, [power_value & 0xFFFF], data_type=ModbusDataType.INT_16, unit=228) + self.__tcp_client.write_registers( + 37, [power_value & 0xFFFF], data_type=ModbusDataType.INT_16, unit=vebus_id) def power_limit_controllable(self) -> bool: return True diff --git a/packages/modules/devices/victron/victron/config.py b/packages/modules/devices/victron/victron/config.py index 808ac01526..b6b3ddd1e1 100644 --- a/packages/modules/devices/victron/victron/config.py +++ b/packages/modules/devices/victron/victron/config.py @@ -24,8 +24,9 @@ def __init__(self, class VictronBatConfiguration: - def __init__(self, modbus_id: int = 100): + def __init__(self, modbus_id: int = 100, vebus_id: int = 228): self.modbus_id = modbus_id + self.vebus_id = vebus_id class VictronBatSetup(ComponentSetup[VictronBatConfiguration]): From f61368284582b7a3c1850a927b49d3488bdfeab6 Mon Sep 17 00:00:00 2001 From: LKuemmel <76958050+LKuemmel@users.noreply.github.com> Date: Mon, 24 Nov 2025 11:57:30 +0100 Subject: [PATCH 2/2] Update packages/helpermodules/update_config.py --- packages/helpermodules/update_config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index 40bab2c29d..fb4577ed0e 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -2644,7 +2644,7 @@ def upgrade(topic: str, payload) -> None: index = get_index(topic) if payload.get("type") == "victron": for component_topic, component_payload in self.all_received_topics.items(): - if re.search(f"openWB/system/device/{index}/component/[0-9]+/config", + if re.search(f"openWB/system/device/{index}/component/[0-9]+/config$", component_topic) is not None: config_payload = decode_payload(component_payload) if (config_payload["type"] == "bat" and