1 """Sensor for Risco Events."""
3 from __future__
import annotations
5 from collections.abc
import Collection, Mapping
6 from datetime
import datetime
9 from pyrisco.cloud.event
import Event
20 from .
import is_local
21 from .const
import DOMAIN, EVENTS_COORDINATOR
22 from .coordinator
import RiscoEventsDataUpdateCoordinator
23 from .entity
import zone_unique_id
48 config_entry: ConfigEntry,
49 async_add_entities: AddEntitiesCallback,
51 """Set up sensors for device."""
56 coordinator: RiscoEventsDataUpdateCoordinator = hass.data[DOMAIN][
60 RiscoSensor(coordinator, category_id, [], name, config_entry.entry_id)
61 for category_id, name
in CATEGORIES.items()
65 coordinator,
None, CATEGORIES.keys(),
"Other", config_entry.entry_id
72 """Sensor for Risco events."""
74 _entity_registry: er.EntityRegistry
78 coordinator: RiscoEventsDataUpdateCoordinator,
79 category_id: int |
None,
80 excludes: Collection[int],
84 """Initialize sensor."""
86 self.
_event_event: Event |
None =
None
91 self.
_attr_unique_id_attr_unique_id = f
"events_{name}_{self.coordinator.risco.site_uuid}"
92 self.
_attr_name_attr_name = f
"Risco {self.coordinator.risco.site_name} {name} Events"
96 """When entity is added to hass."""
101 events = self.coordinator.data
102 for event
in reversed(events):
103 if event.category_id
in self.
_excludes_excludes:
113 """Value of sensor."""
114 if self.
_event_event
is None:
117 if res := dt_util.parse_datetime(self.
_event_event.time):
118 return res.replace(tzinfo=dt_util.get_default_time_zone())
123 """State attributes."""
124 if self.
_event_event
is None:
127 attrs = {atr: getattr(self.
_event_event, atr,
None)
for atr
in EVENT_ATTRIBUTES}
128 if self.
_event_event.zone_id
is not None:
131 BS_DOMAIN, DOMAIN, uid
133 if zone_entity_id
is not None:
134 attrs[
"zone_entity_id"] = zone_entity_id
datetime|None native_value(self)
None _handle_coordinator_update(self)
None __init__(self, RiscoEventsDataUpdateCoordinator coordinator, int|None category_id, Collection[int] excludes, str name, str entry_id)
None async_added_to_hass(self)
Mapping[str, Any]|None extra_state_attributes(self)
None async_write_ha_state(self)
str zone_unique_id(RiscoCloud risco, int zone_id)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
bool is_local(ConfigEntry entry)