diff --git a/homeassistant/components/zeroconf/__init__.py b/homeassistant/components/zeroconf/__init__.py index a0185a3bbe2..fe757b8ae85 100644 --- a/homeassistant/components/zeroconf/__init__.py +++ b/homeassistant/components/zeroconf/__init__.py @@ -1,14 +1,16 @@ """Support for exposing Home Assistant via Zeroconf.""" +# PyLint bug confuses absolute/relative imports +# https://github.com/PyCQA/pylint/issues/1931 +# pylint: disable=no-name-in-module import logging import ipaddress import voluptuous as vol -from aiozeroconf import ( - ServiceBrowser, ServiceInfo, ServiceStateChange, Zeroconf) +from zeroconf import ServiceBrowser, ServiceInfo, ServiceStateChange, Zeroconf from homeassistant.const import (EVENT_HOMEASSISTANT_STOP, __version__) -from homeassistant.generated import zeroconf as zeroconf_manifest +from homeassistant.generated.zeroconf import ZEROCONF _LOGGER = logging.getLogger(__name__) @@ -28,7 +30,7 @@ CONFIG_SCHEMA = vol.Schema({ }, extra=vol.ALLOW_EXTRA) -async def async_setup(hass, config): +def setup(hass, config): """Set up Zeroconf and make Home Assistant discoverable.""" zeroconf_name = '{}.{}'.format(hass.config.location_name, ZEROCONF_TYPE) @@ -42,35 +44,33 @@ async def async_setup(hass, config): info = ServiceInfo(ZEROCONF_TYPE, zeroconf_name, port=hass.http.server_port, properties=params) - zeroconf = Zeroconf(hass.loop) + zeroconf = Zeroconf() - await zeroconf.register_service(info) + zeroconf.register_service(info) - async def new_service(service_type, name): - """Signal new service discovered.""" - service_info = await zeroconf.get_service_info(service_type, name) - info = info_from_service(service_info) - _LOGGER.debug("Discovered new device %s %s", name, info) - - for domain in zeroconf_manifest.SERVICE_TYPES[service_type]: - await hass.config_entries.flow.async_init( - domain, context={'source': DOMAIN}, data=info - ) - - def service_update(_, service_type, name, state_change): + def service_update(zeroconf, service_type, name, state_change): """Service state changed.""" if state_change is ServiceStateChange.Added: - hass.async_create_task(new_service(service_type, name)) + service_info = zeroconf.get_service_info(service_type, name) + info = info_from_service(service_info) + _LOGGER.debug("Discovered new device %s %s", name, info) - for service in zeroconf_manifest.SERVICE_TYPES: + for domain in ZEROCONF[service_type]: + hass.add_job( + hass.config_entries.flow.async_init( + domain, context={'source': DOMAIN}, data=info + ) + ) + + for service in ZEROCONF: ServiceBrowser(zeroconf, service, handlers=[service_update]) - async def stop_zeroconf(_): + def stop_zeroconf(_): """Stop Zeroconf.""" - await zeroconf.unregister_service(info) - await zeroconf.close() + zeroconf.unregister_service(info) + zeroconf.close() - hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, stop_zeroconf) + hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, stop_zeroconf) return True diff --git a/homeassistant/components/zeroconf/manifest.json b/homeassistant/components/zeroconf/manifest.json index 07e620381e4..becd5d51c5a 100644 --- a/homeassistant/components/zeroconf/manifest.json +++ b/homeassistant/components/zeroconf/manifest.json @@ -3,7 +3,7 @@ "name": "Zeroconf", "documentation": "https://www.home-assistant.io/components/zeroconf", "requirements": [ - "aiozeroconf==0.1.8" + "zeroconf==0.22.0" ], "dependencies": [ "api" diff --git a/homeassistant/generated/zeroconf.py b/homeassistant/generated/zeroconf.py index acd912fe28a..05b0a0247b9 100644 --- a/homeassistant/generated/zeroconf.py +++ b/homeassistant/generated/zeroconf.py @@ -4,7 +4,7 @@ To update, run python3 -m hassfest """ -SERVICE_TYPES = { +ZEROCONF = { "_axis-video._tcp.local.": [ "axis" ], diff --git a/requirements_all.txt b/requirements_all.txt index 8f79fbcedbf..4f5ada38c44 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -162,9 +162,6 @@ aioswitcher==2019.3.21 # homeassistant.components.unifi aiounifi==4 -# homeassistant.components.zeroconf -aiozeroconf==0.1.8 - # homeassistant.components.aladdin_connect aladdin_connect==0.3 @@ -1877,6 +1874,9 @@ youtube_dl==2019.05.11 # homeassistant.components.zengge zengge==0.2 +# homeassistant.components.zeroconf +zeroconf==0.22.0 + # homeassistant.components.zha zha-quirks==0.0.13 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 728a2f3dfa3..b6b2616964c 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -60,9 +60,6 @@ aioswitcher==2019.3.21 # homeassistant.components.unifi aiounifi==4 -# homeassistant.components.zeroconf -aiozeroconf==0.1.8 - # homeassistant.components.ambiclimate ambiclimate==0.1.2 @@ -354,5 +351,8 @@ vultr==0.1.2 # homeassistant.components.wake_on_lan wakeonlan==1.1.6 +# homeassistant.components.zeroconf +zeroconf==0.22.0 + # homeassistant.components.zha zigpy-homeassistant==0.3.3 diff --git a/script/gen_requirements_all.py b/script/gen_requirements_all.py index dad20279d5b..f85758e464f 100755 --- a/script/gen_requirements_all.py +++ b/script/gen_requirements_all.py @@ -51,7 +51,6 @@ TEST_REQUIREMENTS = ( 'aiohue', 'aiounifi', 'aioswitcher', - 'aiozeroconf', 'apns2', 'av', 'axis', @@ -150,6 +149,7 @@ TEST_REQUIREMENTS = ( 'vultr', 'YesssSMS', 'ruamel.yaml', + 'zeroconf', 'zigpy-homeassistant', 'bellows-homeassistant', ) diff --git a/script/hassfest/zeroconf.py b/script/hassfest/zeroconf.py index 390429c3da7..1ed9575c95f 100644 --- a/script/hassfest/zeroconf.py +++ b/script/hassfest/zeroconf.py @@ -12,7 +12,7 @@ To update, run python3 -m hassfest \"\"\" -SERVICE_TYPES = {} +ZEROCONF = {} """.strip() diff --git a/tests/components/default_config/test_init.py b/tests/components/default_config/test_init.py index 8e2766a857b..5aacf06aa66 100644 --- a/tests/components/default_config/test_init.py +++ b/tests/components/default_config/test_init.py @@ -9,9 +9,9 @@ from tests.common import MockDependency, mock_coro @pytest.fixture(autouse=True) -def aiozeroconf_mock(): - """Mock aiozeroconf.""" - with MockDependency('aiozeroconf') as mocked_zeroconf: +def zeroconf_mock(): + """Mock zeroconf.""" + with MockDependency('zeroconf') as mocked_zeroconf: mocked_zeroconf.Zeroconf.return_value.register_service \ .return_value = mock_coro(True) yield diff --git a/tests/components/zeroconf/test_init.py b/tests/components/zeroconf/test_init.py index 106cf3377f4..e7d7756fe7c 100644 --- a/tests/components/zeroconf/test_init.py +++ b/tests/components/zeroconf/test_init.py @@ -1,7 +1,7 @@ """Test Zeroconf component setup process.""" from unittest.mock import patch -from aiozeroconf import ServiceInfo, ServiceStateChange +from zeroconf import ServiceInfo, ServiceStateChange from homeassistant.generated import zeroconf as zc_gen from homeassistant.setup import async_setup_component @@ -11,11 +11,11 @@ from homeassistant.components import zeroconf def service_update_mock(zeroconf, service, handlers): """Call service update handler.""" handlers[0]( - None, service, '{}.{}'.format('name', service), + zeroconf, service, '{}.{}'.format('name', service), ServiceStateChange.Added) -async def get_service_info_mock(service_type, name): +def get_service_info_mock(service_type, name): """Return service info for get_service_info.""" return ServiceInfo( service_type, name, address=b'\n\x00\x00\x14', port=80, weight=0, @@ -35,7 +35,6 @@ async def test_setup(hass): assert await async_setup_component( hass, zeroconf.DOMAIN, {zeroconf.DOMAIN: {}}) - await hass.async_block_till_done() - assert len(MockServiceBrowser.mock_calls) == len(zc_gen.SERVICE_TYPES) - assert len(mock_config_flow.mock_calls) == len(zc_gen.SERVICE_TYPES) + assert len(MockServiceBrowser.mock_calls) == len(zc_gen.ZEROCONF) + assert len(mock_config_flow.mock_calls) == len(zc_gen.ZEROCONF) * 2