1 """The Bosch Smart Home Controller integration."""
5 from boschshcpy
import SHCSession
6 from boschshcpy.exceptions
import SHCAuthenticationError, SHCConnectionError
24 Platform.BINARY_SENSOR,
30 _LOGGER = logging.getLogger(__name__)
34 """Set up Bosch SHC from a config entry."""
39 session = await hass.async_add_executor_job(
42 data[CONF_SSL_CERTIFICATE],
47 except SHCAuthenticationError
as err:
48 raise ConfigEntryAuthFailed
from err
49 except SHCConnectionError
as err:
50 raise ConfigEntryNotReady
from err
52 shc_info = session.information
53 if shc_info.updateState.name ==
"UPDATE_AVAILABLE":
54 _LOGGER.warning(
"Please check for software updates in the Bosch Smart Home App")
56 hass.data.setdefault(DOMAIN, {})
57 hass.data[DOMAIN][entry.entry_id] = {
58 DATA_SESSION: session,
61 device_registry = dr.async_get(hass)
62 device_registry.async_get_or_create(
63 config_entry_id=entry.entry_id,
64 connections={(dr.CONNECTION_NETWORK_MAC, dr.format_mac(shc_info.unique_id))},
65 identifiers={(DOMAIN, shc_info.unique_id)},
68 model=
"SmartHomeController",
69 sw_version=shc_info.version,
72 await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
74 async
def stop_polling(event):
75 """Stop polling service."""
76 await hass.async_add_executor_job(session.stop_polling)
78 await hass.async_add_executor_job(session.start_polling)
79 hass.data[DOMAIN][entry.entry_id][DATA_POLLING_HANDLER] = (
80 hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, stop_polling)
87 """Unload a config entry."""
88 session: SHCSession = hass.data[DOMAIN][entry.entry_id][DATA_SESSION]
90 hass.data[DOMAIN][entry.entry_id][DATA_POLLING_HANDLER]()
91 hass.data[DOMAIN][entry.entry_id].pop(DATA_POLLING_HANDLER)
92 await hass.async_add_executor_job(session.stop_polling)
94 unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
96 hass.data[DOMAIN].pop(entry.entry_id)
bool async_setup_entry(HomeAssistant hass, ConfigEntry entry)
bool async_unload_entry(HomeAssistant hass, ConfigEntry entry)
HaZeroconf async_get_instance(HomeAssistant hass)