mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 11:17:21 +00:00
Fix Alexa doorbells (#47257)
This commit is contained in:
parent
959181a2e9
commit
2ebca88950
@ -73,10 +73,7 @@ async def async_enable_proactive_mode(hass, smart_home_config):
|
|||||||
if not should_report and interface.properties_proactively_reported():
|
if not should_report and interface.properties_proactively_reported():
|
||||||
should_report = True
|
should_report = True
|
||||||
|
|
||||||
if (
|
if interface.name() == "Alexa.DoorbellEventSource":
|
||||||
interface.name() == "Alexa.DoorbellEventSource"
|
|
||||||
and new_state.state == STATE_ON
|
|
||||||
):
|
|
||||||
should_doorbell = True
|
should_doorbell = True
|
||||||
break
|
break
|
||||||
|
|
||||||
@ -84,27 +81,22 @@ async def async_enable_proactive_mode(hass, smart_home_config):
|
|||||||
return
|
return
|
||||||
|
|
||||||
if should_doorbell:
|
if should_doorbell:
|
||||||
should_report = False
|
if new_state.state == STATE_ON:
|
||||||
|
await async_send_doorbell_event_message(
|
||||||
|
hass, smart_home_config, alexa_changed_entity
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
if should_report:
|
alexa_properties = list(alexa_changed_entity.serialize_properties())
|
||||||
alexa_properties = list(alexa_changed_entity.serialize_properties())
|
|
||||||
else:
|
|
||||||
alexa_properties = None
|
|
||||||
|
|
||||||
if not checker.async_is_significant_change(
|
if not checker.async_is_significant_change(
|
||||||
new_state, extra_arg=alexa_properties
|
new_state, extra_arg=alexa_properties
|
||||||
):
|
):
|
||||||
return
|
return
|
||||||
|
|
||||||
if should_report:
|
await async_send_changereport_message(
|
||||||
await async_send_changereport_message(
|
hass, smart_home_config, alexa_changed_entity, alexa_properties
|
||||||
hass, smart_home_config, alexa_changed_entity, alexa_properties
|
)
|
||||||
)
|
|
||||||
|
|
||||||
elif should_doorbell:
|
|
||||||
await async_send_doorbell_event_message(
|
|
||||||
hass, smart_home_config, alexa_changed_entity
|
|
||||||
)
|
|
||||||
|
|
||||||
return hass.helpers.event.async_track_state_change(
|
return hass.helpers.event.async_track_state_change(
|
||||||
MATCH_ALL, async_entity_state_listener
|
MATCH_ALL, async_entity_state_listener
|
||||||
@ -246,7 +238,7 @@ async def async_send_delete_message(hass, config, entity_ids):
|
|||||||
async def async_send_doorbell_event_message(hass, config, alexa_entity):
|
async def async_send_doorbell_event_message(hass, config, alexa_entity):
|
||||||
"""Send a DoorbellPress event message for an Alexa entity.
|
"""Send a DoorbellPress event message for an Alexa entity.
|
||||||
|
|
||||||
https://developer.amazon.com/docs/smarthome/send-events-to-the-alexa-event-gateway.html
|
https://developer.amazon.com/en-US/docs/alexa/device-apis/alexa-doorbelleventsource.html
|
||||||
"""
|
"""
|
||||||
token = await config.async_get_access_token()
|
token = await config.async_get_access_token()
|
||||||
|
|
||||||
|
@ -175,6 +175,22 @@ async def test_doorbell_event(hass, aioclient_mock):
|
|||||||
assert call_json["event"]["payload"]["cause"]["type"] == "PHYSICAL_INTERACTION"
|
assert call_json["event"]["payload"]["cause"]["type"] == "PHYSICAL_INTERACTION"
|
||||||
assert call_json["event"]["endpoint"]["endpointId"] == "binary_sensor#test_doorbell"
|
assert call_json["event"]["endpoint"]["endpointId"] == "binary_sensor#test_doorbell"
|
||||||
|
|
||||||
|
hass.states.async_set(
|
||||||
|
"binary_sensor.test_doorbell",
|
||||||
|
"off",
|
||||||
|
{"friendly_name": "Test Doorbell Sensor", "device_class": "occupancy"},
|
||||||
|
)
|
||||||
|
|
||||||
|
hass.states.async_set(
|
||||||
|
"binary_sensor.test_doorbell",
|
||||||
|
"on",
|
||||||
|
{"friendly_name": "Test Doorbell Sensor", "device_class": "occupancy"},
|
||||||
|
)
|
||||||
|
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
assert len(aioclient_mock.mock_calls) == 2
|
||||||
|
|
||||||
|
|
||||||
async def test_proactive_mode_filter_states(hass, aioclient_mock):
|
async def test_proactive_mode_filter_states(hass, aioclient_mock):
|
||||||
"""Test all the cases that filter states."""
|
"""Test all the cases that filter states."""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user