Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for Vilfo Router sensors."""
2 
3 from dataclasses import dataclass
4 
6  SensorDeviceClass,
7  SensorEntity,
8  SensorEntityDescription,
9 )
10 from homeassistant.config_entries import ConfigEntry
11 from homeassistant.const import PERCENTAGE
12 from homeassistant.core import HomeAssistant
13 from homeassistant.helpers.device_registry import DeviceInfo
14 from homeassistant.helpers.entity_platform import AddEntitiesCallback
15 
16 from .const import (
17  ATTR_API_DATA_FIELD_BOOT_TIME,
18  ATTR_API_DATA_FIELD_LOAD,
19  ATTR_BOOT_TIME,
20  ATTR_LOAD,
21  DOMAIN,
22  ROUTER_DEFAULT_MODEL,
23  ROUTER_DEFAULT_NAME,
24  ROUTER_MANUFACTURER,
25 )
26 
27 
28 @dataclass(frozen=True, kw_only=True)
30  """Describes Vilfo sensor entity."""
31 
32  api_key: str
33 
34 
35 SENSOR_TYPES: tuple[VilfoSensorEntityDescription, ...] = (
37  key=ATTR_LOAD,
38  translation_key=ATTR_LOAD,
39  native_unit_of_measurement=PERCENTAGE,
40  api_key=ATTR_API_DATA_FIELD_LOAD,
41  ),
43  key=ATTR_BOOT_TIME,
44  translation_key=ATTR_BOOT_TIME,
45  api_key=ATTR_API_DATA_FIELD_BOOT_TIME,
46  device_class=SensorDeviceClass.TIMESTAMP,
47  ),
48 )
49 
50 
52  hass: HomeAssistant,
53  config_entry: ConfigEntry,
54  async_add_entities: AddEntitiesCallback,
55 ) -> None:
56  """Add Vilfo Router entities from a config_entry."""
57  vilfo = hass.data[DOMAIN][config_entry.entry_id]
58 
59  entities = [VilfoRouterSensor(vilfo, description) for description in SENSOR_TYPES]
60 
61  async_add_entities(entities, True)
62 
63 
65  """Define a Vilfo Router Sensor."""
66 
67  entity_description: VilfoSensorEntityDescription
68  _attr_has_entity_name = True
69 
70  def __init__(self, api, description: VilfoSensorEntityDescription) -> None:
71  """Initialize."""
72  self.entity_descriptionentity_description = description
73  self.apiapi = api
74  self._attr_device_info_attr_device_info = DeviceInfo(
75  identifiers={(DOMAIN, api.host, api.mac_address)}, # type: ignore[arg-type]
76  name=ROUTER_DEFAULT_NAME,
77  manufacturer=ROUTER_MANUFACTURER,
78  model=ROUTER_DEFAULT_MODEL,
79  sw_version=api.firmware_version,
80  )
81  self._attr_unique_id_attr_unique_id = f"{api.unique_id}_{description.key}"
82 
83  @property
84  def available(self) -> bool:
85  """Return whether the sensor is available or not."""
86  return self.apiapi.available
87 
88  async def async_update(self) -> None:
89  """Update the router data."""
90  await self.apiapi.async_update()
91  self._attr_native_value_attr_native_value = self.apiapi.data.get(self.entity_descriptionentity_description.api_key)
None __init__(self, api, VilfoSensorEntityDescription description)
Definition: sensor.py:70
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:55