ha-alarm-clock/custom_components/reveil/config_flow.py
2026-09-20 20:48:17 +02:00

100 lines
2.8 KiB
Python

"""Config flow et options flow de l'intégration Réveil."""
from __future__ import annotations
from typing import Any
import voluptuous as vol
from homeassistant.config_entries import (
ConfigEntry,
ConfigFlow,
ConfigFlowResult,
OptionsFlow,
)
from homeassistant.const import CONF_NAME
from homeassistant.core import callback
from homeassistant.helpers.selector import (
NumberSelector,
NumberSelectorConfig,
NumberSelectorMode,
TextSelector,
TimeSelector,
)
from homeassistant.util import slugify
from .const import (
CONF_DEFAULT_TIME,
CONF_LEAD_MINUTES,
DEFAULT_LEAD_MINUTES,
DEFAULT_TIME,
DOMAIN,
)
_LEAD_SELECTOR = NumberSelector(
NumberSelectorConfig(
min=0,
max=120,
step=1,
mode=NumberSelectorMode.BOX,
unit_of_measurement="min",
)
)
class ReveilConfigFlow(ConfigFlow, domain=DOMAIN):
"""Ajout d'un réveil (on peut en ajouter autant que voulu)."""
VERSION = 1
@staticmethod
@callback
def async_get_options_flow(config_entry: ConfigEntry) -> ReveilOptionsFlow:
return ReveilOptionsFlow()
async def async_step_user(
self, user_input: dict[str, Any] | None = None
) -> ConfigFlowResult:
if user_input is not None:
name = user_input[CONF_NAME].strip() or "Réveil"
await self.async_set_unique_id(slugify(name))
self._abort_if_unique_id_configured()
return self.async_create_entry(
title=name,
data={CONF_DEFAULT_TIME: user_input[CONF_DEFAULT_TIME]},
options={CONF_LEAD_MINUTES: int(user_input[CONF_LEAD_MINUTES])},
)
return self.async_show_form(
step_id="user",
data_schema=vol.Schema(
{
vol.Required(CONF_NAME, default="Réveil"): TextSelector(),
vol.Required(CONF_DEFAULT_TIME, default=DEFAULT_TIME): TimeSelector(),
vol.Required(
CONF_LEAD_MINUTES, default=DEFAULT_LEAD_MINUTES
): _LEAD_SELECTOR,
}
),
)
class ReveilOptionsFlow(OptionsFlow):
"""Options d'un réveil : durée de la phase progressive."""
async def async_step_init(
self, user_input: dict[str, Any] | None = None
) -> ConfigFlowResult:
if user_input is not None:
return self.async_create_entry(
data={CONF_LEAD_MINUTES: int(user_input[CONF_LEAD_MINUTES])}
)
return self.async_show_form(
step_id="init",
data_schema=self.add_suggested_values_to_schema(
vol.Schema({vol.Required(CONF_LEAD_MINUTES): _LEAD_SELECTOR}),
self.config_entry.options,
),
)