1 """Support for Elgato sensors."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
11 SensorEntityDescription,
17 UnitOfElectricCurrent,
18 UnitOfElectricPotential,
24 from .
import ElgatorConfigEntry
25 from .coordinator
import ElgatoData, ElgatoDataUpdateCoordinator
26 from .entity
import ElgatoEntity
29 @dataclass(frozen=True, kw_only=True)
31 """Class describing Elgato sensor entities."""
33 has_fn: Callable[[ElgatoData], bool] =
lambda _:
True
34 value_fn: Callable[[ElgatoData], float | int |
None]
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,
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,
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,
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,
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,
104 entry: ElgatorConfigEntry,
105 async_add_entities: AddEntitiesCallback,
107 """Set up Elgato sensor based on a config entry."""
108 coordinator = entry.runtime_data
112 coordinator=coordinator,
113 description=description,
115 for description
in SENSORS
116 if description.has_fn(coordinator.data)
121 """Representation of a Elgato sensor."""
123 entity_description: ElgatoSensorEntityDescription
127 coordinator: ElgatoDataUpdateCoordinator,
128 description: ElgatoSensorEntityDescription,
130 """Initiate Elgato sensor."""
135 f
"{coordinator.data.info.serial_number}_{description.key}"
140 """Return the sensor value."""
None __init__(self, ElgatoDataUpdateCoordinator coordinator, ElgatoSensorEntityDescription description)
float|int|None native_value(self)
None async_setup_entry(HomeAssistant hass, ElgatorConfigEntry entry, AddEntitiesCallback async_add_entities)