Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """The fritzbox_callmonitor integration."""
2 
3 import logging
4 
5 from fritzconnection.core.exceptions import FritzConnectionException, FritzSecurityError
6 from requests.exceptions import ConnectionError as RequestsConnectionError
7 
8 from homeassistant.config_entries import ConfigEntry
9 from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME
10 from homeassistant.core import HomeAssistant
11 from homeassistant.exceptions import ConfigEntryAuthFailed, ConfigEntryNotReady
12 
13 from .base import FritzBoxPhonebook
14 from .const import CONF_PHONEBOOK, CONF_PREFIXES, PLATFORMS
15 
16 _LOGGER = logging.getLogger(__name__)
17 
18 type FritzBoxCallMonitorConfigEntry = ConfigEntry[FritzBoxPhonebook]
19 
20 
22  hass: HomeAssistant, config_entry: FritzBoxCallMonitorConfigEntry
23 ) -> bool:
24  """Set up the fritzbox_callmonitor platforms."""
25  fritzbox_phonebook = FritzBoxPhonebook(
26  host=config_entry.data[CONF_HOST],
27  username=config_entry.data[CONF_USERNAME],
28  password=config_entry.data[CONF_PASSWORD],
29  phonebook_id=config_entry.data[CONF_PHONEBOOK],
30  prefixes=config_entry.options.get(CONF_PREFIXES),
31  )
32 
33  try:
34  await hass.async_add_executor_job(fritzbox_phonebook.init_phonebook)
35  except FritzSecurityError as ex:
36  _LOGGER.error(
37  (
38  "User has insufficient permissions to access AVM FRITZ!Box settings and"
39  " its phonebooks: %s"
40  ),
41  ex,
42  )
43  return False
44  except FritzConnectionException as ex:
45  raise ConfigEntryAuthFailed from ex
46  except RequestsConnectionError as ex:
47  _LOGGER.error("Unable to connect to AVM FRITZ!Box call monitor: %s", ex)
48  raise ConfigEntryNotReady from ex
49 
50  config_entry.runtime_data = fritzbox_phonebook
51  config_entry.async_on_unload(config_entry.add_update_listener(update_listener))
52  await hass.config_entries.async_forward_entry_setups(config_entry, PLATFORMS)
53 
54  return True
55 
56 
58  hass: HomeAssistant, config_entry: FritzBoxCallMonitorConfigEntry
59 ) -> bool:
60  """Unloading the fritzbox_callmonitor platforms."""
61  return await hass.config_entries.async_unload_platforms(config_entry, PLATFORMS)
62 
63 
64 async def update_listener(
65  hass: HomeAssistant, config_entry: FritzBoxCallMonitorConfigEntry
66 ) -> None:
67  """Update listener to reload after option has changed."""
68  await hass.config_entries.async_reload(config_entry.entry_id)
None update_listener(HomeAssistant hass, FritzBoxCallMonitorConfigEntry config_entry)
Definition: __init__.py:66
bool async_unload_entry(HomeAssistant hass, FritzBoxCallMonitorConfigEntry config_entry)
Definition: __init__.py:59
bool async_setup_entry(HomeAssistant hass, FritzBoxCallMonitorConfigEntry config_entry)
Definition: __init__.py:23