From 1aa0e64354d1dffd5e948da803e4d379ee39443c Mon Sep 17 00:00:00 2001 From: Jc2k Date: Sat, 6 Aug 2022 21:45:44 +0100 Subject: [PATCH] Update gree to use the network component to set discovery interfaces (#75812) --- homeassistant/components/gree/__init__.py | 4 +++- homeassistant/components/gree/config_flow.py | 6 +++++- homeassistant/components/gree/manifest.json | 3 ++- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- tests/components/gree/common.py | 2 +- 6 files changed, 13 insertions(+), 6 deletions(-) diff --git a/homeassistant/components/gree/__init__.py b/homeassistant/components/gree/__init__.py index d4a929f1642..ff3438ed53f 100644 --- a/homeassistant/components/gree/__init__.py +++ b/homeassistant/components/gree/__init__.py @@ -2,6 +2,7 @@ from datetime import timedelta import logging +from homeassistant.components.network import async_get_ipv4_broadcast_addresses from homeassistant.config_entries import ConfigEntry from homeassistant.const import Platform from homeassistant.core import HomeAssistant @@ -32,7 +33,8 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS) async def _async_scan_update(_=None): - await gree_discovery.discovery.scan() + bcast_addr = list(await async_get_ipv4_broadcast_addresses(hass)) + await gree_discovery.discovery.scan(0, bcast_ifaces=bcast_addr) _LOGGER.debug("Scanning network for Gree devices") await _async_scan_update() diff --git a/homeassistant/components/gree/config_flow.py b/homeassistant/components/gree/config_flow.py index d317fe6d873..58f83cd4486 100644 --- a/homeassistant/components/gree/config_flow.py +++ b/homeassistant/components/gree/config_flow.py @@ -1,6 +1,7 @@ """Config flow for Gree.""" from greeclimate.discovery import Discovery +from homeassistant.components.network import async_get_ipv4_broadcast_addresses from homeassistant.core import HomeAssistant from homeassistant.helpers import config_entry_flow @@ -10,7 +11,10 @@ from .const import DISCOVERY_TIMEOUT, DOMAIN async def _async_has_devices(hass: HomeAssistant) -> bool: """Return if there are devices that can be discovered.""" gree_discovery = Discovery(DISCOVERY_TIMEOUT) - devices = await gree_discovery.scan(wait_for=DISCOVERY_TIMEOUT) + bcast_addr = list(await async_get_ipv4_broadcast_addresses(hass)) + devices = await gree_discovery.scan( + wait_for=DISCOVERY_TIMEOUT, bcast_ifaces=bcast_addr + ) return len(devices) > 0 diff --git a/homeassistant/components/gree/manifest.json b/homeassistant/components/gree/manifest.json index 1b2c8dd6a2a..97c0ec1780c 100644 --- a/homeassistant/components/gree/manifest.json +++ b/homeassistant/components/gree/manifest.json @@ -3,7 +3,8 @@ "name": "Gree Climate", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/gree", - "requirements": ["greeclimate==1.2.0"], + "requirements": ["greeclimate==1.3.0"], + "dependencies": ["network"], "codeowners": ["@cmroche"], "iot_class": "local_polling", "loggers": ["greeclimate"] diff --git a/requirements_all.txt b/requirements_all.txt index 7abfad4db5e..ead73586d7a 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -772,7 +772,7 @@ gpiozero==1.6.2 gps3==0.33.3 # homeassistant.components.gree -greeclimate==1.2.0 +greeclimate==1.3.0 # homeassistant.components.greeneye_monitor greeneye_monitor==3.0.3 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 75ce10222f1..e27714f81f8 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -564,7 +564,7 @@ googlemaps==2.5.1 govee-ble==0.12.6 # homeassistant.components.gree -greeclimate==1.2.0 +greeclimate==1.3.0 # homeassistant.components.greeneye_monitor greeneye_monitor==3.0.3 diff --git a/tests/components/gree/common.py b/tests/components/gree/common.py index c7db03b118f..cd8a2d6ee28 100644 --- a/tests/components/gree/common.py +++ b/tests/components/gree/common.py @@ -28,7 +28,7 @@ class FakeDiscovery: """Add an event listener.""" self._listeners.append(listener) - async def scan(self, wait_for: int = 0): + async def scan(self, wait_for: int = 0, bcast_ifaces=None): """Search for devices, return mocked data.""" self.scan_count += 1 _LOGGER.info("CALLED SCAN %d TIMES", self.scan_count)