1
0
mirror of https://github.com/home-assistant/core.git synced 2026-07-07 14:56:25 +01:00
Files
core/homeassistant/components/rdw/sensor.py
T
2026-06-22 20:21:39 +02:00

78 lines
2.2 KiB
Python

"""Support for RDW sensors."""
from collections.abc import Callable
from dataclasses import dataclass
from datetime import date
from typing import override
from vehicle import Vehicle
from homeassistant.components.sensor import (
SensorDeviceClass,
SensorEntity,
SensorEntityDescription,
)
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
from .coordinator import RDWConfigEntry, RDWDataUpdateCoordinator
from .entity import RDWEntity
PARALLEL_UPDATES = 0
@dataclass(frozen=True, kw_only=True)
class RDWSensorEntityDescription(SensorEntityDescription):
"""Describes RDW sensor entity."""
value_fn: Callable[[Vehicle], date | str | float | None]
SENSORS: tuple[RDWSensorEntityDescription, ...] = (
RDWSensorEntityDescription(
key="apk_expiration",
translation_key="apk_expiration",
device_class=SensorDeviceClass.DATE,
value_fn=lambda vehicle: vehicle.apk_expiration,
),
RDWSensorEntityDescription(
key="ascription_date",
translation_key="ascription_date",
device_class=SensorDeviceClass.DATE,
value_fn=lambda vehicle: vehicle.ascription_date,
),
)
async def async_setup_entry(
hass: HomeAssistant,
entry: RDWConfigEntry,
async_add_entities: AddConfigEntryEntitiesCallback,
) -> None:
"""Set up RDW sensors based on a config entry."""
async_add_entities(
RDWSensorEntity(entry.runtime_data, description) for description in SENSORS
)
class RDWSensorEntity(RDWEntity, SensorEntity):
"""Defines an RDW sensor."""
entity_description: RDWSensorEntityDescription
def __init__(
self,
coordinator: RDWDataUpdateCoordinator,
description: RDWSensorEntityDescription,
) -> None:
"""Initialize RDW sensor."""
super().__init__(coordinator)
self.entity_description = description
self._attr_unique_id = f"{coordinator.data.license_plate}_{description.key}"
@property
@override
def native_value(self) -> date | str | float | None:
"""Return the state of the sensor."""
return self.entity_description.value_fn(self.coordinator.data)