diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index c164bf7572..fb4577ed0e 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]):