Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """Support for LinkPlay devices."""
2 
3 from dataclasses import dataclass
4 
5 from aiohttp import ClientSession
6 from linkplay.bridge import LinkPlayBridge
7 from linkplay.controller import LinkPlayController
8 from linkplay.discovery import linkplay_factory_httpapi_bridge
9 from linkplay.exceptions import LinkPlayRequestException
10 
11 from homeassistant.config_entries import ConfigEntry
12 from homeassistant.const import CONF_HOST
13 from homeassistant.core import HomeAssistant
14 from homeassistant.exceptions import ConfigEntryNotReady
15 
16 from .const import CONTROLLER, CONTROLLER_KEY, DOMAIN, PLATFORMS
17 from .utils import async_get_client_session
18 
19 
20 @dataclass
22  """Data for LinkPlay."""
23 
24  bridge: LinkPlayBridge
25 
26 
27 type LinkPlayConfigEntry = ConfigEntry[LinkPlayData]
28 
29 
30 async def async_setup_entry(hass: HomeAssistant, entry: LinkPlayConfigEntry) -> bool:
31  """Async setup hass config entry. Called when an entry has been setup."""
32 
33  session: ClientSession = await async_get_client_session(hass)
34  bridge: LinkPlayBridge | None = None
35 
36  # try create a bridge
37  try:
38  bridge = await linkplay_factory_httpapi_bridge(entry.data[CONF_HOST], session)
39  except LinkPlayRequestException as exception:
40  raise ConfigEntryNotReady(
41  f"Failed to connect to LinkPlay device at {entry.data[CONF_HOST]}"
42  ) from exception
43 
44  # setup the controller and discover multirooms
45  controller: LinkPlayController | None = None
46  hass.data.setdefault(DOMAIN, {})
47  if CONTROLLER not in hass.data[DOMAIN]:
48  controller = LinkPlayController(session)
49  hass.data[DOMAIN][CONTROLLER_KEY] = controller
50  else:
51  controller = hass.data[DOMAIN][CONTROLLER_KEY]
52 
53  await controller.add_bridge(bridge)
54  await controller.discover_multirooms()
55 
56  # forward to platforms
57  entry.runtime_data = LinkPlayData(bridge=bridge)
58  await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
59  return True
60 
61 
62 async def async_unload_entry(hass: HomeAssistant, entry: LinkPlayConfigEntry) -> bool:
63  """Unload a config entry."""
64 
65  return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
ClientSession async_get_client_session(HomeAssistant hass)
Definition: utils.py:80
bool async_setup_entry(HomeAssistant hass, LinkPlayConfigEntry entry)
Definition: __init__.py:30
bool async_unload_entry(HomeAssistant hass, LinkPlayConfigEntry entry)
Definition: __init__.py:62