Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for Elgato sensors."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Callable
6 from dataclasses import dataclass
7 
9  SensorDeviceClass,
10  SensorEntity,
11  SensorEntityDescription,
12  SensorStateClass,
13 )
14 from homeassistant.const import (
15  PERCENTAGE,
16  EntityCategory,
17  UnitOfElectricCurrent,
18  UnitOfElectricPotential,
19  UnitOfPower,
20 )
21 from homeassistant.core import HomeAssistant
22 from homeassistant.helpers.entity_platform import AddEntitiesCallback
23 
24 from . import ElgatorConfigEntry
25 from .coordinator import ElgatoData, ElgatoDataUpdateCoordinator
26 from .entity import ElgatoEntity
27 
28 
29 @dataclass(frozen=True, kw_only=True)
31  """Class describing Elgato sensor entities."""
32 
33  has_fn: Callable[[ElgatoData], bool] = lambda _: True
34  value_fn: Callable[[ElgatoData], float | int | None]
35 
36 
37 SENSORS = [
39  key="battery",
40  device_class=SensorDeviceClass.BATTERY,
41  entity_category=EntityCategory.DIAGNOSTIC,
42  native_unit_of_measurement=PERCENTAGE,
43  state_class=SensorStateClass.MEASUREMENT,
44  suggested_display_precision=0,
45  has_fn=lambda x: x.battery is not None,
46  value_fn=lambda x: x.battery.level if x.battery else None,
47  ),
49  key="voltage",
50  translation_key="voltage",
51  entity_registry_enabled_default=False,
52  device_class=SensorDeviceClass.VOLTAGE,
53  entity_category=EntityCategory.DIAGNOSTIC,
54  native_unit_of_measurement=UnitOfElectricPotential.MILLIVOLT,
55  state_class=SensorStateClass.MEASUREMENT,
56  suggested_unit_of_measurement=UnitOfElectricPotential.VOLT,
57  suggested_display_precision=2,
58  has_fn=lambda x: x.battery is not None,
59  value_fn=lambda x: x.battery.voltage if x.battery else None,
60  ),
62  key="input_charge_current",
63  translation_key="input_charge_current",
64  entity_registry_enabled_default=False,
65  device_class=SensorDeviceClass.CURRENT,
66  entity_category=EntityCategory.DIAGNOSTIC,
67  native_unit_of_measurement=UnitOfElectricCurrent.MILLIAMPERE,
68  state_class=SensorStateClass.MEASUREMENT,
69  suggested_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
70  suggested_display_precision=2,
71  has_fn=lambda x: x.battery is not None,
72  value_fn=lambda x: x.battery.input_charge_current if x.battery else None,
73  ),
75  key="charge_power",
76  translation_key="charge_power",
77  entity_registry_enabled_default=False,
78  device_class=SensorDeviceClass.POWER,
79  entity_category=EntityCategory.DIAGNOSTIC,
80  native_unit_of_measurement=UnitOfPower.WATT,
81  state_class=SensorStateClass.MEASUREMENT,
82  suggested_display_precision=0,
83  has_fn=lambda x: x.battery is not None,
84  value_fn=lambda x: x.battery.charge_power if x.battery else None,
85  ),
87  key="input_charge_voltage",
88  translation_key="input_charge_voltage",
89  entity_registry_enabled_default=False,
90  device_class=SensorDeviceClass.VOLTAGE,
91  entity_category=EntityCategory.DIAGNOSTIC,
92  native_unit_of_measurement=UnitOfElectricPotential.MILLIVOLT,
93  state_class=SensorStateClass.MEASUREMENT,
94  suggested_display_precision=2,
95  suggested_unit_of_measurement=UnitOfElectricPotential.VOLT,
96  has_fn=lambda x: x.battery is not None,
97  value_fn=lambda x: x.battery.input_charge_voltage if x.battery else None,
98  ),
99 ]
100 
101 
103  hass: HomeAssistant,
104  entry: ElgatorConfigEntry,
105  async_add_entities: AddEntitiesCallback,
106 ) -> None:
107  """Set up Elgato sensor based on a config entry."""
108  coordinator = entry.runtime_data
109 
112  coordinator=coordinator,
113  description=description,
114  )
115  for description in SENSORS
116  if description.has_fn(coordinator.data)
117  )
118 
119 
121  """Representation of a Elgato sensor."""
122 
123  entity_description: ElgatoSensorEntityDescription
124 
125  def __init__(
126  self,
127  coordinator: ElgatoDataUpdateCoordinator,
128  description: ElgatoSensorEntityDescription,
129  ) -> None:
130  """Initiate Elgato sensor."""
131  super().__init__(coordinator)
132 
133  self.entity_descriptionentity_description = description
134  self._attr_unique_id_attr_unique_id = (
135  f"{coordinator.data.info.serial_number}_{description.key}"
136  )
137 
138  @property
139  def native_value(self) -> float | int | None:
140  """Return the sensor value."""
141  return self.entity_descriptionentity_description.value_fn(self.coordinator.data)
None __init__(self, ElgatoDataUpdateCoordinator coordinator, ElgatoSensorEntityDescription description)
Definition: sensor.py:129
None async_setup_entry(HomeAssistant hass, ElgatorConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:106