Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """The Ruckus integration."""
2 
3 import logging
4 
5 from aioruckus import AjaxSession
6 from aioruckus.exceptions import AuthenticationError, SchemaError
7 
8 from homeassistant.config_entries import ConfigEntry
9 from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME
10 from homeassistant.core import HomeAssistant
11 from homeassistant.exceptions import ConfigEntryAuthFailed, ConfigEntryNotReady
12 from homeassistant.helpers import device_registry as dr
13 
14 from .const import (
15  API_AP_DEVNAME,
16  API_AP_FIRMWAREVERSION,
17  API_AP_MAC,
18  API_AP_MODEL,
19  API_SYS_SYSINFO,
20  API_SYS_SYSINFO_VERSION,
21  COORDINATOR,
22  DOMAIN,
23  MANUFACTURER,
24  PLATFORMS,
25  UNDO_UPDATE_LISTENERS,
26 )
27 from .coordinator import RuckusDataUpdateCoordinator
28 
29 _LOGGER = logging.getLogger(__package__)
30 
31 
32 async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
33  """Set up Ruckus from a config entry."""
34 
35  ruckus = AjaxSession.async_create(
36  entry.data[CONF_HOST],
37  entry.data[CONF_USERNAME],
38  entry.data[CONF_PASSWORD],
39  )
40  try:
41  await ruckus.login()
42  except (ConnectionError, SchemaError) as conerr:
43  await ruckus.close()
44  raise ConfigEntryNotReady from conerr
45  except AuthenticationError as autherr:
46  await ruckus.close()
47  raise ConfigEntryAuthFailed from autherr
48 
49  coordinator = RuckusDataUpdateCoordinator(hass, ruckus=ruckus)
50 
51  await coordinator.async_config_entry_first_refresh()
52 
53  system_info = await ruckus.api.get_system_info()
54 
55  registry = dr.async_get(hass)
56  aps = await ruckus.api.get_aps()
57  for access_point in aps:
58  _LOGGER.debug("AP [%s] %s", access_point[API_AP_MAC], entry.entry_id)
59  registry.async_get_or_create(
60  config_entry_id=entry.entry_id,
61  connections={(dr.CONNECTION_NETWORK_MAC, access_point[API_AP_MAC])},
62  identifiers={(DOMAIN, access_point[API_AP_MAC])},
63  manufacturer=MANUFACTURER,
64  name=access_point[API_AP_DEVNAME],
65  model=access_point[API_AP_MODEL],
66  sw_version=access_point.get(
67  API_AP_FIRMWAREVERSION,
68  system_info[API_SYS_SYSINFO][API_SYS_SYSINFO_VERSION],
69  ),
70  )
71 
72  hass.data.setdefault(DOMAIN, {})
73  hass.data[DOMAIN][entry.entry_id] = {
74  COORDINATOR: coordinator,
75  UNDO_UPDATE_LISTENERS: [],
76  }
77 
78  await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
79 
80  return True
81 
82 
83 async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
84  """Unload a config entry."""
85 
86  unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
87  if unload_ok:
88  for listener in hass.data[DOMAIN][entry.entry_id][UNDO_UPDATE_LISTENERS]:
89  listener()
90  await hass.data[DOMAIN][entry.entry_id][COORDINATOR].ruckus.close()
91  hass.data[DOMAIN].pop(entry.entry_id)
92 
93  return unload_ok
bool async_setup_entry(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:32
bool async_unload_entry(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:83