Fix ghost events for Hue remotes (#113047)
* Use report values for events * adjust tests
This commit is contained in:
parent
4e600b7b19
commit
5af8041c57
3 changed files with 28 additions and 9 deletions
|
@ -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()
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
Loading…
Add table
Reference in a new issue