1 """Support for Notion."""
3 from __future__
import annotations
5 from dataclasses
import dataclass
7 from aionotion.bridge.models
import Bridge
8 from aionotion.listener.models
import Listener, ListenerKind
16 from .const
import DOMAIN, LOGGER
17 from .coordinator
import NotionDataUpdateCoordinator
20 @dataclass(frozen=True, kw_only=True)
22 """Define an description for Notion entities."""
24 listener_kind: ListenerKind
28 """Define a base Notion entity."""
30 _attr_has_entity_name =
True
34 coordinator: NotionDataUpdateCoordinator,
38 description: EntityDescription,
40 """Initialize the entity."""
43 sensor = self.coordinator.data.sensors[sensor_id]
46 identifiers={(DOMAIN, sensor.hardware_id)},
47 manufacturer=
"Silicon Labs",
48 model=
str(sensor.hardware_revision),
49 name=
str(sensor.name).capitalize(),
50 sw_version=sensor.firmware_version,
54 self.
_attr_device_info_attr_device_info[
"via_device"] = (DOMAIN, bridge.hardware_id)
65 """Return True if entity is available."""
67 self.coordinator.last_update_success
68 and self.
_listener_id_listener_id
in self.coordinator.data.listeners
73 """Return the listener related to this entity."""
74 return self.coordinator.data.listeners[self.
_listener_id_listener_id]
78 """Get a bridge by ID (if it exists)."""
79 if (bridge := self.coordinator.data.bridges.get(bridge_id))
is None:
80 LOGGER.debug(
"Entity references a non-existent bridge ID: %s", bridge_id)
86 """Update the entity's bridge ID if it has changed.
88 Sensors can move to other bridges based on signal strength, etc.
90 sensor = self.coordinator.data.sensors[self.
_sensor_id_sensor_id]
93 if self.
_bridge_id_bridge_id == sensor.bridge.id:
102 device_registry = dr.async_get(self.
hasshass)
103 this_device = device_registry.async_get_device(
104 identifiers={(DOMAIN, sensor.hardware_id)}
106 bridge = self.coordinator.data.bridges[self.
_bridge_id_bridge_id]
107 bridge_device = device_registry.async_get_device(
108 identifiers={(DOMAIN, bridge.hardware_id)}
111 if not bridge_device
or not this_device:
114 device_registry.async_update_device(
115 this_device.id, via_device_id=bridge_device.id
120 """Respond to a DataUpdateCoordinator update."""
121 if self.
_listener_id_listener_id
in self.coordinator.data.listeners:
None __init__(self, NotionDataUpdateCoordinator coordinator, str listener_id, str sensor_id, int bridge_id, EntityDescription description)
None _async_update_bridge_id(self)
_attr_extra_state_attributes
Bridge|None _async_get_bridge(self, int bridge_id)
None _handle_coordinator_update(self)