Fix ghost events for Hue remotes (#113047)

* Use report values for events

* adjust tests
This commit is contained in:
Marcel van der Veldt 2024-05-15 15:48:15 +02:00 committed by GitHub
parent 4e600b7b19
commit 5af8041c57
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 28 additions and 9 deletions

View file

@ -95,7 +95,9 @@ class HueButtonEventEntity(HueBaseEntity, EventEntity):
def _handle_event(self, event_type: EventType, resource: Button) -> None: def _handle_event(self, event_type: EventType, resource: Button) -> None:
"""Handle status event for this resource (or it's parent).""" """Handle status event for this resource (or it's parent)."""
if event_type == EventType.RESOURCE_UPDATED and resource.id == self.resource.id: 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() self.async_write_ha_state()
return return
super()._handle_event(event_type, resource) super()._handle_event(event_type, resource)
@ -119,11 +121,16 @@ class HueRotaryEventEntity(HueBaseEntity, EventEntity):
def _handle_event(self, event_type: EventType, resource: RelativeRotary) -> None: def _handle_event(self, event_type: EventType, resource: RelativeRotary) -> None:
"""Handle status event for this resource (or it's parent).""" """Handle status event for this resource (or it's parent)."""
if event_type == EventType.RESOURCE_UPDATED and resource.id == self.resource.id: 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 = { event_data = {
"duration": resource.relative_rotary.last_event.rotation.duration, "duration": resource.relative_rotary.rotary_report.rotation.duration,
"steps": resource.relative_rotary.last_event.rotation.steps, "steps": resource.relative_rotary.rotary_report.rotation.steps,
"action": resource.relative_rotary.last_event.action.value, "action": resource.relative_rotary.rotary_report.action.value,
} }
self._trigger_event(event_key, event_data) self._trigger_event(event_key, event_data)
self.async_write_ha_state() self.async_write_ha_state()

View file

@ -126,13 +126,14 @@ FAKE_ROTARY = {
"id_v1": "/sensors/1", "id_v1": "/sensors/1",
"owner": {"rid": "fake_device_id_1", "rtype": "device"}, "owner": {"rid": "fake_device_id_1", "rtype": "device"},
"relative_rotary": { "relative_rotary": {
"last_event": { "rotary_report": {
"action": "start", "action": "start",
"rotation": { "rotation": {
"direction": "clock_wise", "direction": "clock_wise",
"steps": 0, "steps": 0,
"duration": 0, "duration": 0,
}, },
"updated": "2023-09-27T10:06:41.822Z",
} }
}, },
"type": "relative_rotary", "type": "relative_rotary",

View file

@ -31,7 +31,12 @@ async def test_event(
] ]
# trigger firing 'initial_press' event from the device # trigger firing 'initial_press' event from the device
btn_event = { 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", "id": "f92aa267-1387-4f02-9950-210fb7ca1f5a",
"metadata": {"control_id": 1}, "metadata": {"control_id": 1},
"type": "button", "type": "button",
@ -42,7 +47,12 @@ async def test_event(
assert state.attributes[ATTR_EVENT_TYPE] == "initial_press" assert state.attributes[ATTR_EVENT_TYPE] == "initial_press"
# trigger firing 'long_release' event from the device # trigger firing 'long_release' event from the device
btn_event = { 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", "id": "f92aa267-1387-4f02-9950-210fb7ca1f5a",
"metadata": {"control_id": 1}, "metadata": {"control_id": 1},
"type": "button", "type": "button",
@ -79,13 +89,14 @@ async def test_sensor_add_update(hass: HomeAssistant, mock_bridge_v2) -> None:
btn_event = { btn_event = {
"id": "fake_relative_rotary", "id": "fake_relative_rotary",
"relative_rotary": { "relative_rotary": {
"last_event": { "rotary_report": {
"action": "repeat", "action": "repeat",
"rotation": { "rotation": {
"direction": "counter_clock_wise", "direction": "counter_clock_wise",
"steps": 60, "steps": 60,
"duration": 400, "duration": 400,
}, },
"updated": "2023-09-27T10:06:41.822Z",
} }
}, },
"type": "relative_rotary", "type": "relative_rotary",