Ensure netgear devices are tracked with one enabled config entry (#72969)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
This commit is contained in:
parent
95e9bd106e
commit
4bc04383d1
2 changed files with 18 additions and 6 deletions
|
@ -18,7 +18,6 @@ from .const import (
|
||||||
KEY_COORDINATOR_SPEED,
|
KEY_COORDINATOR_SPEED,
|
||||||
KEY_COORDINATOR_TRAFFIC,
|
KEY_COORDINATOR_TRAFFIC,
|
||||||
KEY_ROUTER,
|
KEY_ROUTER,
|
||||||
MODE_ROUTER,
|
|
||||||
PLATFORMS,
|
PLATFORMS,
|
||||||
)
|
)
|
||||||
from .errors import CannotLoginException
|
from .errors import CannotLoginException
|
||||||
|
@ -72,7 +71,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||||
|
|
||||||
async def async_update_devices() -> bool:
|
async def async_update_devices() -> bool:
|
||||||
"""Fetch data from the router."""
|
"""Fetch data from the router."""
|
||||||
if router.mode == MODE_ROUTER:
|
if router.track_devices:
|
||||||
return await router.async_update_device_trackers()
|
return await router.async_update_device_trackers()
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@ -107,7 +106,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||||
update_interval=SPEED_TEST_INTERVAL,
|
update_interval=SPEED_TEST_INTERVAL,
|
||||||
)
|
)
|
||||||
|
|
||||||
if router.mode == MODE_ROUTER:
|
if router.track_devices:
|
||||||
await coordinator.async_config_entry_first_refresh()
|
await coordinator.async_config_entry_first_refresh()
|
||||||
await coordinator_traffic_meter.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]:
|
if not hass.data[DOMAIN]:
|
||||||
hass.data.pop(DOMAIN)
|
hass.data.pop(DOMAIN)
|
||||||
|
|
||||||
if router.mode != MODE_ROUTER:
|
if not router.track_devices:
|
||||||
router_id = None
|
router_id = None
|
||||||
# Remove devices that are no longer tracked
|
# Remove devices that are no longer tracked
|
||||||
device_registry = dr.async_get(hass)
|
device_registry = dr.async_get(hass)
|
||||||
|
|
|
@ -80,6 +80,7 @@ class NetgearRouter:
|
||||||
self.hardware_version = ""
|
self.hardware_version = ""
|
||||||
self.serial_number = ""
|
self.serial_number = ""
|
||||||
|
|
||||||
|
self.track_devices = True
|
||||||
self.method_version = 1
|
self.method_version = 1
|
||||||
consider_home_int = entry.options.get(
|
consider_home_int = entry.options.get(
|
||||||
CONF_CONSIDER_HOME, DEFAULT_CONSIDER_HOME.total_seconds()
|
CONF_CONSIDER_HOME, DEFAULT_CONSIDER_HOME.total_seconds()
|
||||||
|
@ -112,11 +113,23 @@ class NetgearRouter:
|
||||||
self.serial_number = self._info["SerialNumber"]
|
self.serial_number = self._info["SerialNumber"]
|
||||||
self.mode = self._info.get("DeviceMode", MODE_ROUTER)
|
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:
|
for model in MODELS_V2:
|
||||||
if self.model.startswith(model):
|
if self.model.startswith(model):
|
||||||
self.method_version = 2
|
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():
|
if not self._api.get_attached_devices_2():
|
||||||
_LOGGER.error(
|
_LOGGER.error(
|
||||||
"Netgear Model '%s' in MODELS_V2 list, but failed to get attached devices using V2",
|
"Netgear Model '%s' in MODELS_V2 list, but failed to get attached devices using V2",
|
||||||
|
@ -133,7 +146,7 @@ class NetgearRouter:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# set already known devices to away instead of unavailable
|
# 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)
|
device_registry = dr.async_get(self.hass)
|
||||||
devices = dr.async_entries_for_config_entry(device_registry, self.entry_id)
|
devices = dr.async_entries_for_config_entry(device_registry, self.entry_id)
|
||||||
for device_entry in devices:
|
for device_entry in devices:
|
||||||
|
|
Loading…
Add table
Reference in a new issue