1 """Sensor platform for Acaia."""
3 from collections.abc
import Callable
4 from dataclasses
import dataclass
6 from aioacaia.acaiascale
import AcaiaDeviceState, AcaiaScale
7 from aioacaia.const
import UnitMass
as AcaiaUnitOfMass
13 SensorEntityDescription,
14 SensorExtraStoredData,
21 from .coordinator
import AcaiaConfigEntry
22 from .entity
import AcaiaEntity
25 @dataclass(kw_only=True, frozen=True)
27 """Description for Acaia sensor entities."""
29 value_fn: Callable[[AcaiaScale], int | float |
None]
32 @dataclass(kw_only=True, frozen=True)
34 """Description for Acaia sensor entities with dynamic units."""
36 unit_fn: Callable[[AcaiaDeviceState], str] |
None =
None
39 SENSORS: tuple[AcaiaSensorEntityDescription, ...] = (
42 device_class=SensorDeviceClass.WEIGHT,
43 native_unit_of_measurement=UnitOfMass.GRAMS,
44 state_class=SensorStateClass.MEASUREMENT,
45 unit_fn=
lambda data: (
47 if data.units == AcaiaUnitOfMass.OUNCES
50 value_fn=
lambda scale: scale.weight,
54 device_class=SensorDeviceClass.VOLUME_FLOW_RATE,
55 native_unit_of_measurement=UnitOfVolumeFlowRate.MILLILITERS_PER_SECOND,
56 suggested_display_precision=1,
57 state_class=SensorStateClass.MEASUREMENT,
58 value_fn=
lambda scale: scale.flow_rate,
61 RESTORE_SENSORS: tuple[AcaiaSensorEntityDescription, ...] = (
64 device_class=SensorDeviceClass.BATTERY,
65 native_unit_of_measurement=PERCENTAGE,
66 state_class=SensorStateClass.MEASUREMENT,
67 value_fn=
lambda scale: (
68 scale.device_state.battery_level
if scale.device_state
else None
76 entry: AcaiaConfigEntry,
77 async_add_entities: AddEntitiesCallback,
81 coordinator = entry.runtime_data
82 entities: list[SensorEntity] = [
83 AcaiaSensor(coordinator, entity_description)
for entity_description
in SENSORS
87 for entity_description
in RESTORE_SENSORS
93 """Representation of an Acaia sensor."""
95 entity_description: AcaiaDynamicUnitSensorEntityDescription
99 """Return the unit of measurement of this entity."""
109 """Return the state of the entity."""
114 """Representation of an Acaia sensor with restore capabilities."""
116 entity_description: AcaiaSensorEntityDescription
117 _restored_data: SensorExtraStoredData |
None =
None
120 """Handle entity which will be added."""
135 """Handle updated data from the coordinator."""
142 """Return True if entity is available."""
143 return super().available
or self.
_restored_data_restored_data
is not None
_attr_native_unit_of_measurement
None async_added_to_hass(self)
int|float|None native_value(self)
str|None native_unit_of_measurement(self)
SensorExtraStoredData|None async_get_last_sensor_data(self)
None _async_write_ha_state(self)
None async_setup_entry(HomeAssistant hass, AcaiaConfigEntry entry, AddEntitiesCallback async_add_entities)
None _handle_coordinator_update(self)