Suppress duplicate mdns discovery from netdisco (#52099)
parent
3c0a24db50
commit
ab24d16e00
|
@ -13,6 +13,7 @@ from homeassistant.core import callback
|
|||
import homeassistant.helpers.config_validation as cv
|
||||
from homeassistant.helpers.discovery import async_discover, async_load_platform
|
||||
from homeassistant.helpers.event import async_track_point_in_utc_time
|
||||
from homeassistant.loader import async_get_zeroconf
|
||||
import homeassistant.util.dt as dt_util
|
||||
|
||||
DOMAIN = "discovery"
|
||||
|
@ -139,6 +140,10 @@ async def async_setup(hass, config):
|
|||
)
|
||||
|
||||
zeroconf_instance = await zeroconf.async_get_instance(hass)
|
||||
# Do not scan for types that have already been converted
|
||||
# as it will generate excess network traffic for questions
|
||||
# the zeroconf instance already knows the answers
|
||||
zeroconf_types = list(await async_get_zeroconf(hass))
|
||||
|
||||
async def new_service_found(service, info):
|
||||
"""Handle a new service if one is found."""
|
||||
|
@ -187,7 +192,7 @@ async def async_setup(hass, config):
|
|||
"""Scan for devices."""
|
||||
try:
|
||||
results = await hass.async_add_executor_job(
|
||||
_discover, netdisco, zeroconf_instance
|
||||
_discover, netdisco, zeroconf_instance, zeroconf_types
|
||||
)
|
||||
|
||||
for result in results:
|
||||
|
@ -209,11 +214,13 @@ async def async_setup(hass, config):
|
|||
return True
|
||||
|
||||
|
||||
def _discover(netdisco, zeroconf_instance):
|
||||
def _discover(netdisco, zeroconf_instance, zeroconf_types):
|
||||
"""Discover devices."""
|
||||
results = []
|
||||
try:
|
||||
netdisco.scan(zeroconf_instance=zeroconf_instance)
|
||||
netdisco.scan(
|
||||
zeroconf_instance=zeroconf_instance, suppress_mdns_types=zeroconf_types
|
||||
)
|
||||
|
||||
for disc in netdisco.discover():
|
||||
for service in netdisco.get_info(disc):
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"domain": "discovery",
|
||||
"name": "Discovery",
|
||||
"documentation": "https://www.home-assistant.io/integrations/discovery",
|
||||
"requirements": ["netdisco==2.8.3"],
|
||||
"requirements": ["netdisco==2.9.0"],
|
||||
"after_dependencies": ["zeroconf"],
|
||||
"codeowners": [],
|
||||
"quality_scale": "internal"
|
||||
|
|
|
@ -1008,7 +1008,7 @@ nessclient==0.9.15
|
|||
netdata==0.2.0
|
||||
|
||||
# homeassistant.components.discovery
|
||||
netdisco==2.8.3
|
||||
netdisco==2.9.0
|
||||
|
||||
# homeassistant.components.nam
|
||||
nettigo-air-monitor==1.0.0
|
||||
|
|
|
@ -562,7 +562,7 @@ ndms2_client==0.1.1
|
|||
nessclient==0.9.15
|
||||
|
||||
# homeassistant.components.discovery
|
||||
netdisco==2.8.3
|
||||
netdisco==2.9.0
|
||||
|
||||
# homeassistant.components.nam
|
||||
nettigo-air-monitor==1.0.0
|
||||
|
|
|
@ -60,7 +60,7 @@ async def mock_discovery(hass, discoveries, config=BASE_CONFIG):
|
|||
async def test_unknown_service(hass):
|
||||
"""Test that unknown service is ignored."""
|
||||
|
||||
def discover(netdisco, zeroconf_instance):
|
||||
def discover(netdisco, zeroconf_instance, suppress_mdns_types):
|
||||
"""Fake discovery."""
|
||||
return [("this_service_will_never_be_supported", {"info": "some"})]
|
||||
|
||||
|
@ -73,7 +73,7 @@ async def test_unknown_service(hass):
|
|||
async def test_load_platform(hass):
|
||||
"""Test load a platform."""
|
||||
|
||||
def discover(netdisco, zeroconf_instance):
|
||||
def discover(netdisco, zeroconf_instance, suppress_mdns_types):
|
||||
"""Fake discovery."""
|
||||
return [(SERVICE, SERVICE_INFO)]
|
||||
|
||||
|
@ -89,7 +89,7 @@ async def test_load_platform(hass):
|
|||
async def test_load_component(hass):
|
||||
"""Test load a component."""
|
||||
|
||||
def discover(netdisco, zeroconf_instance):
|
||||
def discover(netdisco, zeroconf_instance, suppress_mdns_types):
|
||||
"""Fake discovery."""
|
||||
return [(SERVICE_NO_PLATFORM, SERVICE_INFO)]
|
||||
|
||||
|
@ -109,7 +109,7 @@ async def test_load_component(hass):
|
|||
async def test_ignore_service(hass):
|
||||
"""Test ignore service."""
|
||||
|
||||
def discover(netdisco, zeroconf_instance):
|
||||
def discover(netdisco, zeroconf_instance, suppress_mdns_types):
|
||||
"""Fake discovery."""
|
||||
return [(SERVICE_NO_PLATFORM, SERVICE_INFO)]
|
||||
|
||||
|
@ -122,7 +122,7 @@ async def test_ignore_service(hass):
|
|||
async def test_discover_duplicates(hass):
|
||||
"""Test load a component."""
|
||||
|
||||
def discover(netdisco, zeroconf_instance):
|
||||
def discover(netdisco, zeroconf_instance, suppress_mdns_types):
|
||||
"""Fake discovery."""
|
||||
return [
|
||||
(SERVICE_NO_PLATFORM, SERVICE_INFO),
|
||||
|
@ -147,7 +147,7 @@ async def test_discover_config_flow(hass):
|
|||
"""Test discovery triggering a config flow."""
|
||||
discovery_info = {"hello": "world"}
|
||||
|
||||
def discover(netdisco, zeroconf_instance):
|
||||
def discover(netdisco, zeroconf_instance, suppress_mdns_types):
|
||||
"""Fake discovery."""
|
||||
return [("mock-service", discovery_info)]
|
||||
|
||||
|
|
Loading…
Reference in New Issue