hass-core/homeassistant/components/meater/config_flow.py
Billy Stevenson 2c3d9566cb
Add Meater integration (#44929)
Co-authored-by: Alexei Chetroi <lexoid@gmail.com>
Co-authored-by: Brian Rogers <brg468@hotmail.com>
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
Co-authored-by: Erik <erik@montnemery.com>
2022-04-01 15:11:37 +02:00

57 lines
1.8 KiB
Python

"""Config flow for Meater."""
from meater import AuthenticationError, MeaterApi, ServiceUnavailableError
import voluptuous as vol
from homeassistant import config_entries
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
from homeassistant.helpers import aiohttp_client
from .const import DOMAIN
FLOW_SCHEMA = vol.Schema(
{vol.Required(CONF_USERNAME): str, vol.Required(CONF_PASSWORD): str}
)
class MeaterConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
"""Meater Config Flow."""
async def async_step_user(self, user_input=None):
"""Define the login user step."""
if user_input is None:
return self.async_show_form(
step_id="user",
data_schema=FLOW_SCHEMA,
)
username: str = user_input[CONF_USERNAME]
await self.async_set_unique_id(username.lower())
self._abort_if_unique_id_configured()
username = user_input[CONF_USERNAME]
password = user_input[CONF_PASSWORD]
session = aiohttp_client.async_get_clientsession(self.hass)
api = MeaterApi(session)
errors = {}
try:
await api.authenticate(user_input[CONF_USERNAME], user_input[CONF_PASSWORD])
except AuthenticationError:
errors["base"] = "invalid_auth"
except ServiceUnavailableError:
errors["base"] = "service_unavailable_error"
except Exception: # pylint: disable=broad-except
errors["base"] = "unknown_auth_error"
else:
return self.async_create_entry(
title="Meater",
data={"username": username, "password": password},
)
return self.async_show_form(
step_id="user",
data_schema=FLOW_SCHEMA,
errors=errors,
)