1 """The IntelliFire integration."""
3 from __future__
import annotations
7 from intellifire4py
import UnifiedFireplace
8 from intellifire4py.cloud_interface
import IntelliFireCloudInterface
9 from intellifire4py.model
import IntelliFireCommonFireplaceData
31 INIT_WAIT_TIME_SECONDS,
35 from .coordinator
import IntellifireDataUpdateCoordinator
38 Platform.BINARY_SENSOR,
49 """Convert config entry data into IntelliFireCommonFireplaceData."""
51 return IntelliFireCommonFireplaceData(
52 auth_cookie=entry.data[CONF_AUTH_COOKIE],
53 user_id=entry.data[CONF_USER_ID],
54 web_client_id=entry.data[CONF_WEB_CLIENT_ID],
55 serial=entry.data[CONF_SERIAL],
56 api_key=entry.data[CONF_API_KEY],
57 ip_address=entry.data[CONF_IP_ADDRESS],
58 read_mode=entry.options[CONF_READ_MODE],
59 control_mode=entry.options[CONF_CONTROL_MODE],
64 """Migrate entries."""
66 "Migrating configuration from version %s.%s",
68 config_entry.minor_version,
71 if config_entry.version == 1:
72 new = {**config_entry.data}
74 if config_entry.minor_version < 2:
75 username = config_entry.data[CONF_USERNAME]
76 password = config_entry.data[CONF_PASSWORD]
79 async
with IntelliFireCloudInterface()
as cloud_interface:
80 await cloud_interface.login_with_credentials(
81 username=username, password=password
84 new_data = cloud_interface.user_data.get_data_for_ip(new[CONF_HOST])
87 raise ConfigEntryAuthFailed
88 new[CONF_API_KEY] = new_data.api_key
89 new[CONF_WEB_CLIENT_ID] = new_data.web_client_id
90 new[CONF_AUTH_COOKIE] = new_data.auth_cookie
92 new[CONF_IP_ADDRESS] = new_data.ip_address
93 new[CONF_SERIAL] = new_data.serial
95 hass.config_entries.async_update_entry(
98 options={CONF_READ_MODE:
"local", CONF_CONTROL_MODE:
"local"},
99 unique_id=new[CONF_SERIAL],
103 LOGGER.debug(
"Pseudo Migration %s successful", config_entry.version)
109 """Set up IntelliFire from a config entry."""
111 if CONF_USERNAME
not in entry.data:
112 LOGGER.debug(
"Config entry without username detected: %s", entry.unique_id)
113 raise ConfigEntryAuthFailed
116 fireplace: UnifiedFireplace = (
117 await UnifiedFireplace.build_fireplace_from_common(
121 LOGGER.debug(
"Waiting for Fireplace to Initialize")
122 await asyncio.wait_for(
125 except TimeoutError
as err:
127 "Initialization of fireplace timed out after 10 minutes"
132 hass=hass, fireplace=fireplace
135 LOGGER.debug(
"Fireplace to Initialized - Awaiting first refresh")
136 await data_update_coordinator.async_config_entry_first_refresh()
138 hass.data.setdefault(DOMAIN, {})[entry.entry_id] = data_update_coordinator
140 await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
146 fireplace: UnifiedFireplace, timeout=STARTUP_TIMEOUT
148 """Wait for a fireplace to be initialized."""
150 fireplace.data.ipv4_address ==
"127.0.0.1" and fireplace.data.serial ==
"unset"
152 LOGGER.debug(f
"Waiting for fireplace to initialize [{fireplace.read_mode}]")
153 await asyncio.sleep(INIT_WAIT_TIME_SECONDS)
157 """Unload a config entry."""
158 if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
159 hass.data[DOMAIN].pop(entry.entry_id)
def _async_wait_for_initialization(UnifiedFireplace fireplace, timeout=STARTUP_TIMEOUT)
bool async_unload_entry(HomeAssistant hass, ConfigEntry entry)
bool async_migrate_entry(HomeAssistant hass, ConfigEntry config_entry)
IntelliFireCommonFireplaceData _construct_common_data(ConfigEntry entry)
bool async_setup_entry(HomeAssistant hass, ConfigEntry entry)