Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """Support for Kaiterra devices."""
2 
3 import voluptuous as vol
4 
5 from homeassistant.const import (
6  CONF_API_KEY,
7  CONF_DEVICE_ID,
8  CONF_DEVICES,
9  CONF_NAME,
10  CONF_SCAN_INTERVAL,
11  CONF_TYPE,
12 )
13 from homeassistant.core import HomeAssistant
14 from homeassistant.helpers import config_validation as cv
15 from homeassistant.helpers.aiohttp_client import async_get_clientsession
16 from homeassistant.helpers.discovery import async_load_platform
17 from homeassistant.helpers.event import async_track_time_interval
18 from homeassistant.helpers.typing import ConfigType
19 
20 from .api_data import KaiterraApiData
21 from .const import (
22  AVAILABLE_AQI_STANDARDS,
23  AVAILABLE_DEVICE_TYPES,
24  AVAILABLE_UNITS,
25  CONF_AQI_STANDARD,
26  CONF_PREFERRED_UNITS,
27  DEFAULT_AQI_STANDARD,
28  DEFAULT_PREFERRED_UNIT,
29  DEFAULT_SCAN_INTERVAL,
30  DOMAIN,
31  PLATFORMS,
32 )
33 
34 KAITERRA_DEVICE_SCHEMA = vol.Schema(
35  {
36  vol.Required(CONF_DEVICE_ID): cv.string,
37  vol.Required(CONF_TYPE): vol.In(AVAILABLE_DEVICE_TYPES),
38  vol.Optional(CONF_NAME): cv.string,
39  }
40 )
41 
42 KAITERRA_SCHEMA = vol.Schema(
43  {
44  vol.Required(CONF_API_KEY): cv.string,
45  vol.Required(CONF_DEVICES): vol.All(cv.ensure_list, [KAITERRA_DEVICE_SCHEMA]),
46  vol.Optional(CONF_AQI_STANDARD, default=DEFAULT_AQI_STANDARD): vol.In(
47  AVAILABLE_AQI_STANDARDS
48  ),
49  vol.Optional(CONF_PREFERRED_UNITS, default=DEFAULT_PREFERRED_UNIT): vol.All(
50  cv.ensure_list, [vol.In(AVAILABLE_UNITS)]
51  ),
52  vol.Optional(CONF_SCAN_INTERVAL, default=DEFAULT_SCAN_INTERVAL): cv.time_period,
53  }
54 )
55 
56 CONFIG_SCHEMA = vol.Schema({DOMAIN: KAITERRA_SCHEMA}, extra=vol.ALLOW_EXTRA)
57 
58 
59 async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
60  """Set up the Kaiterra integration."""
61 
62  conf = config[DOMAIN]
63  scan_interval = conf[CONF_SCAN_INTERVAL]
64  devices = conf[CONF_DEVICES]
65  session = async_get_clientsession(hass)
66  api = hass.data[DOMAIN] = KaiterraApiData(hass, conf, session)
67 
68  await api.async_update()
69 
70  async def _update(now=None):
71  """Periodic update."""
72  await api.async_update()
73 
74  async_track_time_interval(hass, _update, scan_interval)
75 
76  # Load platforms for each device
77  for device in devices:
78  device_name, device_id = (
79  device.get(CONF_NAME) or device[CONF_TYPE],
80  device[CONF_DEVICE_ID],
81  )
82  for platform in PLATFORMS:
83  hass.async_create_task(
85  hass,
86  platform,
87  DOMAIN,
88  {CONF_NAME: device_name, CONF_DEVICE_ID: device_id},
89  config,
90  )
91  )
92 
93  return True
bool async_setup(HomeAssistant hass, ConfigType config)
Definition: __init__.py:59
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)
None async_load_platform(core.HomeAssistant hass, Platform|str component, str platform, DiscoveryInfoType|None discovered, ConfigType hass_config)
Definition: discovery.py:152
CALLBACK_TYPE async_track_time_interval(HomeAssistant hass, Callable[[datetime], Coroutine[Any, Any, None]|None] action, timedelta interval, *str|None name=None, bool|None cancel_on_shutdown=None)
Definition: event.py:1679