Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """The flo integration."""
2 
3 import asyncio
4 import logging
5 
6 from aioflo import async_get_api
7 from aioflo.errors import RequestError
8 
9 from homeassistant.config_entries import ConfigEntry
10 from homeassistant.const import CONF_PASSWORD, CONF_USERNAME, Platform
11 from homeassistant.core import HomeAssistant
12 from homeassistant.exceptions import ConfigEntryNotReady
13 from homeassistant.helpers.aiohttp_client import async_get_clientsession
14 
15 from .const import CLIENT, DOMAIN
16 from .coordinator import FloDeviceDataUpdateCoordinator
17 
18 _LOGGER = logging.getLogger(__name__)
19 
20 PLATFORMS = [Platform.BINARY_SENSOR, Platform.SENSOR, Platform.SWITCH]
21 
22 
23 async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
24  """Set up flo from a config entry."""
25  session = async_get_clientsession(hass)
26  hass.data.setdefault(DOMAIN, {})
27  hass.data[DOMAIN][entry.entry_id] = {}
28  try:
29  hass.data[DOMAIN][entry.entry_id][CLIENT] = client = await async_get_api(
30  entry.data[CONF_USERNAME], entry.data[CONF_PASSWORD], session=session
31  )
32  except RequestError as err:
33  raise ConfigEntryNotReady from err
34 
35  user_info = await client.user.get_info(include_location_info=True)
36 
37  _LOGGER.debug("Flo user information with locations: %s", user_info)
38 
39  hass.data[DOMAIN][entry.entry_id]["devices"] = devices = [
40  FloDeviceDataUpdateCoordinator(hass, client, location["id"], device["id"])
41  for location in user_info["locations"]
42  for device in location["devices"]
43  ]
44 
45  tasks = [device.async_refresh() for device in devices]
46  await asyncio.gather(*tasks)
47 
48  await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
49 
50  return True
51 
52 
53 async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
54  """Unload a config entry."""
55  unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
56  if unload_ok:
57  hass.data[DOMAIN].pop(entry.entry_id)
58  return unload_ok
bool async_unload_entry(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:53
bool async_setup_entry(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:23
API async_get_api(HomeAssistant hass, str api_key)
Definition: config_flow.py:60
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)