Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """Support for IHC devices."""
2 
3 import logging
4 
5 from ihcsdk.ihccontroller import IHCController
6 import voluptuous as vol
7 
8 from homeassistant.const import CONF_PASSWORD, CONF_URL, CONF_USERNAME
9 from homeassistant.core import HomeAssistant
11 from homeassistant.helpers.typing import ConfigType
12 
13 from .auto_setup import autosetup_ihc_products
14 from .const import (
15  CONF_AUTOSETUP,
16  CONF_INFO,
17  DOMAIN,
18  IHC_CONTROLLER,
19  IHC_CONTROLLER_INDEX,
20 )
21 from .manual_setup import IHC_SCHEMA, get_manual_configuration
22 from .service_functions import setup_service_functions
23 
24 _LOGGER = logging.getLogger(__name__)
25 
26 
27 CONFIG_SCHEMA = vol.Schema(
28  {DOMAIN: vol.Schema(vol.All(cv.ensure_list, [IHC_SCHEMA]))}, extra=vol.ALLOW_EXTRA
29 )
30 
31 
32 def setup(hass: HomeAssistant, config: ConfigType) -> bool:
33  """Set up the IHC integration."""
34  conf = config[DOMAIN]
35  for index, controller_conf in enumerate(conf):
36  if not ihc_setup(hass, config, controller_conf, index):
37  return False
38  return True
39 
40 
42  hass: HomeAssistant,
43  config: ConfigType,
44  controller_conf: ConfigType,
45  controller_index: int,
46 ) -> bool:
47  """Set up the IHC integration."""
48  url = controller_conf[CONF_URL]
49  username = controller_conf[CONF_USERNAME]
50  password = controller_conf[CONF_PASSWORD]
51 
52  ihc_controller = IHCController(url, username, password)
53  if not ihc_controller.authenticate():
54  _LOGGER.error("Unable to authenticate on IHC controller")
55  return False
56  controller_id: str = ihc_controller.client.get_system_info()["serial_number"]
57  # Store controller configuration
58  hass.data.setdefault(DOMAIN, {})
59  hass.data[DOMAIN][controller_id] = {
60  IHC_CONTROLLER: ihc_controller,
61  CONF_INFO: controller_conf[CONF_INFO],
62  IHC_CONTROLLER_INDEX: controller_index,
63  }
64  if controller_conf[CONF_AUTOSETUP] and not autosetup_ihc_products(
65  hass, config, ihc_controller, controller_id
66  ):
67  return False
68  get_manual_configuration(hass, config, controller_conf, controller_id)
69  # We only want to register the service functions once for the first controller
70  if controller_index == 0:
72  return True
def setup_service_functions(HomeAssistant hass, broker)
Definition: __init__.py:124
def autosetup_ihc_products(HomeAssistant hass, config, ihc_controller, controller_id)
Definition: auto_setup.py:88
None get_manual_configuration(HomeAssistant hass, ConfigType config, ConfigType controller_conf, str controller_id)
bool setup(HomeAssistant hass, ConfigType config)
Definition: __init__.py:32
bool ihc_setup(HomeAssistant hass, ConfigType config, ConfigType controller_conf, int controller_index)
Definition: __init__.py:46