1 """Config flow for ProgettiHWSW Automation integration."""
3 from typing
import TYPE_CHECKING, Any
5 from ProgettiHWSW.ProgettiHWSWAPI
import ProgettiHWSWAPI
6 import voluptuous
as vol
12 from .const
import DOMAIN
14 DATA_SCHEMA = vol.Schema(
15 {vol.Required(
"host"): str, vol.Required(
"port", default=80): int}
20 """Validate the user host input."""
22 api_instance = ProgettiHWSWAPI(f
'{data["host"]}:{data["port"]}')
23 is_valid = await api_instance.check_board()
29 "title": is_valid[
"title"],
30 "relay_count": is_valid[
"relay_count"],
31 "input_count": is_valid[
"input_count"],
32 "is_old": is_valid[
"is_old"],
37 """Handle a config flow for ProgettiHWSW Automation."""
42 """Initialize class variables."""
43 self.
s1_ins1_in: dict[str, Any] |
None =
None
46 self, user_input: dict[str, str] |
None =
None
47 ) -> ConfigFlowResult:
48 """Manage relay modes step."""
49 errors: dict[str, str] = {}
51 assert self.
s1_ins1_in
is not None
52 if user_input
is not None:
53 whole_data = user_input
54 whole_data.update(self.
s1_ins1_in)
58 relay_modes_schema = {}
59 for i
in range(1,
int(self.
s1_ins1_in[
"relay_count"]) + 1):
60 relay_modes_schema[vol.Required(f
"relay_{i!s}", default=
"bistable")] = (
63 "bistable":
"Bistable (ON/OFF Mode)",
64 "monostable":
"Monostable (Timer Mode)",
70 step_id=
"relay_modes",
71 data_schema=vol.Schema(relay_modes_schema),
76 self, user_input: dict[str, Any] |
None =
None
77 ) -> ConfigFlowResult:
78 """Handle the initial step."""
80 if user_input
is not None:
82 {
"host": user_input[
"host"],
"port": user_input[
"port"]}
88 errors[
"base"] =
"cannot_connect"
90 errors[
"base"] =
"unknown"
92 user_input.update(info)
97 step_id=
"user", data_schema=DATA_SCHEMA, errors=errors
102 """Error to indicate we cannot identify host."""
105 class WrongInfo(HomeAssistantError):
106 """Error to indicate we cannot validate relay modes input."""
110 """Error to indicate we cannot validate relay modes input."""
ConfigFlowResult async_step_user(self, dict[str, Any]|None user_input=None)
ConfigFlowResult async_step_relay_modes(self, dict[str, str]|None user_input=None)
ConfigFlowResult async_create_entry(self, *str title, Mapping[str, Any] data, str|None description=None, Mapping[str, str]|None description_placeholders=None, Mapping[str, Any]|None options=None)
None _async_abort_entries_match(self, dict[str, Any]|None match_dict=None)
ConfigFlowResult async_show_form(self, *str|None step_id=None, vol.Schema|None data_schema=None, dict[str, str]|None errors=None, Mapping[str, str]|None description_placeholders=None, bool|None last_step=None, str|None preview=None)
_FlowResultT async_show_form(self, *str|None step_id=None, vol.Schema|None data_schema=None, dict[str, str]|None errors=None, Mapping[str, str]|None description_placeholders=None, bool|None last_step=None, str|None preview=None)
_FlowResultT async_create_entry(self, *str|None title=None, Mapping[str, Any] data, str|None description=None, Mapping[str, str]|None description_placeholders=None)
def validate_input(HomeAssistant hass, data)