1
mirror of https://github.com/home-assistant/core synced 2024-08-28 03:36:46 +02:00
ha-core/homeassistant/components/vilfo/sensor.py
Erik Montnemery 0c2485bc03
Freeze integration entity descriptions (#105984)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-12-18 16:28:13 -10:00

98 lines
2.8 KiB
Python

"""Support for Vilfo Router sensors."""
from dataclasses import dataclass
from homeassistant.components.sensor import (
SensorDeviceClass,
SensorEntity,
SensorEntityDescription,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import PERCENTAGE
from homeassistant.core import HomeAssistant
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import (
ATTR_API_DATA_FIELD_BOOT_TIME,
ATTR_API_DATA_FIELD_LOAD,
ATTR_BOOT_TIME,
ATTR_LOAD,
DOMAIN,
ROUTER_DEFAULT_MODEL,
ROUTER_DEFAULT_NAME,
ROUTER_MANUFACTURER,
)
@dataclass(frozen=True)
class VilfoRequiredKeysMixin:
"""Mixin for required keys."""
api_key: str
@dataclass(frozen=True)
class VilfoSensorEntityDescription(SensorEntityDescription, VilfoRequiredKeysMixin):
"""Describes Vilfo sensor entity."""
SENSOR_TYPES: tuple[VilfoSensorEntityDescription, ...] = (
VilfoSensorEntityDescription(
key=ATTR_LOAD,
translation_key=ATTR_LOAD,
native_unit_of_measurement=PERCENTAGE,
icon="mdi:memory",
api_key=ATTR_API_DATA_FIELD_LOAD,
),
VilfoSensorEntityDescription(
key=ATTR_BOOT_TIME,
translation_key=ATTR_BOOT_TIME,
icon="mdi:timer-outline",
api_key=ATTR_API_DATA_FIELD_BOOT_TIME,
device_class=SensorDeviceClass.TIMESTAMP,
),
)
async def async_setup_entry(
hass: HomeAssistant,
config_entry: ConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Add Vilfo Router entities from a config_entry."""
vilfo = hass.data[DOMAIN][config_entry.entry_id]
entities = [VilfoRouterSensor(vilfo, description) for description in SENSOR_TYPES]
async_add_entities(entities, True)
class VilfoRouterSensor(SensorEntity):
"""Define a Vilfo Router Sensor."""
entity_description: VilfoSensorEntityDescription
_attr_has_entity_name = True
def __init__(self, api, description: VilfoSensorEntityDescription) -> None:
"""Initialize."""
self.entity_description = description
self.api = api
self._attr_device_info = DeviceInfo(
identifiers={(DOMAIN, api.host, api.mac_address)}, # type: ignore[arg-type]
name=ROUTER_DEFAULT_NAME,
manufacturer=ROUTER_MANUFACTURER,
model=ROUTER_DEFAULT_MODEL,
sw_version=api.firmware_version,
)
self._attr_unique_id = f"{api.unique_id}_{description.key}"
@property
def available(self) -> bool:
"""Return whether the sensor is available or not."""
return self.api.available
async def async_update(self) -> None:
"""Update the router data."""
await self.api.async_update()
self._attr_native_value = self.api.data.get(self.entity_description.api_key)