1 """Support for ReCollect Waste sensors."""
3 from __future__
import annotations
5 from datetime
import date
7 from aiorecollect.client
import PickupEvent
12 SensorEntityDescription,
19 from .const
import DOMAIN, LOGGER
20 from .entity
import ReCollectWasteEntity
21 from .util
import async_get_pickup_type_names
23 ATTR_PICKUP_TYPES =
"pickup_types"
24 ATTR_AREA_NAME =
"area_name"
26 SENSOR_TYPE_CURRENT_PICKUP =
"current_pickup"
27 SENSOR_TYPE_NEXT_PICKUP =
"next_pickup"
29 SENSOR_DESCRIPTIONS = (
31 key=SENSOR_TYPE_CURRENT_PICKUP,
32 translation_key=SENSOR_TYPE_CURRENT_PICKUP,
35 key=SENSOR_TYPE_NEXT_PICKUP,
36 translation_key=SENSOR_TYPE_NEXT_PICKUP,
42 hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
44 """Set up ReCollect Waste sensors based on a config entry."""
45 coordinator: DataUpdateCoordinator[list[PickupEvent]] = hass.data[DOMAIN][
51 for description
in SENSOR_DESCRIPTIONS
56 """Define a ReCollect Waste sensor."""
58 _attr_device_class = SensorDeviceClass.DATE
61 SENSOR_TYPE_CURRENT_PICKUP: 1,
62 SENSOR_TYPE_NEXT_PICKUP: 2,
67 coordinator: DataUpdateCoordinator[list[PickupEvent]],
69 description: SensorEntityDescription,
79 """Handle updated data from the coordinator."""
80 relevant_events = (e
for e
in self.coordinator.data
if e.date >= date.today())
84 for _
in range(pickup_index):
85 event = next(relevant_events)
87 LOGGER.debug(
"No pickup event found for %s", self.
entity_descriptionentity_description.key)
_attr_extra_state_attributes
None __init__(self, DataUpdateCoordinator[list[PickupEvent]] coordinator, ConfigEntry entry, SensorEntityDescription description)
dictionary PICKUP_INDEX_MAP
None _handle_coordinator_update(self)
_attr_extra_state_attributes
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
list[str] async_get_pickup_type_names(ConfigEntry entry, list[PickupType] pickup_types)