Fix dropped unifiprotect motion events (#120489)
This commit is contained in:
parent
6fb32db151
commit
07b70cba10
2 changed files with 5 additions and 31 deletions
|
@ -437,9 +437,6 @@ EVENT_SENSORS: tuple[ProtectBinaryEventEntityDescription, ...] = (
|
||||||
ufp_enabled="is_motion_detection_on",
|
ufp_enabled="is_motion_detection_on",
|
||||||
ufp_event_obj="last_motion_event",
|
ufp_event_obj="last_motion_event",
|
||||||
),
|
),
|
||||||
)
|
|
||||||
|
|
||||||
SMART_EVENT_SENSORS: tuple[ProtectBinaryEventEntityDescription, ...] = (
|
|
||||||
ProtectBinaryEventEntityDescription(
|
ProtectBinaryEventEntityDescription(
|
||||||
key="smart_obj_any",
|
key="smart_obj_any",
|
||||||
name="Object detected",
|
name="Object detected",
|
||||||
|
@ -711,26 +708,6 @@ class ProtectEventBinarySensor(EventEntityMixin, BinarySensorEntity):
|
||||||
entity_description: ProtectBinaryEventEntityDescription
|
entity_description: ProtectBinaryEventEntityDescription
|
||||||
_state_attrs = ("_attr_available", "_attr_is_on", "_attr_extra_state_attributes")
|
_state_attrs = ("_attr_available", "_attr_is_on", "_attr_extra_state_attributes")
|
||||||
|
|
||||||
@callback
|
|
||||||
def _async_update_device_from_protect(self, device: ProtectModelWithId) -> None:
|
|
||||||
super()._async_update_device_from_protect(device)
|
|
||||||
description = self.entity_description
|
|
||||||
event = self.entity_description.get_event_obj(device)
|
|
||||||
if is_on := bool(description.get_ufp_value(device)):
|
|
||||||
if event:
|
|
||||||
self._set_event_attrs(event)
|
|
||||||
else:
|
|
||||||
self._attr_extra_state_attributes = {}
|
|
||||||
self._attr_is_on = is_on
|
|
||||||
|
|
||||||
|
|
||||||
class ProtectSmartEventBinarySensor(EventEntityMixin, BinarySensorEntity):
|
|
||||||
"""A UniFi Protect Device Binary Sensor for smart events."""
|
|
||||||
|
|
||||||
device: Camera
|
|
||||||
entity_description: ProtectBinaryEventEntityDescription
|
|
||||||
_state_attrs = ("_attr_available", "_attr_is_on", "_attr_extra_state_attributes")
|
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def _set_event_done(self) -> None:
|
def _set_event_done(self) -> None:
|
||||||
self._attr_is_on = False
|
self._attr_is_on = False
|
||||||
|
@ -749,7 +726,10 @@ class ProtectSmartEventBinarySensor(EventEntityMixin, BinarySensorEntity):
|
||||||
|
|
||||||
if not (
|
if not (
|
||||||
event
|
event
|
||||||
and description.has_matching_smart(event)
|
and (
|
||||||
|
description.ufp_obj_type is None
|
||||||
|
or description.has_matching_smart(event)
|
||||||
|
)
|
||||||
and not self._event_already_ended(prev_event, prev_event_end)
|
and not self._event_already_ended(prev_event, prev_event_end)
|
||||||
):
|
):
|
||||||
self._set_event_done()
|
self._set_event_done()
|
||||||
|
@ -774,11 +754,6 @@ def _async_event_entities(
|
||||||
) -> list[ProtectDeviceEntity]:
|
) -> list[ProtectDeviceEntity]:
|
||||||
entities: list[ProtectDeviceEntity] = []
|
entities: list[ProtectDeviceEntity] = []
|
||||||
for device in data.get_cameras() if ufp_device is None else [ufp_device]:
|
for device in data.get_cameras() if ufp_device is None else [ufp_device]:
|
||||||
entities.extend(
|
|
||||||
ProtectSmartEventBinarySensor(data, device, description)
|
|
||||||
for description in SMART_EVENT_SENSORS
|
|
||||||
if description.has_required(device)
|
|
||||||
)
|
|
||||||
entities.extend(
|
entities.extend(
|
||||||
ProtectEventBinarySensor(data, device, description)
|
ProtectEventBinarySensor(data, device, description)
|
||||||
for description in EVENT_SENSORS
|
for description in EVENT_SENSORS
|
||||||
|
|
|
@ -25,7 +25,6 @@ from homeassistant.components.unifiprotect.binary_sensor import (
|
||||||
LIGHT_SENSORS,
|
LIGHT_SENSORS,
|
||||||
MOUNTABLE_SENSE_SENSORS,
|
MOUNTABLE_SENSE_SENSORS,
|
||||||
SENSE_SENSORS,
|
SENSE_SENSORS,
|
||||||
SMART_EVENT_SENSORS,
|
|
||||||
)
|
)
|
||||||
from homeassistant.components.unifiprotect.const import (
|
from homeassistant.components.unifiprotect.const import (
|
||||||
ATTR_EVENT_SCORE,
|
ATTR_EVENT_SCORE,
|
||||||
|
@ -453,7 +452,7 @@ async def test_binary_sensor_package_detected(
|
||||||
doorbell.smart_detect_settings.object_types.append(SmartDetectObjectType.PACKAGE)
|
doorbell.smart_detect_settings.object_types.append(SmartDetectObjectType.PACKAGE)
|
||||||
|
|
||||||
_, entity_id = ids_from_device_description(
|
_, entity_id = ids_from_device_description(
|
||||||
Platform.BINARY_SENSOR, doorbell, SMART_EVENT_SENSORS[4]
|
Platform.BINARY_SENSOR, doorbell, EVENT_SENSORS[6]
|
||||||
)
|
)
|
||||||
|
|
||||||
event = Event(
|
event = Event(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue