Refactor config_flow, add support for Ecowitt configuration
parent
7582f1e9b4
commit
aaaab107de
|
|
@ -13,6 +13,8 @@ from .const import (
|
||||||
API_KEY,
|
API_KEY,
|
||||||
DEV_DBG,
|
DEV_DBG,
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
|
ECOWITT,
|
||||||
|
ECOWITT_WEBHOOK_ID,
|
||||||
INVALID_CREDENTIALS,
|
INVALID_CREDENTIALS,
|
||||||
POCASI_CZ_API_ID,
|
POCASI_CZ_API_ID,
|
||||||
POCASI_CZ_API_KEY,
|
POCASI_CZ_API_KEY,
|
||||||
|
|
@ -53,6 +55,8 @@ class ConfigOptionsFlowHandler(OptionsFlow):
|
||||||
self.migrate_schema = {}
|
self.migrate_schema = {}
|
||||||
self.pocasi_cz: dict[str, Any] = {}
|
self.pocasi_cz: dict[str, Any] = {}
|
||||||
self.pocasi_cz_schema = {}
|
self.pocasi_cz_schema = {}
|
||||||
|
self.ecowitt: dict[str, Any] = {}
|
||||||
|
self.ecowitt_schema = {}
|
||||||
|
|
||||||
async def _get_entry_data(self):
|
async def _get_entry_data(self):
|
||||||
"""Get entry data."""
|
"""Get entry data."""
|
||||||
|
|
@ -117,9 +121,15 @@ class ConfigOptionsFlowHandler(OptionsFlow):
|
||||||
): bool,
|
): bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self.ecowitt = {
|
||||||
|
ECOWITT_WEBHOOK_ID: self.config_entry.options.get(ECOWITT_WEBHOOK_ID, "")
|
||||||
|
}
|
||||||
|
|
||||||
async def async_step_init(self, user_input=None):
|
async def async_step_init(self, user_input=None):
|
||||||
"""Manage the options - show menu first."""
|
"""Manage the options - show menu first."""
|
||||||
return self.async_show_menu(step_id="init", menu_options=["basic", "windy", "pocasi"])
|
return self.async_show_menu(
|
||||||
|
step_id="init", menu_options=["basic", "ecowitt", "windy", "pocasi"]
|
||||||
|
)
|
||||||
|
|
||||||
async def async_step_basic(self, user_input=None):
|
async def async_step_basic(self, user_input=None):
|
||||||
"""Manage basic options - credentials."""
|
"""Manage basic options - credentials."""
|
||||||
|
|
@ -141,14 +151,7 @@ class ConfigOptionsFlowHandler(OptionsFlow):
|
||||||
elif user_input[API_KEY] == user_input[API_ID]:
|
elif user_input[API_KEY] == user_input[API_ID]:
|
||||||
errors["base"] = "valid_credentials_match"
|
errors["base"] = "valid_credentials_match"
|
||||||
else:
|
else:
|
||||||
# retain windy data
|
self.retain_data(user_input)
|
||||||
user_input.update(self.windy_data)
|
|
||||||
|
|
||||||
# retain sensors
|
|
||||||
user_input.update(self.sensors)
|
|
||||||
|
|
||||||
# retain pocasi data
|
|
||||||
user_input.update(self.pocasi_cz)
|
|
||||||
|
|
||||||
return self.async_create_entry(title=DOMAIN, data=user_input)
|
return self.async_create_entry(title=DOMAIN, data=user_input)
|
||||||
|
|
||||||
|
|
@ -188,15 +191,7 @@ class ConfigOptionsFlowHandler(OptionsFlow):
|
||||||
errors=errors,
|
errors=errors,
|
||||||
)
|
)
|
||||||
|
|
||||||
# retain user_data
|
self.retain_data(user_input)
|
||||||
user_input.update(self.user_data)
|
|
||||||
|
|
||||||
# retain senors
|
|
||||||
user_input.update(self.sensors)
|
|
||||||
|
|
||||||
# retain pocasi cz
|
|
||||||
|
|
||||||
user_input.update(self.pocasi_cz)
|
|
||||||
|
|
||||||
return self.async_create_entry(title=DOMAIN, data=user_input)
|
return self.async_create_entry(title=DOMAIN, data=user_input)
|
||||||
|
|
||||||
|
|
@ -229,17 +224,23 @@ class ConfigOptionsFlowHandler(OptionsFlow):
|
||||||
data_schema=vol.Schema(self.pocasi_cz_schema),
|
data_schema=vol.Schema(self.pocasi_cz_schema),
|
||||||
errors=errors,
|
errors=errors,
|
||||||
)
|
)
|
||||||
# retain user data
|
|
||||||
user_input.update(self.user_data)
|
|
||||||
|
|
||||||
# retain senors
|
user_input = self.retain_data(user_input)
|
||||||
user_input.update(self.sensors)
|
|
||||||
|
|
||||||
# retain windy
|
|
||||||
user_input.update(self.windy_data)
|
|
||||||
|
|
||||||
return self.async_create_entry(title=DOMAIN, 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):
|
class ConfigFlowHandler(ConfigFlow, domain=DOMAIN):
|
||||||
"""Handle a config flow for Sencor SWS 12500 Weather Station."""
|
"""Handle a config flow for Sencor SWS 12500 Weather Station."""
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ DATABASE_PATH = "/config/home-assistant_v2.db"
|
||||||
POCASI_CZ_URL: Final = "http://ms.pocasimeteo.cz"
|
POCASI_CZ_URL: Final = "http://ms.pocasimeteo.cz"
|
||||||
POCASI_CZ_SEND_MINIMUM: Final = 12 # minimal time to resend data
|
POCASI_CZ_SEND_MINIMUM: Final = 12 # minimal time to resend data
|
||||||
|
|
||||||
|
|
||||||
ICON = "mdi:weather"
|
ICON = "mdi:weather"
|
||||||
|
|
||||||
API_KEY = "API_KEY"
|
API_KEY = "API_KEY"
|
||||||
|
|
@ -23,6 +24,9 @@ SENSOR_TO_MIGRATE: Final = "sensor_to_migrate"
|
||||||
DEV_DBG: Final = "dev_debug_checkbox"
|
DEV_DBG: Final = "dev_debug_checkbox"
|
||||||
WSLINK: Final = "wslink"
|
WSLINK: Final = "wslink"
|
||||||
|
|
||||||
|
ECOWITT: Final = "ecowitt"
|
||||||
|
ECOWITT_WEBHOOK_ID: Final = "ecowitt_webhook_id"
|
||||||
|
|
||||||
POCASI_CZ_API_KEY = "POCASI_CZ_API_KEY"
|
POCASI_CZ_API_KEY = "POCASI_CZ_API_KEY"
|
||||||
POCASI_CZ_API_ID = "POCASI_CZ_API_ID"
|
POCASI_CZ_API_ID = "POCASI_CZ_API_ID"
|
||||||
POCASI_CZ_SEND_INTERVAL = "POCASI_SEND_INTERVAL"
|
POCASI_CZ_SEND_INTERVAL = "POCASI_SEND_INTERVAL"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue