mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 05:07:41 +00:00
Move luftdaten coordinator to separate module (#147477)
This commit is contained in:
parent
2bcdc03661
commit
f22b623968
@ -6,20 +6,14 @@ the integration name.
|
|||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import logging
|
|
||||||
from typing import Any
|
|
||||||
|
|
||||||
from luftdaten import Luftdaten
|
from luftdaten import Luftdaten
|
||||||
from luftdaten.exceptions import LuftdatenError
|
|
||||||
|
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.const import Platform
|
from homeassistant.const import Platform
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
|
|
||||||
|
|
||||||
from .const import CONF_SENSOR_ID, DEFAULT_SCAN_INTERVAL, DOMAIN
|
from .const import CONF_SENSOR_ID, DOMAIN
|
||||||
|
from .coordinator import LuftdatenDataUpdateCoordinator
|
||||||
_LOGGER = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
PLATFORMS = [Platform.SENSOR]
|
PLATFORMS = [Platform.SENSOR]
|
||||||
|
|
||||||
@ -35,28 +29,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
|||||||
|
|
||||||
sensor_community = Luftdaten(entry.data[CONF_SENSOR_ID])
|
sensor_community = Luftdaten(entry.data[CONF_SENSOR_ID])
|
||||||
|
|
||||||
async def async_update() -> dict[str, float | int]:
|
coordinator = LuftdatenDataUpdateCoordinator(hass, entry, sensor_community)
|
||||||
"""Update sensor/binary sensor data."""
|
|
||||||
try:
|
|
||||||
await sensor_community.get_data()
|
|
||||||
except LuftdatenError as err:
|
|
||||||
raise UpdateFailed("Unable to retrieve data from Sensor.Community") from err
|
|
||||||
|
|
||||||
if not sensor_community.values:
|
|
||||||
raise UpdateFailed("Did not receive sensor data from Sensor.Community")
|
|
||||||
|
|
||||||
data: dict[str, float | int] = sensor_community.values
|
|
||||||
data.update(sensor_community.meta)
|
|
||||||
return data
|
|
||||||
|
|
||||||
coordinator: DataUpdateCoordinator[dict[str, Any]] = DataUpdateCoordinator(
|
|
||||||
hass,
|
|
||||||
_LOGGER,
|
|
||||||
config_entry=entry,
|
|
||||||
name=f"{DOMAIN}_{sensor_community.sensor_id}",
|
|
||||||
update_interval=DEFAULT_SCAN_INTERVAL,
|
|
||||||
update_method=async_update,
|
|
||||||
)
|
|
||||||
await coordinator.async_config_entry_first_refresh()
|
await coordinator.async_config_entry_first_refresh()
|
||||||
|
|
||||||
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = coordinator
|
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = coordinator
|
||||||
|
56
homeassistant/components/luftdaten/coordinator.py
Normal file
56
homeassistant/components/luftdaten/coordinator.py
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
"""Support for Sensor.Community stations.
|
||||||
|
|
||||||
|
Sensor.Community was previously called Luftdaten, hence the domain differs from
|
||||||
|
the integration name.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from luftdaten import Luftdaten
|
||||||
|
from luftdaten.exceptions import LuftdatenError
|
||||||
|
|
||||||
|
from homeassistant.config_entries import ConfigEntry
|
||||||
|
from homeassistant.core import HomeAssistant
|
||||||
|
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
|
||||||
|
|
||||||
|
from .const import DEFAULT_SCAN_INTERVAL, DOMAIN
|
||||||
|
|
||||||
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class LuftdatenDataUpdateCoordinator(DataUpdateCoordinator[dict[str, float | int]]):
|
||||||
|
"""Data update coordinator for Sensor.Community."""
|
||||||
|
|
||||||
|
config_entry: ConfigEntry
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
hass: HomeAssistant,
|
||||||
|
config_entry: ConfigEntry,
|
||||||
|
sensor_community: Luftdaten,
|
||||||
|
) -> None:
|
||||||
|
"""Initialize the coordinator."""
|
||||||
|
super().__init__(
|
||||||
|
hass,
|
||||||
|
_LOGGER,
|
||||||
|
config_entry=config_entry,
|
||||||
|
name=f"{DOMAIN}_{sensor_community.sensor_id}",
|
||||||
|
update_interval=DEFAULT_SCAN_INTERVAL,
|
||||||
|
)
|
||||||
|
self._sensor_community = sensor_community
|
||||||
|
|
||||||
|
async def _async_update_data(self) -> dict[str, float | int]:
|
||||||
|
"""Update sensor/binary sensor data."""
|
||||||
|
try:
|
||||||
|
await self._sensor_community.get_data()
|
||||||
|
except LuftdatenError as err:
|
||||||
|
raise UpdateFailed("Unable to retrieve data from Sensor.Community") from err
|
||||||
|
|
||||||
|
if not self._sensor_community.values:
|
||||||
|
raise UpdateFailed("Did not receive sensor data from Sensor.Community")
|
||||||
|
|
||||||
|
data: dict[str, float | int] = self._sensor_community.values
|
||||||
|
data.update(self._sensor_community.meta)
|
||||||
|
return data
|
@ -8,9 +8,9 @@ from homeassistant.components.diagnostics import async_redact_data
|
|||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.const import CONF_LATITUDE, CONF_LONGITUDE
|
from homeassistant.const import CONF_LATITUDE, CONF_LONGITUDE
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
|
|
||||||
|
|
||||||
from .const import CONF_SENSOR_ID, DOMAIN
|
from .const import CONF_SENSOR_ID, DOMAIN
|
||||||
|
from .coordinator import LuftdatenDataUpdateCoordinator
|
||||||
|
|
||||||
TO_REDACT = {
|
TO_REDACT = {
|
||||||
CONF_LATITUDE,
|
CONF_LATITUDE,
|
||||||
@ -23,7 +23,5 @@ async def async_get_config_entry_diagnostics(
|
|||||||
hass: HomeAssistant, entry: ConfigEntry
|
hass: HomeAssistant, entry: ConfigEntry
|
||||||
) -> dict[str, Any]:
|
) -> dict[str, Any]:
|
||||||
"""Return diagnostics for a config entry."""
|
"""Return diagnostics for a config entry."""
|
||||||
coordinator: DataUpdateCoordinator[dict[str, Any]] = hass.data[DOMAIN][
|
coordinator: LuftdatenDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
|
||||||
entry.entry_id
|
|
||||||
]
|
|
||||||
return async_redact_data(coordinator.data, TO_REDACT)
|
return async_redact_data(coordinator.data, TO_REDACT)
|
||||||
|
@ -23,12 +23,10 @@ from homeassistant.const import (
|
|||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers.device_registry import DeviceInfo
|
from homeassistant.helpers.device_registry import DeviceInfo
|
||||||
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
||||||
from homeassistant.helpers.update_coordinator import (
|
from homeassistant.helpers.update_coordinator import CoordinatorEntity
|
||||||
CoordinatorEntity,
|
|
||||||
DataUpdateCoordinator,
|
|
||||||
)
|
|
||||||
|
|
||||||
from .const import ATTR_SENSOR_ID, CONF_SENSOR_ID, DOMAIN
|
from .const import ATTR_SENSOR_ID, CONF_SENSOR_ID, DOMAIN
|
||||||
|
from .coordinator import LuftdatenDataUpdateCoordinator
|
||||||
|
|
||||||
SENSORS: tuple[SensorEntityDescription, ...] = (
|
SENSORS: tuple[SensorEntityDescription, ...] = (
|
||||||
SensorEntityDescription(
|
SensorEntityDescription(
|
||||||
@ -77,7 +75,7 @@ async def async_setup_entry(
|
|||||||
async_add_entities: AddConfigEntryEntitiesCallback,
|
async_add_entities: AddConfigEntryEntitiesCallback,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up a Sensor.Community sensor based on a config entry."""
|
"""Set up a Sensor.Community sensor based on a config entry."""
|
||||||
coordinator = hass.data[DOMAIN][entry.entry_id]
|
coordinator: LuftdatenDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
|
||||||
|
|
||||||
async_add_entities(
|
async_add_entities(
|
||||||
SensorCommunitySensor(
|
SensorCommunitySensor(
|
||||||
@ -101,7 +99,7 @@ class SensorCommunitySensor(CoordinatorEntity, SensorEntity):
|
|||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
*,
|
*,
|
||||||
coordinator: DataUpdateCoordinator,
|
coordinator: LuftdatenDataUpdateCoordinator,
|
||||||
description: SensorEntityDescription,
|
description: SensorEntityDescription,
|
||||||
sensor_id: int,
|
sensor_id: int,
|
||||||
show_on_map: bool,
|
show_on_map: bool,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user