1 """The Livisi Smart Home integration."""
3 from __future__
import annotations
5 from typing
import Final
7 from aiohttp
import ClientConnectorError
8 from aiolivisi
import AioLivisi
10 from homeassistant
import core
17 from .const
import DOMAIN
18 from .coordinator
import LivisiDataUpdateCoordinator
20 PLATFORMS: Final = [Platform.BINARY_SENSOR, Platform.CLIMATE, Platform.SWITCH]
24 """Set up Livisi Smart Home from a config entry."""
25 web_session = aiohttp_client.async_get_clientsession(hass)
26 aiolivisi = AioLivisi(web_session)
29 await coordinator.async_setup()
30 await coordinator.async_set_all_rooms()
31 except ClientConnectorError
as exception:
32 raise ConfigEntryNotReady
from exception
34 hass.data.setdefault(DOMAIN, {})[entry.entry_id] = coordinator
35 device_registry = dr.async_get(hass)
36 device_registry.async_get_or_create(
37 config_entry_id=entry.entry_id,
38 identifiers={(DOMAIN, entry.entry_id)},
39 manufacturer=
"Livisi",
40 name=f
"SHC {coordinator.controller_type} {coordinator.serial_number}",
43 await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
44 await coordinator.async_config_entry_first_refresh()
45 entry.async_create_background_task(
46 hass, coordinator.ws_connect(),
"livisi-ws_connect"
52 """Unload a config entry."""
53 coordinator = hass.data[DOMAIN][entry.entry_id]
55 unload_success = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
56 await coordinator.websocket.disconnect()
58 hass.data[DOMAIN].pop(entry.entry_id)
bool async_unload_entry(HomeAssistant hass, ConfigEntry entry)
bool async_setup_entry(core.HomeAssistant hass, ConfigEntry entry)