1 """Config flow for pvpc_hourly_pricing."""
3 from __future__
import annotations
5 from collections.abc
import Mapping
8 from aiopvpc
import DEFAULT_POWER_KW, PVPCData
9 import voluptuous
as vol
36 "[consultasios@ree.es]"
37 "(mailto:consultasios@ree.es?subject=Personal%20token%20request)"
42 """Handle config flow for `pvpc_hourly_pricing`."""
45 _name: str |
None =
None
46 _tariff: str |
None =
None
47 _power: float |
None =
None
48 _power_p3: float |
None =
None
49 _use_api_token: bool =
False
50 _api_token: str |
None =
None
51 _api: PVPCData |
None =
None
56 config_entry: ConfigEntry,
57 ) -> PVPCOptionsFlowHandler:
58 """Get the options flow for this handler."""
62 self, user_input: dict[str, Any] |
None =
None
63 ) -> ConfigFlowResult:
64 """Handle the initial step."""
65 if user_input
is not None:
68 if not user_input[CONF_USE_API_TOKEN]:
70 title=user_input[CONF_NAME],
72 CONF_NAME: user_input[CONF_NAME],
73 ATTR_TARIFF: user_input[ATTR_TARIFF],
74 ATTR_POWER: user_input[ATTR_POWER],
75 ATTR_POWER_P3: user_input[ATTR_POWER_P3],
80 self.
_name_name = user_input[CONF_NAME]
81 self.
_tariff_tariff = user_input[ATTR_TARIFF]
82 self.
_power_power = user_input[ATTR_POWER]
87 data_schema = vol.Schema(
89 vol.Required(CONF_NAME, default=DEFAULT_NAME): str,
90 vol.Required(ATTR_TARIFF, default=DEFAULT_TARIFF): VALID_TARIFF,
91 vol.Required(ATTR_POWER, default=DEFAULT_POWER_KW): VALID_POWER,
92 vol.Required(ATTR_POWER_P3, default=DEFAULT_POWER_KW): VALID_POWER,
93 vol.Required(CONF_USE_API_TOKEN, default=
False): bool,
99 self, user_input: dict[str, Any] |
None =
None
100 ) -> ConfigFlowResult:
101 """Handle optional step to define API token for extra sensors."""
102 if user_input
is not None:
106 data_schema=vol.Schema(
107 {vol.Required(CONF_API_TOKEN, default=self.
_api_token_api_token): str}
112 data_schema=vol.Schema(
113 {vol.Required(CONF_API_TOKEN, default=self.
_api_token_api_token): str}
115 description_placeholders={
"mail_to_link": _MAIL_TO_LINK},
119 self, step_id: str, data_schema: vol.Schema
120 ) -> ConfigFlowResult:
121 """Attempt to verify the provided configuration."""
122 errors: dict[str, str] = {}
125 if not self.
_api_api:
127 auth_ok = await self.
_api_api.check_api_token(dt_util.utcnow(), self.
_api_token_api_token)
129 errors[
"base"] =
"invalid_auth"
132 data_schema=data_schema,
134 description_placeholders={
"mail_to_link": _MAIL_TO_LINK},
138 CONF_NAME: self.
_name_name,
139 ATTR_TARIFF: self.
_tariff_tariff,
140 ATTR_POWER: self.
_power_power,
149 assert self.
_name_name
is not None
153 self, entry_data: Mapping[str, Any]
154 ) -> ConfigFlowResult:
155 """Handle re-authentication with ESIOS Token."""
156 self.
_api_token_api_token = entry_data.get(CONF_API_TOKEN)
158 self.
_name_name = entry_data[CONF_NAME]
159 self.
_tariff_tariff = entry_data[ATTR_TARIFF]
160 self.
_power_power = entry_data[ATTR_POWER]
161 self.
_power_p3_power_p3 = entry_data[ATTR_POWER_P3]
165 self, user_input: dict[str, Any] |
None =
None
166 ) -> ConfigFlowResult:
167 """Confirm reauth dialog."""
168 data_schema = vol.Schema(
170 vol.Required(CONF_USE_API_TOKEN, default=self.
_use_api_token_use_api_token): bool,
171 vol.Optional(CONF_API_TOKEN, default=self.
_api_token_api_token): str,
175 self.
_api_token_api_token = user_input[CONF_API_TOKEN]
176 self.
_use_api_token_use_api_token = user_input[CONF_USE_API_TOKEN]
177 return await self.
_async_verify_async_verify(
"reauth_confirm", data_schema)
182 """Handle PVPC options."""
184 _power: float |
None =
None
185 _power_p3: float |
None =
None
188 self, user_input: dict[str, Any] |
None =
None
189 ) -> ConfigFlowResult:
190 """Handle optional step to define API token for extra sensors."""
191 if user_input
is not None and user_input.get(CONF_API_TOKEN):
195 ATTR_POWER: self.
_power_power,
197 CONF_API_TOKEN: user_input[CONF_API_TOKEN],
207 data_schema=vol.Schema(
208 {vol.Required(CONF_API_TOKEN, default=api_token): str}
210 description_placeholders={
"mail_to_link": _MAIL_TO_LINK},
213 async
def async_step_init(
214 self, user_input: dict[str, Any] |
None =
None
215 ) -> ConfigFlowResult:
216 """Manage the options."""
217 if user_input
is not None:
218 if user_input[CONF_USE_API_TOKEN]:
219 self.
_power_power = user_input[ATTR_POWER]
225 ATTR_POWER: user_input[ATTR_POWER],
226 ATTR_POWER_P3: user_input[ATTR_POWER_P3],
227 CONF_API_TOKEN:
None,
234 power = options.get(ATTR_POWER, data[ATTR_POWER])
235 power_valley = options.get(ATTR_POWER_P3, data[ATTR_POWER_P3])
236 api_token = options.get(CONF_API_TOKEN, data.get(CONF_API_TOKEN))
237 use_api_token = api_token
is not None
240 vol.Required(ATTR_POWER, default=power): VALID_POWER,
241 vol.Required(ATTR_POWER_P3, default=power_valley): VALID_POWER,
242 vol.Required(CONF_USE_API_TOKEN, default=use_api_token): bool,
245 return self.
async_show_formasync_show_form(step_id=
"init", data_schema=schema)
ConfigFlowResult async_step_api_token(self, dict[str, Any]|None user_input=None)
PVPCOptionsFlowHandler async_get_options_flow(ConfigEntry config_entry)
ConfigFlowResult _async_verify(self, str step_id, vol.Schema data_schema)
ConfigFlowResult async_step_reauth_confirm(self, dict[str, Any]|None user_input=None)
ConfigFlowResult async_step_user(self, dict[str, Any]|None user_input=None)
ConfigFlowResult async_step_api_token(self, dict[str, Any]|None user_input=None)
ConfigFlowResult async_step_reauth(self, Mapping[str, Any] entry_data)
None _abort_if_unique_id_configured(self, dict[str, Any]|None updates=None, bool reload_on_update=True, *str error="already_configured")
ConfigEntry _get_reauth_entry(self)
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_update_reload_and_abort(self, ConfigEntry entry, *str|None|UndefinedType unique_id=UNDEFINED, str|UndefinedType title=UNDEFINED, Mapping[str, Any]|UndefinedType data=UNDEFINED, Mapping[str, Any]|UndefinedType data_updates=UNDEFINED, Mapping[str, Any]|UndefinedType options=UNDEFINED, str|UndefinedType reason=UNDEFINED, bool reload_even_if_entry_is_unchanged=True)
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)
ConfigEntry config_entry(self)
None config_entry(self, ConfigEntry value)
_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)
aiohttp.ClientSession async_get_clientsession(HomeAssistant hass, bool verify_ssl=True, socket.AddressFamily family=socket.AF_UNSPEC, ssl_util.SSLCipherList ssl_cipher=ssl_util.SSLCipherList.PYTHON_DEFAULT)