1 """Config flow for PECO Outage Counter integration."""
3 from __future__
import annotations
10 IncompatibleMeterError,
12 UnresponsiveMeterError,
14 import voluptuous
as vol
19 from .const
import CONF_COUNTY, CONF_PHONE_NUMBER, COUNTY_LIST, DOMAIN
21 STEP_USER_DATA_SCHEMA = vol.Schema(
23 vol.Required(CONF_COUNTY): vol.In(COUNTY_LIST),
24 vol.Optional(CONF_PHONE_NUMBER): cv.string,
28 _LOGGER = logging.getLogger(__name__)
32 """Handle a config flow for PECO Outage Counter."""
36 meter_data: dict[str, str] = {}
37 meter_error: dict[str, str] = {}
40 """Verify if the meter is compatible."""
45 await api.meter_check(phone_number)
47 self.
meter_errormeter_error = {
"phone_number":
"invalid_phone_number",
"type":
"error"}
48 except IncompatibleMeterError:
49 self.
meter_errormeter_error = {
"phone_number":
"incompatible_meter",
"type":
"abort"}
50 except UnresponsiveMeterError:
51 self.
meter_errormeter_error = {
"phone_number":
"unresponsive_meter",
"type":
"error"}
53 self.
meter_errormeter_error = {
"phone_number":
"http_error",
"type":
"error"}
56 self, user_input: dict[str, Any] |
None =
None
57 ) -> ConfigFlowResult:
58 """Handle the initial step."""
59 if user_input
is None:
62 data_schema=STEP_USER_DATA_SCHEMA,
65 county = user_input[CONF_COUNTY]
67 if CONF_PHONE_NUMBER
not in user_input:
72 title=f
"{user_input[CONF_COUNTY].capitalize()} Outage Count",
76 phone_number = user_input[CONF_PHONE_NUMBER]
92 self, user_input: dict[str, Any] |
None =
None
93 ) -> ConfigFlowResult:
94 """Handle the finish smart meter step."""
99 data_schema=STEP_USER_DATA_SCHEMA,
100 errors={
"phone_number": self.
meter_errormeter_error[
"phone_number"]},
106 title=f
"{self.meter_data[CONF_COUNTY].capitalize()} - {self.meter_data[CONF_PHONE_NUMBER]}",
ConfigFlowResult async_step_user(self, dict[str, Any]|None user_input=None)
ConfigFlowResult async_step_finish_smart_meter(self, dict[str, Any]|None user_input=None)
None _verify_meter(self, str phone_number)
None _abort_if_unique_id_configured(self, dict[str, Any]|None updates=None, bool reload_on_update=True, *str error="already_configured")
ConfigEntry|None async_set_unique_id(self, str|None unique_id=None, *bool raise_on_progress=True)
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)
ConfigFlowResult async_abort(self, *str reason, Mapping[str, str]|None description_placeholders=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)
_FlowResultT async_abort(self, *str reason, Mapping[str, str]|None description_placeholders=None)