Add dual IP stack support to HomeKit (#94126)
* Add dual IP stack support to HomeKit * fix tests * Update homeassistant/components/network/__init__.py * remove scopes * Bump HAP-python to 4.7.0 fixes pairing with newer iOS changelog: https://github.com/ikalchev/HAP-python/compare/v4.6.0...4.7.0 * fixes * update tests * Relocate get_announced_addresses from zeroconf to network needed for #94126 * rename * rename * Update homeassistant/components/network/__init__.py * Update homeassistant/components/network/__init__.py * rename * fix import * coverage
This commit is contained in:
parent
57a910a144
commit
ef2e55ecec
2 changed files with 19 additions and 17 deletions
|
@ -28,7 +28,6 @@ from homeassistant.components.device_automation.trigger import (
|
||||||
)
|
)
|
||||||
from homeassistant.components.http import HomeAssistantView
|
from homeassistant.components.http import HomeAssistantView
|
||||||
from homeassistant.components.humidifier import DOMAIN as HUMIDIFIER_DOMAIN
|
from homeassistant.components.humidifier import DOMAIN as HUMIDIFIER_DOMAIN
|
||||||
from homeassistant.components.network import MDNS_TARGET_IP
|
|
||||||
from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN, SensorDeviceClass
|
from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN, SensorDeviceClass
|
||||||
from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry
|
from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
|
@ -168,7 +167,9 @@ BRIDGE_SCHEMA = vol.All(
|
||||||
),
|
),
|
||||||
vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port,
|
vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port,
|
||||||
vol.Optional(CONF_IP_ADDRESS): vol.All(ipaddress.ip_address, cv.string),
|
vol.Optional(CONF_IP_ADDRESS): vol.All(ipaddress.ip_address, cv.string),
|
||||||
vol.Optional(CONF_ADVERTISE_IP): vol.All(ipaddress.ip_address, cv.string),
|
vol.Optional(CONF_ADVERTISE_IP): vol.All(
|
||||||
|
cv.ensure_list, ipaddress.ip_address, cv.string
|
||||||
|
),
|
||||||
vol.Optional(CONF_FILTER, default={}): BASE_FILTER_SCHEMA,
|
vol.Optional(CONF_FILTER, default={}): BASE_FILTER_SCHEMA,
|
||||||
vol.Optional(CONF_ENTITY_CONFIG, default={}): validate_entity_config,
|
vol.Optional(CONF_ENTITY_CONFIG, default={}): validate_entity_config,
|
||||||
vol.Optional(CONF_DEVICES): cv.ensure_list,
|
vol.Optional(CONF_DEVICES): cv.ensure_list,
|
||||||
|
@ -303,9 +304,10 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||||
|
|
||||||
# ip_address and advertise_ip are yaml only
|
# ip_address and advertise_ip are yaml only
|
||||||
ip_address = conf.get(CONF_IP_ADDRESS, [None])
|
ip_address = conf.get(CONF_IP_ADDRESS, [None])
|
||||||
advertise_ip = conf.get(
|
advertise_ips: list[str] = conf.get(
|
||||||
CONF_ADVERTISE_IP, await network.async_get_source_ip(hass, MDNS_TARGET_IP)
|
CONF_ADVERTISE_IP
|
||||||
)
|
) or await network.async_get_announce_addresses(hass)
|
||||||
|
|
||||||
# exclude_accessory_mode is only used for config flow
|
# exclude_accessory_mode is only used for config flow
|
||||||
# to indicate that the config entry was setup after
|
# to indicate that the config entry was setup after
|
||||||
# we started creating config entries for entities that
|
# we started creating config entries for entities that
|
||||||
|
@ -331,7 +333,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||||
exclude_accessory_mode,
|
exclude_accessory_mode,
|
||||||
entity_config,
|
entity_config,
|
||||||
homekit_mode,
|
homekit_mode,
|
||||||
advertise_ip,
|
advertise_ips,
|
||||||
entry.entry_id,
|
entry.entry_id,
|
||||||
entry.title,
|
entry.title,
|
||||||
devices=devices,
|
devices=devices,
|
||||||
|
@ -508,7 +510,7 @@ class HomeKit:
|
||||||
exclude_accessory_mode: bool,
|
exclude_accessory_mode: bool,
|
||||||
entity_config: dict,
|
entity_config: dict,
|
||||||
homekit_mode: str,
|
homekit_mode: str,
|
||||||
advertise_ip: str | None,
|
advertise_ips: list[str],
|
||||||
entry_id: str,
|
entry_id: str,
|
||||||
entry_title: str,
|
entry_title: str,
|
||||||
devices: list[str] | None = None,
|
devices: list[str] | None = None,
|
||||||
|
@ -521,7 +523,7 @@ class HomeKit:
|
||||||
self._filter = entity_filter
|
self._filter = entity_filter
|
||||||
self._config = entity_config
|
self._config = entity_config
|
||||||
self._exclude_accessory_mode = exclude_accessory_mode
|
self._exclude_accessory_mode = exclude_accessory_mode
|
||||||
self._advertise_ip = advertise_ip
|
self._advertise_ips = advertise_ips
|
||||||
self._entry_id = entry_id
|
self._entry_id = entry_id
|
||||||
self._entry_title = entry_title
|
self._entry_title = entry_title
|
||||||
self._homekit_mode = homekit_mode
|
self._homekit_mode = homekit_mode
|
||||||
|
@ -547,7 +549,7 @@ class HomeKit:
|
||||||
address=self._ip_address,
|
address=self._ip_address,
|
||||||
port=self._port,
|
port=self._port,
|
||||||
persist_file=persist_file,
|
persist_file=persist_file,
|
||||||
advertised_address=self._advertise_ip,
|
advertised_address=self._advertise_ips,
|
||||||
async_zeroconf_instance=async_zeroconf_instance,
|
async_zeroconf_instance=async_zeroconf_instance,
|
||||||
zeroconf_server=f"{uuid}-hap.local.",
|
zeroconf_server=f"{uuid}-hap.local.",
|
||||||
loader=get_loader(),
|
loader=get_loader(),
|
||||||
|
|
|
@ -116,7 +116,7 @@ def _mock_homekit(hass, entry, homekit_mode, entity_filter=None, devices=None):
|
||||||
exclude_accessory_mode=False,
|
exclude_accessory_mode=False,
|
||||||
entity_config={},
|
entity_config={},
|
||||||
homekit_mode=homekit_mode,
|
homekit_mode=homekit_mode,
|
||||||
advertise_ip=None,
|
advertise_ips=None,
|
||||||
entry_id=entry.entry_id,
|
entry_id=entry.entry_id,
|
||||||
entry_title=entry.title,
|
entry_title=entry.title,
|
||||||
devices=devices,
|
devices=devices,
|
||||||
|
@ -170,7 +170,7 @@ async def test_setup_min(hass: HomeAssistant, mock_async_zeroconf: None) -> None
|
||||||
ANY,
|
ANY,
|
||||||
{},
|
{},
|
||||||
HOMEKIT_MODE_BRIDGE,
|
HOMEKIT_MODE_BRIDGE,
|
||||||
"1.2.3.4",
|
["1.2.3.4", "10.10.10.10"],
|
||||||
entry.entry_id,
|
entry.entry_id,
|
||||||
entry.title,
|
entry.title,
|
||||||
devices=[],
|
devices=[],
|
||||||
|
@ -212,7 +212,7 @@ async def test_removing_entry(
|
||||||
ANY,
|
ANY,
|
||||||
{},
|
{},
|
||||||
HOMEKIT_MODE_BRIDGE,
|
HOMEKIT_MODE_BRIDGE,
|
||||||
"1.2.3.4",
|
["1.2.3.4", "10.10.10.10"],
|
||||||
entry.entry_id,
|
entry.entry_id,
|
||||||
entry.title,
|
entry.title,
|
||||||
devices=[],
|
devices=[],
|
||||||
|
@ -245,7 +245,7 @@ async def test_homekit_setup(
|
||||||
{},
|
{},
|
||||||
{},
|
{},
|
||||||
HOMEKIT_MODE_BRIDGE,
|
HOMEKIT_MODE_BRIDGE,
|
||||||
advertise_ip=None,
|
advertise_ips=None,
|
||||||
entry_id=entry.entry_id,
|
entry_id=entry.entry_id,
|
||||||
entry_title=entry.title,
|
entry_title=entry.title,
|
||||||
)
|
)
|
||||||
|
@ -322,7 +322,7 @@ async def test_homekit_setup_ip_address(
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def test_homekit_setup_advertise_ip(
|
async def test_homekit_setup_advertise_ips(
|
||||||
hass: HomeAssistant, hk_driver, mock_async_zeroconf: None
|
hass: HomeAssistant, hk_driver, mock_async_zeroconf: None
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test setup with given IP address to advertise."""
|
"""Test setup with given IP address to advertise."""
|
||||||
|
@ -1485,7 +1485,7 @@ async def test_yaml_updates_update_config_entry_for_name(
|
||||||
ANY,
|
ANY,
|
||||||
{},
|
{},
|
||||||
HOMEKIT_MODE_BRIDGE,
|
HOMEKIT_MODE_BRIDGE,
|
||||||
"1.2.3.4",
|
["1.2.3.4", "10.10.10.10"],
|
||||||
entry.entry_id,
|
entry.entry_id,
|
||||||
entry.title,
|
entry.title,
|
||||||
devices=[],
|
devices=[],
|
||||||
|
@ -1858,7 +1858,7 @@ async def test_reload(hass: HomeAssistant, mock_async_zeroconf: None) -> None:
|
||||||
False,
|
False,
|
||||||
{},
|
{},
|
||||||
HOMEKIT_MODE_BRIDGE,
|
HOMEKIT_MODE_BRIDGE,
|
||||||
"1.2.3.4",
|
["1.2.3.4", "10.10.10.10"],
|
||||||
entry.entry_id,
|
entry.entry_id,
|
||||||
entry.title,
|
entry.title,
|
||||||
devices=[],
|
devices=[],
|
||||||
|
@ -1893,7 +1893,7 @@ async def test_reload(hass: HomeAssistant, mock_async_zeroconf: None) -> None:
|
||||||
False,
|
False,
|
||||||
{},
|
{},
|
||||||
HOMEKIT_MODE_BRIDGE,
|
HOMEKIT_MODE_BRIDGE,
|
||||||
"1.2.3.4",
|
["1.2.3.4", "10.10.10.10"],
|
||||||
entry.entry_id,
|
entry.entry_id,
|
||||||
entry.title,
|
entry.title,
|
||||||
devices=[],
|
devices=[],
|
||||||
|
|
Loading…
Add table
Reference in a new issue