1 """Support for Kaiterra devices."""
3 import voluptuous
as vol
20 from .api_data
import KaiterraApiData
22 AVAILABLE_AQI_STANDARDS,
23 AVAILABLE_DEVICE_TYPES,
28 DEFAULT_PREFERRED_UNIT,
29 DEFAULT_SCAN_INTERVAL,
34 KAITERRA_DEVICE_SCHEMA = vol.Schema(
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,
42 KAITERRA_SCHEMA = vol.Schema(
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
49 vol.Optional(CONF_PREFERRED_UNITS, default=DEFAULT_PREFERRED_UNIT): vol.All(
50 cv.ensure_list, [vol.In(AVAILABLE_UNITS)]
52 vol.Optional(CONF_SCAN_INTERVAL, default=DEFAULT_SCAN_INTERVAL): cv.time_period,
56 CONFIG_SCHEMA = vol.Schema({DOMAIN: KAITERRA_SCHEMA}, extra=vol.ALLOW_EXTRA)
59 async
def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
60 """Set up the Kaiterra integration."""
63 scan_interval = conf[CONF_SCAN_INTERVAL]
64 devices = conf[CONF_DEVICES]
68 await api.async_update()
70 async
def _update(now=None):
71 """Periodic update."""
72 await api.async_update()
77 for device
in devices:
78 device_name, device_id = (
79 device.get(CONF_NAME)
or device[CONF_TYPE],
80 device[CONF_DEVICE_ID],
82 for platform
in PLATFORMS:
83 hass.async_create_task(
88 {CONF_NAME: device_name, CONF_DEVICE_ID: device_id},
bool async_setup(HomeAssistant hass, ConfigType config)
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)
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)