mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 03:07:37 +00:00
Fix homekit locks not being created from when setup from the UI (#53301)
This commit is contained in:
parent
596179d180
commit
e78a62c802
@ -10,6 +10,7 @@ import voluptuous as vol
|
|||||||
|
|
||||||
from homeassistant import config_entries
|
from homeassistant import config_entries
|
||||||
from homeassistant.components.camera import DOMAIN as CAMERA_DOMAIN
|
from homeassistant.components.camera import DOMAIN as CAMERA_DOMAIN
|
||||||
|
from homeassistant.components.lock import DOMAIN as LOCK_DOMAIN
|
||||||
from homeassistant.components.media_player import DOMAIN as MEDIA_PLAYER_DOMAIN
|
from homeassistant.components.media_player import DOMAIN as MEDIA_PLAYER_DOMAIN
|
||||||
from homeassistant.components.remote import DOMAIN as REMOTE_DOMAIN
|
from homeassistant.components.remote import DOMAIN as REMOTE_DOMAIN
|
||||||
from homeassistant.config_entries import SOURCE_IMPORT
|
from homeassistant.config_entries import SOURCE_IMPORT
|
||||||
@ -58,7 +59,12 @@ MODE_EXCLUDE = "exclude"
|
|||||||
|
|
||||||
INCLUDE_EXCLUDE_MODES = [MODE_EXCLUDE, MODE_INCLUDE]
|
INCLUDE_EXCLUDE_MODES = [MODE_EXCLUDE, MODE_INCLUDE]
|
||||||
|
|
||||||
DOMAINS_NEED_ACCESSORY_MODE = [CAMERA_DOMAIN, MEDIA_PLAYER_DOMAIN, REMOTE_DOMAIN]
|
DOMAINS_NEED_ACCESSORY_MODE = [
|
||||||
|
CAMERA_DOMAIN,
|
||||||
|
LOCK_DOMAIN,
|
||||||
|
MEDIA_PLAYER_DOMAIN,
|
||||||
|
REMOTE_DOMAIN,
|
||||||
|
]
|
||||||
NEVER_BRIDGED_DOMAINS = [CAMERA_DOMAIN]
|
NEVER_BRIDGED_DOMAINS = [CAMERA_DOMAIN]
|
||||||
|
|
||||||
CAMERA_ENTITY_PREFIX = f"{CAMERA_DOMAIN}."
|
CAMERA_ENTITY_PREFIX = f"{CAMERA_DOMAIN}."
|
||||||
|
@ -43,7 +43,7 @@
|
|||||||
"data": {
|
"data": {
|
||||||
"include_domains": "Domains to include"
|
"include_domains": "Domains to include"
|
||||||
},
|
},
|
||||||
"description": "Choose the domains to be included. All supported entities in the domain will be included. A separate HomeKit instance in accessory mode will be created for each tv media player and camera.",
|
"description": "Choose the domains to be included. All supported entities in the domain will be included. A separate HomeKit instance in accessory mode will be created for each tv media player, activity based remote, lock, and camera.",
|
||||||
"title": "Select domains to be included"
|
"title": "Select domains to be included"
|
||||||
},
|
},
|
||||||
"pairing": {
|
"pairing": {
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
"data": {
|
"data": {
|
||||||
"include_domains": "Domains to include"
|
"include_domains": "Domains to include"
|
||||||
},
|
},
|
||||||
"description": "Choose the domains to be included. All supported entities in the domain will be included. A separate HomeKit instance in accessory mode will be created for each tv media player and camera.",
|
"description": "Choose the domains to be included. All supported entities in the domain will be included. A separate HomeKit instance in accessory mode will be created for each tv media player, activity based remote, lock, and camera.",
|
||||||
"title": "Select domains to be included"
|
"title": "Select domains to be included"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -499,12 +499,11 @@ def accessory_friendly_name(hass_name, accessory):
|
|||||||
|
|
||||||
def state_needs_accessory_mode(state):
|
def state_needs_accessory_mode(state):
|
||||||
"""Return if the entity represented by the state must be paired in accessory mode."""
|
"""Return if the entity represented by the state must be paired in accessory mode."""
|
||||||
if state.domain == CAMERA_DOMAIN:
|
if state.domain in (CAMERA_DOMAIN, LOCK_DOMAIN):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
return (
|
return (
|
||||||
state.domain == LOCK_DOMAIN
|
state.domain == MEDIA_PLAYER_DOMAIN
|
||||||
or state.domain == MEDIA_PLAYER_DOMAIN
|
|
||||||
and state.attributes.get(ATTR_DEVICE_CLASS) == DEVICE_CLASS_TV
|
and state.attributes.get(ATTR_DEVICE_CLASS) == DEVICE_CLASS_TV
|
||||||
or state.domain == REMOTE_DOMAIN
|
or state.domain == REMOTE_DOMAIN
|
||||||
and state.attributes.get(ATTR_SUPPORTED_FEATURES, 0) & SUPPORT_ACTIVITY
|
and state.attributes.get(ATTR_SUPPORTED_FEATURES, 0) & SUPPORT_ACTIVITY
|
||||||
|
@ -144,6 +144,7 @@ async def test_setup_creates_entries_for_accessory_mode_devices(hass):
|
|||||||
"""Test we can setup a new instance and we create entries for accessory mode devices."""
|
"""Test we can setup a new instance and we create entries for accessory mode devices."""
|
||||||
hass.states.async_set("camera.one", "on")
|
hass.states.async_set("camera.one", "on")
|
||||||
hass.states.async_set("camera.existing", "on")
|
hass.states.async_set("camera.existing", "on")
|
||||||
|
hass.states.async_set("lock.new", "on")
|
||||||
hass.states.async_set("media_player.two", "on", {"device_class": "tv"})
|
hass.states.async_set("media_player.two", "on", {"device_class": "tv"})
|
||||||
hass.states.async_set("remote.standard", "on")
|
hass.states.async_set("remote.standard", "on")
|
||||||
hass.states.async_set("remote.activity", "on", {"supported_features": 4})
|
hass.states.async_set("remote.activity", "on", {"supported_features": 4})
|
||||||
@ -180,7 +181,7 @@ async def test_setup_creates_entries_for_accessory_mode_devices(hass):
|
|||||||
|
|
||||||
result2 = await hass.config_entries.flow.async_configure(
|
result2 = await hass.config_entries.flow.async_configure(
|
||||||
result["flow_id"],
|
result["flow_id"],
|
||||||
{"include_domains": ["camera", "media_player", "light", "remote"]},
|
{"include_domains": ["camera", "media_player", "light", "lock", "remote"]},
|
||||||
)
|
)
|
||||||
assert result2["type"] == data_entry_flow.RESULT_TYPE_FORM
|
assert result2["type"] == data_entry_flow.RESULT_TYPE_FORM
|
||||||
assert result2["step_id"] == "pairing"
|
assert result2["step_id"] == "pairing"
|
||||||
@ -207,7 +208,7 @@ async def test_setup_creates_entries_for_accessory_mode_devices(hass):
|
|||||||
"filter": {
|
"filter": {
|
||||||
"exclude_domains": [],
|
"exclude_domains": [],
|
||||||
"exclude_entities": [],
|
"exclude_entities": [],
|
||||||
"include_domains": ["media_player", "light", "remote"],
|
"include_domains": ["media_player", "light", "lock", "remote"],
|
||||||
"include_entities": [],
|
"include_entities": [],
|
||||||
},
|
},
|
||||||
"exclude_accessory_mode": True,
|
"exclude_accessory_mode": True,
|
||||||
@ -225,7 +226,8 @@ async def test_setup_creates_entries_for_accessory_mode_devices(hass):
|
|||||||
# 4 - camera.one in accessory mode
|
# 4 - camera.one in accessory mode
|
||||||
# 5 - media_player.two in accessory mode
|
# 5 - media_player.two in accessory mode
|
||||||
# 6 - remote.activity in accessory mode
|
# 6 - remote.activity in accessory mode
|
||||||
assert len(mock_setup_entry.mock_calls) == 6
|
# 7 - lock.new in accessory mode
|
||||||
|
assert len(mock_setup_entry.mock_calls) == 7
|
||||||
|
|
||||||
|
|
||||||
async def test_import(hass):
|
async def test_import(hass):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user