Ensure netgear devices are tracked with one enabled config entry (#72969)

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
pull/73334/head
starkillerOG 2022-06-08 10:52:01 +02:00 committed by Paulus Schoutsen
parent 2ee4cd02c7
commit 8cf6f50193
2 changed files with 18 additions and 6 deletions

View File

@ -18,7 +18,6 @@ from .const import (
KEY_COORDINATOR_SPEED,
KEY_COORDINATOR_TRAFFIC,
KEY_ROUTER,
MODE_ROUTER,
PLATFORMS,
)
from .errors import CannotLoginException
@ -72,7 +71,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_update_devices() -> bool:
"""Fetch data from the router."""
if router.mode == MODE_ROUTER:
if router.track_devices:
return await router.async_update_device_trackers()
return False
@ -107,7 +106,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
update_interval=SPEED_TEST_INTERVAL,
)
if router.mode == MODE_ROUTER:
if router.track_devices:
await coordinator.async_config_entry_first_refresh()
await coordinator_traffic_meter.async_config_entry_first_refresh()
@ -134,7 +133,7 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
if not hass.data[DOMAIN]:
hass.data.pop(DOMAIN)
if router.mode != MODE_ROUTER:
if not router.track_devices:
router_id = None
# Remove devices that are no longer tracked
device_registry = dr.async_get(hass)

View File

@ -80,6 +80,7 @@ class NetgearRouter:
self.hardware_version = ""
self.serial_number = ""
self.track_devices = True
self.method_version = 1
consider_home_int = entry.options.get(
CONF_CONSIDER_HOME, DEFAULT_CONSIDER_HOME.total_seconds()
@ -112,11 +113,23 @@ class NetgearRouter:
self.serial_number = self._info["SerialNumber"]
self.mode = self._info.get("DeviceMode", MODE_ROUTER)
enabled_entries = [
entry
for entry in self.hass.config_entries.async_entries(DOMAIN)
if entry.disabled_by is None
]
self.track_devices = self.mode == MODE_ROUTER or len(enabled_entries) == 1
_LOGGER.debug(
"Netgear track_devices = '%s', device mode '%s'",
self.track_devices,
self.mode,
)
for model in MODELS_V2:
if self.model.startswith(model):
self.method_version = 2
if self.method_version == 2 and self.mode == MODE_ROUTER:
if self.method_version == 2 and self.track_devices:
if not self._api.get_attached_devices_2():
_LOGGER.error(
"Netgear Model '%s' in MODELS_V2 list, but failed to get attached devices using V2",
@ -133,7 +146,7 @@ class NetgearRouter:
return False
# set already known devices to away instead of unavailable
if self.mode == MODE_ROUTER:
if self.track_devices:
device_registry = dr.async_get(self.hass)
devices = dr.async_entries_for_config_entry(device_registry, self.entry_id)
for device_entry in devices: