Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for Rituals Perfume Genie sensors."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Callable
6 from dataclasses import dataclass
7 
8 from pyrituals import Diffuser
9 
11  SensorDeviceClass,
12  SensorEntity,
13  SensorEntityDescription,
14 )
15 from homeassistant.config_entries import ConfigEntry
16 from homeassistant.const import PERCENTAGE, EntityCategory
17 from homeassistant.core import HomeAssistant
18 from homeassistant.helpers.entity_platform import AddEntitiesCallback
19 
20 from .const import DOMAIN
21 from .coordinator import RitualsDataUpdateCoordinator
22 from .entity import DiffuserEntity
23 
24 
25 @dataclass(frozen=True, kw_only=True)
27  """Class describing Rituals sensor entities."""
28 
29  has_fn: Callable[[Diffuser], bool] = lambda _: True
30  value_fn: Callable[[Diffuser], int | str]
31 
32 
33 ENTITY_DESCRIPTIONS = (
35  key="battery_percentage",
36  native_unit_of_measurement=PERCENTAGE,
37  device_class=SensorDeviceClass.BATTERY,
38  value_fn=lambda diffuser: diffuser.battery_percentage,
39  has_fn=lambda diffuser: diffuser.has_battery,
40  ),
42  key="fill",
43  translation_key="fill",
44  value_fn=lambda diffuser: diffuser.fill,
45  ),
47  key="perfume",
48  translation_key="perfume",
49  value_fn=lambda diffuser: diffuser.perfume,
50  ),
52  key="wifi_percentage",
53  translation_key="wifi_percentage",
54  native_unit_of_measurement=PERCENTAGE,
55  value_fn=lambda diffuser: diffuser.wifi_percentage,
56  ),
57 )
58 
59 
61  hass: HomeAssistant,
62  config_entry: ConfigEntry,
63  async_add_entities: AddEntitiesCallback,
64 ) -> None:
65  """Set up the diffuser sensors."""
66  coordinators: dict[str, RitualsDataUpdateCoordinator] = hass.data[DOMAIN][
67  config_entry.entry_id
68  ]
69 
71  RitualsSensorEntity(coordinator, description)
72  for coordinator in coordinators.values()
73  for description in ENTITY_DESCRIPTIONS
74  if description.has_fn(coordinator.diffuser)
75  )
76 
77 
79  """Representation of a diffuser sensor."""
80 
81  entity_description: RitualsSensorEntityDescription
82  _attr_entity_category = EntityCategory.DIAGNOSTIC
83 
84  @property
85  def native_value(self) -> str | int:
86  """Return the sensor value."""
87  return self.entity_descriptionentity_description.value_fn(self.coordinator.diffuser)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:64