core/homeassistant/components/ihc/__init__.py

73 lines
2.2 KiB
Python

"""Support for IHC devices."""
import logging
from ihcsdk.ihccontroller import IHCController
import voluptuous as vol
from homeassistant.const import CONF_PASSWORD, CONF_URL, CONF_USERNAME
from homeassistant.core import HomeAssistant
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.typing import ConfigType
from .auto_setup import autosetup_ihc_products
from .const import (
CONF_AUTOSETUP,
CONF_INFO,
DOMAIN,
IHC_CONTROLLER,
IHC_CONTROLLER_INDEX,
)
from .manual_setup import IHC_SCHEMA, get_manual_configuration
from .service_functions import setup_service_functions
_LOGGER = logging.getLogger(__name__)
CONFIG_SCHEMA = vol.Schema(
{DOMAIN: vol.Schema(vol.All(cv.ensure_list, [IHC_SCHEMA]))}, extra=vol.ALLOW_EXTRA
)
def setup(hass: HomeAssistant, config: ConfigType) -> bool:
"""Set up the IHC integration."""
conf = config[DOMAIN]
for index, controller_conf in enumerate(conf):
if not ihc_setup(hass, config, controller_conf, index):
return False
return True
def ihc_setup(
hass: HomeAssistant,
config: ConfigType,
controller_conf: ConfigType,
controller_index: int,
) -> bool:
"""Set up the IHC integration."""
url = controller_conf[CONF_URL]
username = controller_conf[CONF_USERNAME]
password = controller_conf[CONF_PASSWORD]
ihc_controller = IHCController(url, username, password)
if not ihc_controller.authenticate():
_LOGGER.error("Unable to authenticate on IHC controller")
return False
controller_id: str = ihc_controller.client.get_system_info()["serial_number"]
# Store controller configuration
hass.data.setdefault(DOMAIN, {})
hass.data[DOMAIN][controller_id] = {
IHC_CONTROLLER: ihc_controller,
CONF_INFO: controller_conf[CONF_INFO],
IHC_CONTROLLER_INDEX: controller_index,
}
if controller_conf[CONF_AUTOSETUP] and not autosetup_ihc_products(
hass, config, ihc_controller, controller_id
):
return False
get_manual_configuration(hass, config, controller_conf, controller_id)
# We only want to register the service functions once for the first controller
if controller_index == 0:
setup_service_functions(hass)
return True