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:
|
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()
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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",
|
||||||
|
|
Loading…
Add table
Reference in a new issue