From e34f73a467e185a2a55f9bcbccc308f6005cdec4 Mon Sep 17 00:00:00 2001 From: SchiZzA Date: Sun, 7 Dec 2025 17:07:11 +0100 Subject: [PATCH] Refactor config_flow, add support for Ecowitt configuration --- custom_components/sws12500/config_flow.py | 49 +++++++++++------------ custom_components/sws12500/const.py | 4 ++ 2 files changed, 28 insertions(+), 25 deletions(-) diff --git a/custom_components/sws12500/config_flow.py b/custom_components/sws12500/config_flow.py index 60c3b83..6be91c9 100644 --- a/custom_components/sws12500/config_flow.py +++ b/custom_components/sws12500/config_flow.py @@ -13,6 +13,8 @@ from .const import ( API_KEY, DEV_DBG, DOMAIN, + ECOWITT, + ECOWITT_WEBHOOK_ID, INVALID_CREDENTIALS, POCASI_CZ_API_ID, POCASI_CZ_API_KEY, @@ -51,6 +53,8 @@ class ConfigOptionsFlowHandler(OptionsFlow): self.migrate_schema = {} self.pocasi_cz: dict[str, Any] = {} self.pocasi_cz_schema = {} + self.ecowitt: dict[str, Any] = {} + self.ecowitt_schema = {} @property def config_entry(self): @@ -133,10 +137,14 @@ class ConfigOptionsFlowHandler(OptionsFlow): ): bool, } + self.ecowitt = { + ECOWITT_WEBHOOK_ID: self.config_entry.options.get(ECOWITT_WEBHOOK_ID, "") + } + async def async_step_init(self, user_input=None): """Manage the options - show menu first.""" return self.async_show_menu( - step_id="init", menu_options=["basic", "windy", "pocasi"] + step_id="init", menu_options=["basic", "ecowitt", "windy", "pocasi"] ) async def async_step_basic(self, user_input=None): @@ -159,14 +167,7 @@ class ConfigOptionsFlowHandler(OptionsFlow): elif user_input[API_KEY] == user_input[API_ID]: errors["base"] = "valid_credentials_match" else: - # retain windy data - user_input.update(self.windy_data) - - # retain sensors - user_input.update(self.sensors) - - # retain pocasi data - user_input.update(self.pocasi_cz) + self.retain_data(user_input) return self.async_create_entry(title=DOMAIN, data=user_input) @@ -200,15 +201,7 @@ class ConfigOptionsFlowHandler(OptionsFlow): errors=errors, ) - # retain user_data - user_input.update(self.user_data) - - # retain senors - user_input.update(self.sensors) - - # retain pocasi cz - - user_input.update(self.pocasi_cz) + self.retain_data(user_input) return self.async_create_entry(title=DOMAIN, data=user_input) @@ -241,17 +234,23 @@ class ConfigOptionsFlowHandler(OptionsFlow): data_schema=vol.Schema(self.pocasi_cz_schema), errors=errors, ) - # retain user data - user_input.update(self.user_data) - # retain senors - user_input.update(self.sensors) - - # retain windy - user_input.update(self.windy_data) + user_input = self.retain_data(user_input) return self.async_create_entry(title=DOMAIN, data=user_input) + def retain_data(self, data: dict[str, Any]) -> dict[str, Any]: + """Retain user_data.""" + + return { + **self.user_data, + **self.windy_data, + **self.pocasi_cz, + **self.sensors, + **self.ecowitt, + **dict(data), + } + class ConfigFlowHandler(ConfigFlow, domain=DOMAIN): """Handle a config flow for Sencor SWS 12500 Weather Station.""" diff --git a/custom_components/sws12500/const.py b/custom_components/sws12500/const.py index 3fd2298..16caa6c 100644 --- a/custom_components/sws12500/const.py +++ b/custom_components/sws12500/const.py @@ -12,6 +12,7 @@ DATABASE_PATH = "/config/home-assistant_v2.db" POCASI_CZ_URL: Final = "http://ms.pocasimeteo.cz" POCASI_CZ_SEND_MINIMUM: Final = 12 # minimal time to resend data + ICON = "mdi:weather" API_KEY = "API_KEY" @@ -23,6 +24,9 @@ SENSOR_TO_MIGRATE: Final = "sensor_to_migrate" DEV_DBG: Final = "dev_debug_checkbox" WSLINK: Final = "wslink" +ECOWITT: Final = "ecowitt" +ECOWITT_WEBHOOK_ID: Final = "ecowitt_webhook_id" + POCASI_CZ_API_KEY = "POCASI_CZ_API_KEY" POCASI_CZ_API_ID = "POCASI_CZ_API_ID" POCASI_CZ_SEND_INTERVAL = "POCASI_SEND_INTERVAL"