Use config entry runtime data in Trafikverket Camera (#116552)

This commit is contained in:
G Johansson 2024-05-01 21:59:07 +02:00 committed by GitHub
parent 6cb703aa1d
commit b2c1cd3e2a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 33 additions and 26 deletions

View File

@ -19,13 +19,15 @@ CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)
_LOGGER = logging.getLogger(__name__)
TVCameraConfigEntry = ConfigEntry[TVDataUpdateCoordinator]
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_setup_entry(hass: HomeAssistant, entry: TVCameraConfigEntry) -> bool:
"""Set up Trafikverket Camera from a config entry."""
coordinator = TVDataUpdateCoordinator(hass, entry)
coordinator = TVDataUpdateCoordinator(hass)
await coordinator.async_config_entry_first_refresh()
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = coordinator
entry.runtime_data = coordinator
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
@ -34,11 +36,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Unload Trafikverket Camera config entry."""
if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
hass.data[DOMAIN].pop(entry.entry_id)
return unload_ok
return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
async def async_migrate_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:

View File

@ -9,12 +9,11 @@ from homeassistant.components.binary_sensor import (
BinarySensorEntity,
BinarySensorEntityDescription,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN
from .coordinator import CameraData, TVDataUpdateCoordinator
from . import TVCameraConfigEntry
from .coordinator import CameraData
from .entity import TrafikverketCameraNonCameraEntity
PARALLEL_UPDATES = 0
@ -35,11 +34,13 @@ BINARY_SENSOR_TYPE = TVCameraSensorEntityDescription(
async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
hass: HomeAssistant,
entry: TVCameraConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up Trafikverket Camera binary sensor platform."""
coordinator: TVDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
coordinator = entry.runtime_data
async_add_entities(
[
TrafikverketCameraBinarySensor(

View File

@ -6,24 +6,24 @@ from collections.abc import Mapping
from typing import Any
from homeassistant.components.camera import Camera
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ATTR_LOCATION
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import ATTR_DESCRIPTION, ATTR_TYPE, DOMAIN
from . import TVCameraConfigEntry
from .const import ATTR_DESCRIPTION, ATTR_TYPE
from .coordinator import TVDataUpdateCoordinator
from .entity import TrafikverketCameraEntity
async def async_setup_entry(
hass: HomeAssistant,
entry: ConfigEntry,
entry: TVCameraConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up a Trafikverket Camera."""
coordinator: TVDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
coordinator = entry.runtime_data
async_add_entities(
[

View File

@ -6,6 +6,7 @@ from dataclasses import dataclass
from datetime import timedelta
from io import BytesIO
import logging
from typing import TYPE_CHECKING
from pytrafikverket.exceptions import (
InvalidAuthentication,
@ -15,7 +16,6 @@ from pytrafikverket.exceptions import (
)
from pytrafikverket.trafikverket_camera import CameraInfo, TrafikverketCamera
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_API_KEY, CONF_ID
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryAuthFailed
@ -24,6 +24,9 @@ from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, Upda
from .const import DOMAIN
if TYPE_CHECKING:
from . import TVCameraConfigEntry
_LOGGER = logging.getLogger(__name__)
TIME_BETWEEN_UPDATES = timedelta(minutes=5)
@ -39,7 +42,9 @@ class CameraData:
class TVDataUpdateCoordinator(DataUpdateCoordinator[CameraData]):
"""A Trafikverket Data Update Coordinator."""
def __init__(self, hass: HomeAssistant, entry: ConfigEntry) -> None:
config_entry: TVCameraConfigEntry
def __init__(self, hass: HomeAssistant) -> None:
"""Initialize the Trafikverket coordinator."""
super().__init__(
hass,
@ -48,8 +53,10 @@ class TVDataUpdateCoordinator(DataUpdateCoordinator[CameraData]):
update_interval=TIME_BETWEEN_UPDATES,
)
self.session = async_get_clientsession(hass)
self._camera_api = TrafikverketCamera(self.session, entry.data[CONF_API_KEY])
self._id = entry.data[CONF_ID]
self._camera_api = TrafikverketCamera(
self.session, self.config_entry.data[CONF_API_KEY]
)
self._id = self.config_entry.data[CONF_ID]
async def _async_update_data(self) -> CameraData:
"""Fetch data from Trafikverket."""

View File

@ -11,14 +11,13 @@ from homeassistant.components.sensor import (
SensorEntity,
SensorEntityDescription,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import DEGREE
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import StateType
from .const import DOMAIN
from .coordinator import CameraData, TVDataUpdateCoordinator
from . import TVCameraConfigEntry
from .coordinator import CameraData
from .entity import TrafikverketCameraNonCameraEntity
PARALLEL_UPDATES = 0
@ -73,11 +72,13 @@ SENSOR_TYPES: tuple[TVCameraSensorEntityDescription, ...] = (
async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
hass: HomeAssistant,
entry: TVCameraConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up Trafikverket Camera sensor platform."""
coordinator: TVDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
coordinator = entry.runtime_data
async_add_entities(
TrafikverketCameraSensor(coordinator, entry.entry_id, description)
for description in SENSOR_TYPES