diff --git a/packages/helpermodules/setdata.py b/packages/helpermodules/setdata.py index 6d1609d069..f631d09901 100644 --- a/packages/helpermodules/setdata.py +++ b/packages/helpermodules/setdata.py @@ -1025,7 +1025,7 @@ def process_system_topic(self, msg: mqtt.MQTTMessage): elif "openWB/set/system/time" in msg.topic: self._validate_value(msg, float) elif "openWB/set/system/datastore_version" in msg.topic: - self._validate_value(msg, int, [(0, UpdateConfig.DATASTORE_VERSION)]) + self._validate_value(msg, int, [(0, UpdateConfig.DATASTORE_VERSION)], collection=list) elif "openWB/set/system/GetRemoteSupport" in msg.topic: # Server-Topic enthält kein json-Payload. payload = msg.payload.decode("utf-8") diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index 35546cc50b..1e79a285aa 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -57,7 +57,7 @@ class UpdateConfig: - DATASTORE_VERSION = 102 + DATASTORE_VERSION = 101 valid_topic = [ "^openWB/bat/config/bat_control_permitted$", @@ -593,7 +593,7 @@ class UpdateConfig: ("openWB/system/current_commit", None), ("openWB/system/installAssistantDone", False), ("openWB/system/dataprotection_acknowledged", False), - ("openWB/system/datastore_version", DATASTORE_VERSION), + ("openWB/system/datastore_version", list(range(DATASTORE_VERSION))), ("openWB/system/usage_terms_acknowledged", False), ("openWB/system/debug_level", 30), ("openWB/system/device/module_update_completed", True), @@ -707,16 +707,20 @@ def __update_version(self): self.__update_topic("openWB/system/version", version) def __solve_breaking_changes(self) -> None: - """ solve breaking changes in the datastore - """ - datastore_version = (decode_payload(self.all_received_topics.get("openWB/system/datastore_version")) or - self.DATASTORE_VERSION) - log.debug(f"current datastore version: {datastore_version}") + """ datastore_version ist eine Liste mit allen durchgeführten datastore-Upgrades, damit bei Patch-Versionen + einzelne Upgrades übersprungen werden können und bei einem anschließenden Major-Upgrade alle fehlenden Upgrades + durchgeführt werden.""" + datastore_versions = decode_payload(self.all_received_topics.get("openWB/system/datastore_version")) + if datastore_versions is None or isinstance(datastore_versions, int): + datastore_versions = list(range(datastore_versions or self.DATASTORE_VERSION+1)) + self.__update_topic("openWB/system/datastore_version", datastore_versions) + log.debug(f"current datastore version: {datastore_versions}") log.debug(f"target datastore version: {self.DATASTORE_VERSION}") - for version in range(datastore_version, self.DATASTORE_VERSION): + for version in list(range(self.DATASTORE_VERSION+1)): try: - log.debug(f"upgrading datastore from version '{version}' to '{version + 1}'") - getattr(self, f"upgrade_datastore_{version}")() + if version not in datastore_versions: + log.debug(f"upgrading datastore version '{version}'") + getattr(self, f"upgrade_datastore_{version}")() except AttributeError: log.error(f"missing upgrade function! '{version}'") except Exception: @@ -736,6 +740,12 @@ def _loop_all_received_topics(self, callback) -> None: for topic, payload in modified_topics.items(): self.__update_topic(topic, payload) + def _append_datastore_version(self, version: int) -> None: + datastore_versions = decode_payload(self.all_received_topics.get("openWB/system/datastore_version")) + if version not in datastore_versions: + datastore_versions.append(version) + self.__update_topic("openWB/system/datastore_version", datastore_versions) + def upgrade_datastore_0(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: modified_topics = {} @@ -833,7 +843,7 @@ def upgrade_logs() -> None: self._loop_all_received_topics(upgrade) upgrade_logs() - self.__update_topic("openWB/system/datastore_version", 1) + self._append_datastore_version(0) def upgrade_datastore_1(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -860,7 +870,7 @@ def get_decoded_value(name: str) -> float: modified_topics[f"{simulation_topic}/present_exported"] = "" return modified_topics self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 2) + self._append_datastore_version(1) def upgrade_datastore_2(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -875,7 +885,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: updated_payload["limit"].pop("soc") return {topic: updated_payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 3) + self._append_datastore_version(2) def upgrade_datastore_3(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -888,14 +898,14 @@ def upgrade(topic: str, payload) -> Optional[dict]: updated_payload["limit"] = {"selected": "soc", "amount": 1000, "soc": 70} return {topic: updated_payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 4) + self._append_datastore_version(3) def upgrade_datastore_4(self) -> None: moved_file = False for path in Path("/etc/mosquitto/conf.d").glob('99-bridge-openwb-*.conf'): run_command(["sudo", "mv", str(path), str(path).replace("conf.d", "conf_local.d")], process_exception=True) moved_file = True - self.__update_topic("openWB/system/datastore_version", 5) + self._append_datastore_version(4) if moved_file: time.sleep(1) run_command([str(self.base_path / "runs" / "reboot.sh")], process_exception=True) @@ -910,7 +920,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: updated_payload["max_current_multi_phases"] = 32 return {topic: updated_payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 6) + self._append_datastore_version(5) def upgrade_datastore_6(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -920,7 +930,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: payload["autolock"].pop("plans") return {topic: payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 7) + self._append_datastore_version(6) def upgrade_datastore_7(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -930,7 +940,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: payload["keep_charge_active_duration"] = EvTemplateData().keep_charge_active_duration return {topic: payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 8) + self._append_datastore_version(7) def upgrade_datastore_8(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -946,7 +956,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: updated_payload.pop("power_module") return {topic: payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 9) + self._append_datastore_version(8) def upgrade_datastore_9(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -957,7 +967,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: log.debug("cloud bridge configuration upgraded") return {topic: payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 10) + self._append_datastore_version(9) def upgrade_datastore_10(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -968,7 +978,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: updated_payload["average_consump"] = payload["average_consump"] * 1000 return {topic: updated_payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 11) + self._append_datastore_version(10) def upgrade_datastore_11(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -979,7 +989,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: payload["configuration"].update({"duo_num": 0}) return {topic: payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 12) + self._append_datastore_version(11) def upgrade_datastore_12(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -989,7 +999,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: return {f"openWB/set/vehicle/{index}/soc_module/interval_config": dataclass_utils.asdict(GeneralVehicleConfig())} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 13) + self._append_datastore_version(12) def upgrade_datastore_13(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -1000,7 +1010,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: updated_payload["configuration"]["duo_num"] = payload["configuration"]["duo_num"] - 1 return {topic: updated_payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 14) + self._append_datastore_version(13) def upgrade_datastore_14(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -1011,7 +1021,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: payload["configuration"].pop("ip_adress") return {topic: payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 15) + self._append_datastore_version(14) def upgrade_datastore_15(self) -> None: files = glob.glob(str(self.base_path / "data" / "daily_log") + "/*") @@ -1042,7 +1052,7 @@ def upgrade_datastore_15(self) -> None: log.debug(f"Format der Logdatei '{file}' aktualisiert.") except Exception: log.exception(f"Logdatei '{file}' konnte nicht konvertiert werden.") - self.__update_topic("openWB/system/datastore_version", 16) + self._append_datastore_version(15) def upgrade_datastore_16(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -1063,7 +1073,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: modified_topics[topic_component] = payload_component return modified_topics self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 17) + self._append_datastore_version(16) def upgrade_datastore_17(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -1084,7 +1094,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: modified_topics[topic_component] = payload_inverter return modified_topics self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 18) + self._append_datastore_version(17) def upgrade_datastore_18(self) -> None: def convert_file(file): @@ -1107,7 +1117,7 @@ def convert_file(file): log.exception(f"Logdatei '{file}' konnte nicht konvertiert werden.") convert_file(f"{str(self.base_path / 'data' / 'daily_log')}/{timecheck.create_timestamp_YYYYMMDD()}.json") convert_file(f"{str(self.base_path / 'data' / 'monthly_log')}/{timecheck.create_timestamp_YYYYMM()}.json") - self.__update_topic("openWB/system/datastore_version", 19) + self._append_datastore_version(18) def upgrade_datastore_19(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -1122,7 +1132,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: else: return {topic: None} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 20) + self._append_datastore_version(19) def upgrade_datastore_20(self) -> None: max_c_socket = get_hardware_configuration_setting("max_c_socket") @@ -1130,7 +1140,7 @@ def upgrade_datastore_20(self) -> None: update_hardware_configuration({"max_c_socket": int(max_c_socket)}) elif max_c_socket is None: update_hardware_configuration({"max_c_socket": 32}) - self.__update_topic("openWB/system/datastore_version", 21) + self._append_datastore_version(20) def upgrade_datastore_21(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -1155,7 +1165,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: topic: config_payload } self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 22) + self._append_datastore_version(21) def upgrade_datastore_22(self) -> None: files = glob.glob(str(self.base_path / "data" / "charge_log") + "/*") @@ -1176,7 +1186,7 @@ def upgrade_datastore_22(self) -> None: log.debug(f"Format des Ladeprotokolls '{file}' aktualisiert.") except Exception: log.exception(f"Ladeprotokoll '{file}' konnte nicht aktualisiert werden.") - self.__update_topic("openWB/system/datastore_version", 23) + self._append_datastore_version(22) def upgrade_datastore_23(self) -> None: def upgrade(topic: str, payload) -> None: @@ -1190,7 +1200,7 @@ def upgrade(topic: str, payload) -> None: f"'{bridge_configuration['name']}' ({index})") pub_system_message(payload, result, MessageType.SUCCESS) self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 24) + self._append_datastore_version(23) def upgrade_datastore_24(self) -> None: # Wenn mehrere EV eine Fahrzeug-Vorlage nutzen, wird die Effizienz des letzten für alle in der Vorlage gesetzt. @@ -1214,7 +1224,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: modified_topics[ev_template_topic] = ev_template return modified_topics self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 25) + self._append_datastore_version(24) def upgrade_datastore_25(self) -> None: files = glob.glob(str(self.base_path / "data" / "charge_log") + "/*") @@ -1233,7 +1243,7 @@ def upgrade_datastore_25(self) -> None: log.debug(f"Format des Ladeprotokolls '{file}' aktualisiert.") except Exception: log.exception(f"Ladeprotokoll '{file}' konnte nicht aktualisiert werden.") - self.__update_topic("openWB/system/datastore_version", 26) + self._append_datastore_version(25) def upgrade_datastore_26(self) -> None: # module kostal_pico_old: rename "ip_address" in configuration to "url" as we need a complete url @@ -1250,7 +1260,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: f"http://{configuration_payload['configuration']['url']}") return {topic: configuration_payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 27) + self._append_datastore_version(26) def upgrade_datastore_27(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -1267,7 +1277,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: configuration_payload.update({"official": True}) return {topic: configuration_payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 28) + self._append_datastore_version(27) def upgrade_datastore_28(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -1277,12 +1287,12 @@ def upgrade(topic: str, payload) -> Optional[dict]: payload.pop("request_start_soc") return {topic: payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 29) + self._append_datastore_version(28) def upgrade_datastore_29(self) -> None: """ moved to upgrade_datastore_32 """ - self.__update_topic("openWB/system/datastore_version", 30) + self._append_datastore_version(29) def upgrade_datastore_30(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -1293,7 +1303,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: payload["request_interval_not_charging"] = payload["request_interval_not_charging"]*60 return {topic: payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 31) + self._append_datastore_version(30) def upgrade_datastore_31(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -1303,7 +1313,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: updated_payload = datetime.datetime.strptime(payload, "%m/%d/%Y, %H:%M:%S").timestamp() return {topic: updated_payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 32) + self._append_datastore_version(31) def upgrade_datastore_32(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -1321,7 +1331,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: "openWB/set/general/prices/pv": price } self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 33) + self._append_datastore_version(32) def upgrade_datastore_33(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -1334,7 +1344,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: updated_payload = payload/1000 # €/kWh -> €/Wh return {topic: updated_payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 34) + self._append_datastore_version(33) def upgrade_datastore_34(self) -> None: def convert_file(file): @@ -1368,7 +1378,7 @@ def convert_file(file): convert_file(file) # next upgrade only fixes a bug introduced in an earlier version of this method # so we can skip upgrade_datastore_35() if this fixed version has run - self.__update_topic("openWB/system/datastore_version", 36) + self._append_datastore_version(35) def upgrade_datastore_35(self) -> None: def convert_file(file): @@ -1394,13 +1404,13 @@ def convert_file(file): files.sort() for file in files: convert_file(file) - self.__update_topic("openWB/system/datastore_version", 36) + self._append_datastore_version(35) # def upgrade_datastore_36(self) -> None: # if hardware_configuration.get_hardware_configuration_setting("ripple_control_receiver_configured", False): # Pub().pub("openWB/set/general/ripple_control_receiver/module", dataclass_utils.asdict(GpioRcr())) # hardware_configuration.remove_setting_hardware_configuration("ripple_control_receiver_configured") - # self.__update_topic("openWB/system/datastore_version", 37) + # self._append_datastore_version(36) def upgrade_datastore_37(self) -> None: def collect_names(topic: str, payload) -> None: @@ -1445,7 +1455,7 @@ def convert_file(file): files.sort() for file in files: convert_file(file) - self.__update_topic("openWB/system/datastore_version", 38) + self._append_datastore_version(37) def upgrade_datastore_38(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -1458,7 +1468,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: updated_payload.update({"timestamp_start_charging": converted_timestamp}) return {topic: updated_payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 39) + self._append_datastore_version(38) def upgrade_datastore_39(self) -> None: def upgrade(topic: str, payload) -> None: @@ -1549,7 +1559,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: elif "openWB/general/chargemode_config/pv_charging/charging_power_reserve" == topic: return {"openWB/general/chargemode_config/pv_charging/bat_power_reserve": decode_payload(payload)} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 42) + self._append_datastore_version(41) def upgrade_datastore_42(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -1560,7 +1570,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: return {"openWB/general/chargemode_config/pv_charging/bat_power_reserve_active": decode_payload( payload) > 0} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 43) + self._append_datastore_version(42) def upgrade_datastore_43(self) -> None: def upgrade(topic: str, payload) -> None: @@ -1652,7 +1662,7 @@ def upgrade_datastore_44(self) -> None: log.exception(f"Logdatei '{filepath}' konnte nicht konvertiert werden.") except Exception: log.exception("Fehler beim Konvertieren der Logdateien") - self.__update_topic("openWB/system/datastore_version", 45) + self._append_datastore_version(44) def upgrade_datastore_45(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -1662,7 +1672,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: "openWB/general/chargemode_config/phase_switch_delay": delay, } self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 46) + self._append_datastore_version(45) def upgrade_datastore_46(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -1680,7 +1690,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: payload.pop("rfid_enabling") return {topic: updated_payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 47) + self._append_datastore_version(46) def upgrade_datastore_47(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -1691,7 +1701,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: updated_payload.update({"disable_after_unplug": False}) return {topic: updated_payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 48) + self._append_datastore_version(47) def upgrade_datastore_48(self) -> None: def upgrade(topic: str, payload) -> None: @@ -1703,7 +1713,7 @@ def upgrade(topic: str, payload) -> None: payload["configuration"].update({"version": GoodWeVersion.V_1_7}) Pub().pub(topic, payload) self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 49) + self._append_datastore_version(48) def upgrade_datastore_49(self) -> None: Pub().pub("openWB/system/installAssistantDone", True) @@ -1722,7 +1732,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: else: return {topic: ""} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 51) + self._append_datastore_version(50) def upgrade_datastore_51(self) -> None: def upgrade(topic: str, payload) -> None: @@ -1733,11 +1743,11 @@ def upgrade(topic: str, payload) -> None: payload["configuration"].pop("device_type") Pub().pub(topic, payload) self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 52) + self._append_datastore_version(51) def upgrade_datastore_52(self) -> None: # PR reverted - self.__update_topic("openWB/system/datastore_version", 53) + self._append_datastore_version(52) def upgrade_datastore_53(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -1758,7 +1768,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: }) return {topic: configuration_payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 54) + self._append_datastore_version(53) def upgrade_datastore_54(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -1766,7 +1776,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: payload = decode_payload(payload) return {"openWB/counter/config/consider_less_charging": payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 55) + self._append_datastore_version(54) def upgrade_datastore_55(self) -> None: if hardware_configuration.exists_hardware_configuration_setting("dc_charging") is False: @@ -1780,7 +1790,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: updated_payload["charging_type"] = ChargingType.AC.value return {topic: updated_payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 56) + self._append_datastore_version(55) def upgrade_datastore_56(self) -> None: # es gibt noch Topics von Komponenten gelöschter Geräte @@ -1804,7 +1814,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: log.debug(f"Entferne Topic von gelöschter Komponente {topic}") return {topic: ""} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 57) + self._append_datastore_version(56) def upgrade_datastore_57(self) -> None: def upgrade(topic: str, payload) -> None: @@ -1816,7 +1826,7 @@ def upgrade(topic: str, payload) -> None: payload["configuration"].update({"factor": 1}) Pub().pub(topic, payload) self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 58) + self._append_datastore_version(57) def upgrade_datastore_58(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -1832,7 +1842,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: config_payload.update({"info": {"manufacturer": None, "model": None}}) return {topic: config_payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 59) + self._append_datastore_version(58) def upgrade_datastore_59(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -1871,7 +1881,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: log.debug(f"Device configuration: {device_config}") return {topic: device_config} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 60) + self._append_datastore_version(59) def upgrade_datastore_60(self) -> None: def upgrade(topic: str, payload) -> None: @@ -1885,7 +1895,7 @@ def upgrade(topic: str, payload) -> None: payload["configuration"].update({"factor": -1}) Pub().pub(topic, payload) self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 61) + self._append_datastore_version(60) def upgrade_datastore_61(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -1895,14 +1905,14 @@ def upgrade(topic: str, payload) -> Optional[dict]: max_power_errorcase = get_counter_default_config()["max_power_errorcase"] return {f"openWB/counter/{index}/config/max_power_errorcase": max_power_errorcase} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 62) + self._append_datastore_version(61) def upgrade_datastore_62(self) -> None: pub_system_message( {}, "Bei einem Zählerausfall werden nun 7kW für diesen Zähler freigegeben. Bisher wurde im " "Fehlerfall die Ladung gestoppt. Du kannst die maximale Leistung im Fehlerfall für jeden Zähler" " unter Einstellungen -> Konfiguration -> Lastmanagement anpassen.", MessageType.WARNING) - self.__update_topic("openWB/system/datastore_version", 63) + self._append_datastore_version(62) def upgrade_datastore_63(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -1911,18 +1921,18 @@ def upgrade(topic: str, payload) -> Optional[dict]: if f"openWB/bat/{index}/get/power_limit_controllable" not in self.all_received_topics.keys(): return {f"openWB/bat/{index}/get/power_limit_controllable": False} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 64) + self._append_datastore_version(63) def upgrade_datastore_64(self) -> None: pub_system_message( {}, 'Garantieverlängerung für die openWB verfügbar -> ' 'https://wb-solution.de/shop/', MessageType.INFO) - self.__update_topic("openWB/system/datastore_version", 65) + self._append_datastore_version(64) def upgrade_datastore_65(self) -> None: # sungrow version fixed in upgrade_datastore_71 - self.__update_topic("openWB/system/datastore_version", 66) + self._append_datastore_version(65) def upgrade_datastore_66(self) -> None: def upgrade(topic: str, payload) -> None: @@ -1933,7 +1943,7 @@ def upgrade(topic: str, payload) -> None: payload["configuration"].update({"type": "s_dongle"}) Pub().pub(topic, payload) self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 67) + self._append_datastore_version(66) def upgrade_datastore_67(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -1941,7 +1951,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: if decode_payload(payload) < 5: return {"openWB/general/chargemode_config/phase_switch_delay": 5} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 68) + self._append_datastore_version(67) def upgrade_datastore_68(self) -> None: def upgrade(topic: str, payload) -> None: @@ -1957,7 +1967,7 @@ def upgrade(topic: str, payload) -> None: config_payload.update({"info": {"manufacturer": None, "model": None}}) return {component_topic: config_payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 69) + self._append_datastore_version(68) def upgrade_datastore_69(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -1969,7 +1979,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: payload["id"] = int(get_second_index(topic)) return {topic: payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 70) + self._append_datastore_version(69) def upgrade_datastore_70(self) -> None: def upgrade(topic: str, payload) -> None: @@ -1980,7 +1990,7 @@ def upgrade(topic: str, payload) -> None: payload = NO_MODULE return {topic: payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 71) + self._append_datastore_version(70) def upgrade_datastore_71(self) -> None: def upgrade(topic: str, payload) -> None: @@ -1996,7 +2006,7 @@ def upgrade(topic: str, payload) -> None: payload["configuration"]["firmware"] = "v2" return {topic: payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 72) + self._append_datastore_version(71) def upgrade_datastore_72(self) -> None: def upgrade(topic: str, payload) -> None: @@ -2007,7 +2017,7 @@ def upgrade(topic: str, payload) -> None: payload = NO_MODULE return {topic: payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 73) + self._append_datastore_version(72) def upgrade_datastore_73(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -2018,7 +2028,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: config_payload.update({"info": {"manufacturer": None, "model": None}}) return {topic: config_payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 74) + self._append_datastore_version(73) def upgrade_datastore_74(self) -> None: def upgrade(topic: str, payload) -> None: @@ -2030,7 +2040,7 @@ def upgrade(topic: str, payload) -> None: payload["configuration"].update({"version": "g3"}) return {topic: payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 75) + self._append_datastore_version(74) def upgrade_datastore_75(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -2073,14 +2083,14 @@ def upgrade(topic: str, payload) -> Optional[dict]: return {'openWB/system/io/0/config': dataclass_utils.asdict(io_device), 'openWB/io/action/0/config': dataclass_utils.asdict(action)} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 76) + self._append_datastore_version(75) def upgrade_datastore_76(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: if re.search("openWB/chargepoint/[0-9]+/control_parameter/limit", topic) is not None: return {topic: dataclass_utils.asdict(LoadmanagementLimit(None, None))} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 77) + self._append_datastore_version(76) def upgrade_datastore_77(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -2111,7 +2121,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: configuration_payload.update({"official": True}) return {topic: configuration_payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 78) + self._append_datastore_version(77) def upgrade_datastore_78(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -2126,7 +2136,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: # Nachricht nur einmal senden break self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 79) + self._append_datastore_version(78) def upgrade_datastore_79(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -2143,7 +2153,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: return {(f"openWB/system/device/{device_config['id']}/component/" f"{component_config['id']}/simulation"): ""} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 80) + self._append_datastore_version(79) # moved and corrected to 87 @@ -2163,7 +2173,7 @@ def upgrade(topic: str, payload) -> None: decode_payload(template_payload)}) return topics self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 82) + self._append_datastore_version(81) def upgrade_datastore_82(self) -> None: def upgrade(topic: str, payload) -> None: @@ -2237,7 +2247,7 @@ def get_new_phases_to_use(topic) -> int: charge_template.pop("et") return topics self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 83) + self._append_datastore_version(82) def upgrade_datastore_83(self) -> None: def upgrade(topic: str, payload) -> None: @@ -2256,7 +2266,7 @@ def upgrade(topic: str, payload) -> None: }) return {component_topic: config_payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 84) + self._append_datastore_version(83) def upgrade_datastore_84(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -2311,7 +2321,7 @@ def cp_upgrade(topic: str, payload) -> Optional[dict]: return {f'openWB/chargepoint/{index}/set/charge_template': charge_template} self._loop_all_received_topics(upgrade) self._loop_all_received_topics(cp_upgrade) - self.__update_topic("openWB/system/datastore_version", 85) + self._append_datastore_version(84) def upgrade_datastore_85(self) -> None: def upgrade(topic: str, payload) -> None: @@ -2330,7 +2340,7 @@ def upgrade(topic: str, payload) -> None: }) return {component_topic: config_payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 86) + self._append_datastore_version(85) def upgrade_datastore_86(self) -> None: if "openWB/bat/get/power_limit_controllable" not in self.all_received_topics: @@ -2342,7 +2352,7 @@ def upgrade_datastore_86(self) -> None: "rechtlichen Hinweise " "für die Speichersteuerung. Die Speichersteuerung war bisher bereits verfügbar, ist" " jedoch bis zum Akzeptieren standardmäßig deaktiviert.", MessageType.WARNING) - self.__update_topic("openWB/system/datastore_version", 87) + self._append_datastore_version(86) def upgrade_datastore_87(self) -> None: def upgrade(topic: str, payload) -> None: @@ -2353,12 +2363,12 @@ def upgrade(topic: str, payload) -> None: payload.update({"id": index}) return {topic: payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 88) + self._append_datastore_version(87) def upgrade_datastore_88(self) -> None: pub_system_message({}, "Es gibt ein neues Theme: das Koala-Theme! Smarthpone-optimiert und mit " "Energiefluss-Diagramm & Karten-Ansicht der Ladepunkte", MessageType.INFO) - self.__update_topic("openWB/system/datastore_version", 89) + self._append_datastore_version(88) def upgrade_datastore_89(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -2380,7 +2390,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: log.debug(f"Updated IO action configuration: {topic}: {payload}") return {topic: payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 90) + self._append_datastore_version(89) def upgrade_datastore_90(self) -> None: def upgrade(topic: str, payload) -> None: @@ -2405,7 +2415,7 @@ def upgrade(topic: str, payload) -> None: no_json=True) time.sleep(2) self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 91) + self._append_datastore_version(90) def upgrade_datastore_91(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -2421,7 +2431,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: plan.update({"bidi": False, "bidi_power": 10000}) return {topic: payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 92) + self._append_datastore_version(91) def upgrade_datastore_92(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -2434,7 +2444,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: plan.update({"bidi_charging_enabled": bidi_charging_enabled}) return {topic: payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 93) + self._append_datastore_version(92) def upgrade_datastore_93(self) -> None: # Pläne die keinen plans Key haben, id=None @@ -2521,7 +2531,7 @@ def upgrade_datastore_93(self) -> None: modified_topics[f"openWB/chargepoint/template/{get_index(topic)}"] = payload for topic, payload in modified_topics.items(): self.__update_topic(topic, payload) - self.__update_topic("openWB/system/datastore_version", 94) + self._append_datastore_version(93) def upgrade_datastore_94(self): def upgrade(topic, payload): @@ -2544,7 +2554,7 @@ def upgrade(topic, payload): plan["id"] = max_id return {topic: payload, "openWB/command/max_id/charge_template_scheduled_plan": max_id} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 95) + self._append_datastore_version(94) def upgrade_datastore_95(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -2562,7 +2572,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: payload["id"] = topic_index return {topic: payload} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 96) + self._append_datastore_version(95) def upgrade_datastore_98(self) -> None: version_str = decode_payload( @@ -2580,7 +2590,7 @@ def upgrade_datastore_98(self) -> None: " -> Darstellung & Bedienung angewendet werden.", MessageType.INFO, ) - self.__update_topic("openWB/system/datastore_version", 99) + self._append_datastore_version(98) def upgrade_datastore_99(self) -> None: # bei Aktualisierung den max_bat_soc auf min_bat_soc setzen @@ -2590,7 +2600,7 @@ def upgrade_datastore_99(self) -> None: "openWB/general/chargemode_config/pv_charging/min_bat_soc"]) self.__update_topic("openWB/general/chargemode_config/pv_charging/max_bat_soc", min_bat_soc) - self.__update_topic("openWB/system/datastore_version", 100) + self._append_datastore_version(99) def upgrade_datastore_100(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: @@ -2601,7 +2611,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: return {"openWB/general/chargemode_config/pv_charging/phase_switch_delay": decode_payload(payload)} self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 101) + self._append_datastore_version(100) def upgrade_datastore_101(self) -> None: def upgrade(topic: str, payload) -> None: @@ -2612,4 +2622,4 @@ def upgrade(topic: str, payload) -> None: payload["configuration"].update({"phase": 1}) Pub().pub(topic, payload) self._loop_all_received_topics(upgrade) - self.__update_topic("openWB/system/datastore_version", 102) + self._append_datastore_version(101) diff --git a/packages/helpermodules/update_config_test.py b/packages/helpermodules/update_config_test.py index 3b2addd873..7101720081 100644 --- a/packages/helpermodules/update_config_test.py +++ b/packages/helpermodules/update_config_test.py @@ -45,6 +45,7 @@ def test_upgrade_datastore_94(index_test_template, expected_index): with open(Path(__file__).resolve().parents[0]/"upgrade_datastore_94.json", "r") as f: test_data = f.read() update_con.all_received_topics.update(json.loads(test_data)[index_test_template]) + update_con.all_received_topics["openWB/system/datastore_version"] = list(range(93)) update_con.upgrade_datastore_94()