core/homeassistant/components/sensibo/__init__.py

63 lines
1.9 KiB
Python

"""The sensibo component."""
from __future__ import annotations
import asyncio
import logging
import aiohttp
import async_timeout
import pysensibo
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_API_KEY
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryNotReady
from homeassistant.helpers.aiohttp_client import async_get_clientsession
from .const import _INITIAL_FETCH_FIELDS, DOMAIN, PLATFORMS, TIMEOUT
_LOGGER = logging.getLogger(__name__)
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Set up Sensibo from a config entry."""
client = pysensibo.SensiboClient(
entry.data[CONF_API_KEY], session=async_get_clientsession(hass), timeout=TIMEOUT
)
devices = []
try:
async with async_timeout.timeout(TIMEOUT):
for dev in await client.async_get_devices(_INITIAL_FETCH_FIELDS):
devices.append(dev)
except (
aiohttp.client_exceptions.ClientConnectorError,
asyncio.TimeoutError,
pysensibo.SensiboError,
) as err:
raise ConfigEntryNotReady(
f"Failed to get devices from Sensibo servers: {err}"
) from err
if not devices:
return False
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = {
"devices": devices,
"client": client,
}
hass.config_entries.async_setup_platforms(entry, PLATFORMS)
_LOGGER.debug("Loaded entry for %s", entry.title)
return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Unload Sensibo config entry."""
if await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
del hass.data[DOMAIN][entry.entry_id]
if not hass.data[DOMAIN]:
del hass.data[DOMAIN]
_LOGGER.debug("Unloaded entry for %s", entry.title)
return True
return False