1 """Support for an Intergas boiler via an InComfort/Intouch Lan2RF gateway."""
3 from __future__
import annotations
5 from aiohttp
import ClientResponseError
6 from incomfortclient
import IncomfortError, InvalidHeaterList
7 import voluptuous
as vol
17 from .const
import DOMAIN
18 from .coordinator
import InComfortDataCoordinator, async_connect_gateway
19 from .errors
import InConfortTimeout, InConfortUnknownError, NoHeaters, NotFound
21 CONFIG_SCHEMA = vol.Schema(
25 vol.Required(CONF_HOST): cv.string,
26 vol.Inclusive(CONF_USERNAME,
"credentials"): cv.string,
27 vol.Inclusive(CONF_PASSWORD,
"credentials"): cv.string,
31 extra=vol.ALLOW_EXTRA,
35 Platform.WATER_HEATER,
36 Platform.BINARY_SENSOR,
41 INTEGRATION_TITLE =
"Intergas InComfort/Intouch Lan2RF gateway"
43 type InComfortConfigEntry = ConfigEntry[InComfortDataCoordinator]
46 async
def _async_import(hass: HomeAssistant, config: ConfigType) ->
None:
47 """Import config entry from configuration.yaml."""
48 if not hass.config_entries.async_entries(DOMAIN):
50 result = await hass.config_entries.flow.async_init(
51 DOMAIN, context={
"source": SOURCE_IMPORT}, data=config
53 if result[
"type"] == FlowResultType.ABORT:
54 ir.async_create_issue(
57 f
"deprecated_yaml_import_issue_{result['reason']}",
58 breaks_in_ha_version=
"2025.1.0",
61 severity=ir.IssueSeverity.WARNING,
62 translation_key=f
"deprecated_yaml_import_issue_{result['reason']}",
63 translation_placeholders={
65 "integration_title": INTEGRATION_TITLE,
70 ir.async_create_issue(
73 f
"deprecated_yaml_{DOMAIN}",
74 breaks_in_ha_version=
"2025.1.0",
77 severity=ir.IssueSeverity.WARNING,
78 translation_key=
"deprecated_yaml",
79 translation_placeholders={
81 "integration_title": INTEGRATION_TITLE,
86 async
def async_setup(hass: HomeAssistant, hass_config: ConfigType) -> bool:
87 """Create an Intergas InComfort/Intouch system."""
88 if config := hass_config.get(DOMAIN):
94 """Set up a config entry."""
97 for heater
in data.heaters:
99 except InvalidHeaterList
as exc:
100 raise NoHeaters
from exc
101 except IncomfortError
as exc:
102 if isinstance(exc.message, ClientResponseError):
103 if exc.message.status == 401:
105 if exc.message.status == 404:
106 raise NotFound
from exc
107 raise InConfortUnknownError
from exc
108 except TimeoutError
as exc:
109 raise InConfortTimeout
from exc
112 entry.runtime_data = coordinator
113 await coordinator.async_config_entry_first_refresh()
115 await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
120 """Unload config entry."""
121 return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
InComfortData async_connect_gateway(HomeAssistant hass, dict[str, Any] entry_data)
None _async_import(HomeAssistant hass, ConfigType config)
bool async_setup_entry(HomeAssistant hass, ConfigEntry entry)
bool async_unload_entry(HomeAssistant hass, ConfigEntry entry)
bool async_setup(HomeAssistant hass, ConfigType hass_config)