1 """Sensor platform for the Bring! integration."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
7 from enum
import StrEnum
9 from bring_api
import BringUserSettingsResponse
10 from bring_api.const
import BRING_SUPPORTED_LOCALES
15 SensorEntityDescription,
22 from .
import BringConfigEntry
23 from .const
import UNIT_ITEMS
24 from .coordinator
import BringData, BringDataUpdateCoordinator
25 from .entity
import BringBaseEntity
26 from .util
import list_language, sum_attributes
29 @dataclass(kw_only=True, frozen=True)
31 """Bring Sensor Description."""
33 value_fn: Callable[[BringData, BringUserSettingsResponse], StateType]
40 CONVENIENT =
"convenient"
41 DISCOUNTED =
"discounted"
42 LIST_LANGUAGE =
"list_language"
43 LIST_ACCESS =
"list_access"
46 SENSOR_DESCRIPTIONS: tuple[BringSensorEntityDescription, ...] = (
48 key=BringSensor.URGENT,
49 translation_key=BringSensor.URGENT,
51 native_unit_of_measurement=UNIT_ITEMS,
54 key=BringSensor.CONVENIENT,
55 translation_key=BringSensor.CONVENIENT,
57 native_unit_of_measurement=UNIT_ITEMS,
60 key=BringSensor.DISCOUNTED,
61 translation_key=BringSensor.DISCOUNTED,
63 native_unit_of_measurement=UNIT_ITEMS,
66 key=BringSensor.LIST_LANGUAGE,
67 translation_key=BringSensor.LIST_LANGUAGE,
69 lambda lst, settings: x.lower()
73 entity_category=EntityCategory.DIAGNOSTIC,
74 options=[x.lower()
for x
in BRING_SUPPORTED_LOCALES],
75 device_class=SensorDeviceClass.ENUM,
78 key=BringSensor.LIST_ACCESS,
79 translation_key=BringSensor.LIST_ACCESS,
80 value_fn=
lambda lst, _: lst[
"status"].lower(),
81 entity_category=EntityCategory.DIAGNOSTIC,
82 options=[
"registered",
"shared",
"invitation"],
83 device_class=SensorDeviceClass.ENUM,
90 config_entry: BringConfigEntry,
91 async_add_entities: AddEntitiesCallback,
93 """Set up the sensor platform."""
94 coordinator = config_entry.runtime_data
102 for description
in SENSOR_DESCRIPTIONS
103 for bring_list
in coordinator.data.values()
108 """A sensor entity."""
110 entity_description: BringSensorEntityDescription
114 coordinator: BringDataUpdateCoordinator,
115 bring_list: BringData,
116 entity_description: BringSensorEntityDescription,
118 """Initialize the entity."""
119 super().
__init__(coordinator, bring_list)
121 self.
_attr_unique_id_attr_unique_id = f
"{coordinator.config_entry.unique_id}_{self._list_uuid}_{self.entity_description.key}"
125 """Return the state of the sensor."""
128 self.coordinator.data[self.
_list_uuid_list_uuid],
129 self.coordinator.user_settings,
None __init__(self, BringDataUpdateCoordinator coordinator, BringData bring_list, BringSensorEntityDescription entity_description)
StateType native_value(self)
None async_setup_entry(HomeAssistant hass, BringConfigEntry config_entry, AddEntitiesCallback async_add_entities)
str|None list_language(str list_uuid, BringUserSettingsResponse user_settings)
int sum_attributes(BringData bring_list, str attribute)