Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """Support for Sensor.Community stations.
2 
3 Sensor.Community was previously called Luftdaten, hence the domain differs from
4 the integration name.
5 """
6 
7 from __future__ import annotations
8 
9 import logging
10 from typing import Any
11 
12 from luftdaten import Luftdaten
13 from luftdaten.exceptions import LuftdatenError
14 
15 from homeassistant.config_entries import ConfigEntry
16 from homeassistant.const import Platform
17 from homeassistant.core import HomeAssistant
18 from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
19 
20 from .const import CONF_SENSOR_ID, DEFAULT_SCAN_INTERVAL, DOMAIN
21 
22 _LOGGER = logging.getLogger(__name__)
23 
24 PLATFORMS = [Platform.SENSOR]
25 
26 
27 async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
28  """Set up Sensor.Community as config entry."""
29 
30  # For backwards compat, set unique ID
31  if entry.unique_id is None:
32  hass.config_entries.async_update_entry(
33  entry, unique_id=str(entry.data[CONF_SENSOR_ID])
34  )
35 
36  sensor_community = Luftdaten(entry.data[CONF_SENSOR_ID])
37 
38  async def async_update() -> dict[str, float | int]:
39  """Update sensor/binary sensor data."""
40  try:
41  await sensor_community.get_data()
42  except LuftdatenError as err:
43  raise UpdateFailed("Unable to retrieve data from Sensor.Community") from err
44 
45  if not sensor_community.values:
46  raise UpdateFailed("Did not receive sensor data from Sensor.Community")
47 
48  data: dict[str, float | int] = sensor_community.values
49  data.update(sensor_community.meta)
50  return data
51 
52  coordinator: DataUpdateCoordinator[dict[str, Any]] = DataUpdateCoordinator(
53  hass,
54  _LOGGER,
55  config_entry=entry,
56  name=f"{DOMAIN}_{sensor_community.sensor_id}",
57  update_interval=DEFAULT_SCAN_INTERVAL,
58  update_method=async_update,
59  )
60  await coordinator.async_config_entry_first_refresh()
61 
62  hass.data.setdefault(DOMAIN, {})[entry.entry_id] = coordinator
63  await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
64 
65  return True
66 
67 
68 async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
69  """Unload an Sensor.Community config entry."""
70  if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
71  del hass.data[DOMAIN][entry.entry_id]
72  return unload_ok
bool async_unload_entry(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:68
bool async_setup_entry(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:27