From 5af8041c57ff72f5e1557cc9a2ecdd847818beb6 Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Wed, 15 May 2024 15:48:15 +0200 Subject: [PATCH] Fix ghost events for Hue remotes (#113047) * Use report values for events * adjust tests --- homeassistant/components/hue/event.py | 17 ++++++++++++----- tests/components/hue/const.py | 3 ++- tests/components/hue/test_event.py | 17 ++++++++++++++--- 3 files changed, 28 insertions(+), 9 deletions(-) diff --git a/homeassistant/components/hue/event.py b/homeassistant/components/hue/event.py index 1ba974fa167..64f3ccba9f9 100644 --- a/homeassistant/components/hue/event.py +++ b/homeassistant/components/hue/event.py @@ -95,7 +95,9 @@ class HueButtonEventEntity(HueBaseEntity, EventEntity): def _handle_event(self, event_type: EventType, resource: Button) -> None: """Handle status event for this resource (or it's parent).""" if event_type == EventType.RESOURCE_UPDATED and resource.id == self.resource.id: - self._trigger_event(resource.button.last_event.value) + if resource.button is None or resource.button.button_report is None: + return + self._trigger_event(resource.button.button_report.event.value) self.async_write_ha_state() return super()._handle_event(event_type, resource) @@ -119,11 +121,16 @@ class HueRotaryEventEntity(HueBaseEntity, EventEntity): def _handle_event(self, event_type: EventType, resource: RelativeRotary) -> None: """Handle status event for this resource (or it's parent).""" if event_type == EventType.RESOURCE_UPDATED and resource.id == self.resource.id: - event_key = resource.relative_rotary.last_event.rotation.direction.value + if ( + resource.relative_rotary is None + or resource.relative_rotary.rotary_report is None + ): + return + event_key = resource.relative_rotary.rotary_report.rotation.direction.value event_data = { - "duration": resource.relative_rotary.last_event.rotation.duration, - "steps": resource.relative_rotary.last_event.rotation.steps, - "action": resource.relative_rotary.last_event.action.value, + "duration": resource.relative_rotary.rotary_report.rotation.duration, + "steps": resource.relative_rotary.rotary_report.rotation.steps, + "action": resource.relative_rotary.rotary_report.action.value, } self._trigger_event(event_key, event_data) self.async_write_ha_state() diff --git a/tests/components/hue/const.py b/tests/components/hue/const.py index 252c9da9a9d..57a590ab1af 100644 --- a/tests/components/hue/const.py +++ b/tests/components/hue/const.py @@ -126,13 +126,14 @@ FAKE_ROTARY = { "id_v1": "/sensors/1", "owner": {"rid": "fake_device_id_1", "rtype": "device"}, "relative_rotary": { - "last_event": { + "rotary_report": { "action": "start", "rotation": { "direction": "clock_wise", "steps": 0, "duration": 0, }, + "updated": "2023-09-27T10:06:41.822Z", } }, "type": "relative_rotary", diff --git a/tests/components/hue/test_event.py b/tests/components/hue/test_event.py index b33509543e9..aedf11a6e82 100644 --- a/tests/components/hue/test_event.py +++ b/tests/components/hue/test_event.py @@ -31,7 +31,12 @@ async def test_event( ] # trigger firing 'initial_press' event from the device btn_event = { - "button": {"last_event": "initial_press"}, + "button": { + "button_report": { + "event": "initial_press", + "updated": "2023-09-27T10:06:41.822Z", + } + }, "id": "f92aa267-1387-4f02-9950-210fb7ca1f5a", "metadata": {"control_id": 1}, "type": "button", @@ -42,7 +47,12 @@ async def test_event( assert state.attributes[ATTR_EVENT_TYPE] == "initial_press" # trigger firing 'long_release' event from the device btn_event = { - "button": {"last_event": "long_release"}, + "button": { + "button_report": { + "event": "long_release", + "updated": "2023-09-27T10:06:41.822Z", + } + }, "id": "f92aa267-1387-4f02-9950-210fb7ca1f5a", "metadata": {"control_id": 1}, "type": "button", @@ -79,13 +89,14 @@ async def test_sensor_add_update(hass: HomeAssistant, mock_bridge_v2) -> None: btn_event = { "id": "fake_relative_rotary", "relative_rotary": { - "last_event": { + "rotary_report": { "action": "repeat", "rotation": { "direction": "counter_clock_wise", "steps": 60, "duration": 400, }, + "updated": "2023-09-27T10:06:41.822Z", } }, "type": "relative_rotary",