Refactor config_flow, add support for Ecowitt configuration

ecowitt_support
SchiZzA 2025-12-07 17:07:11 +01:00
parent 6edaec73d8
commit e34f73a467
No known key found for this signature in database
2 changed files with 28 additions and 25 deletions

View File

@ -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."""

View File

@ -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"