Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """The Dexcom integration."""
2 
3 from datetime import timedelta
4 import logging
5 
6 from pydexcom import AccountError, Dexcom, GlucoseReading, SessionError
7 
8 from homeassistant.config_entries import ConfigEntry
9 from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
10 from homeassistant.core import HomeAssistant
11 from homeassistant.exceptions import ConfigEntryNotReady
12 from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
13 
14 from .const import CONF_SERVER, DOMAIN, PLATFORMS, SERVER_OUS
15 
16 _LOGGER = logging.getLogger(__name__)
17 
18 SCAN_INTERVAL = timedelta(seconds=180)
19 
20 
21 async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
22  """Set up Dexcom from a config entry."""
23  try:
24  dexcom = await hass.async_add_executor_job(
25  Dexcom,
26  entry.data[CONF_USERNAME],
27  entry.data[CONF_PASSWORD],
28  entry.data[CONF_SERVER] == SERVER_OUS,
29  )
30  except AccountError:
31  return False
32  except SessionError as error:
33  raise ConfigEntryNotReady from error
34 
35  async def async_update_data():
36  try:
37  return await hass.async_add_executor_job(dexcom.get_current_glucose_reading)
38  except SessionError as error:
39  raise UpdateFailed(error) from error
40 
41  coordinator = DataUpdateCoordinator[GlucoseReading](
42  hass,
43  _LOGGER,
44  config_entry=entry,
45  name=DOMAIN,
46  update_method=async_update_data,
47  update_interval=SCAN_INTERVAL,
48  )
49  await coordinator.async_config_entry_first_refresh()
50 
51  hass.data.setdefault(DOMAIN, {})[entry.entry_id] = coordinator
52 
53  await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
54 
55  return True
56 
57 
58 async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
59  """Unload a config entry."""
60  if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
61  hass.data[DOMAIN].pop(entry.entry_id)
62  return unload_ok
bool async_unload_entry(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:58
bool async_setup_entry(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:21