Skip to content

Commit e8ddce9

Browse files
committed
reinstate a minimal discovery repeat for nodes which have poor connection (or are initially unplugged) and have unknown NodeType
This mainly helps get the cache up and running for the first few restarts until the network is completely known and cached.
1 parent 6293c46 commit e8ddce9

File tree

1 file changed

+27
-6
lines changed

1 file changed

+27
-6
lines changed

plugwise_usb/network/__init__.py

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ def __init__(
7272
self._unsubscribe_node_rejoin: Callable[[], None] | None = None
7373

7474
self._discover_sed_tasks: dict[str, Task[bool]] = {}
75+
self._registry_stragglers: dict[int, str] = {}
76+
self._discover_stragglers_task: Task[None] | None = None
7577

7678
# region - Properties
7779

@@ -434,23 +436,42 @@ async def _discover_registered_nodes(self) -> None:
434436
"""Discover nodes."""
435437
_LOGGER.debug("Start discovery of registered nodes")
436438
registered_counter = 0
437-
discovered_counter = 0
438439
for address, registration in self._register.registry.items():
439440
mac, node_type = registration
440441
if mac != "":
441442
if self._nodes.get(mac) is None:
442-
if await self._discover_node(address, mac, node_type):
443-
discovered_counter += 1
444-
else:
445-
discovered_counter += 1
443+
if not await self._discover_node(address, mac, node_type):
444+
self._registry_stragglers[address] = mac
446445
registered_counter += 1
447446
await sleep(0)
447+
if len(self._registry_stragglers) > 0:
448+
if (
449+
self._discover_stragglers_task is None
450+
or self._discover_stragglers_task.done()
451+
):
452+
self._discover_stragglers_task = create_task(
453+
self._discover_stragglers()
454+
)
448455
_LOGGER.debug(
449456
"Total %s online of %s registered node(s)",
450-
str(discovered_counter),
457+
str(len(self._nodes)),
451458
str(registered_counter),
452459
)
453460

461+
async def _discover_stragglers(self) -> None:
462+
"""Repeat Discovery of Nodes with unknown NodeType."""
463+
while len(self._registry_stragglers) > 0:
464+
await sleep(60)
465+
stragglers: dict[int, str] = {}
466+
for address, mac in self._registry_stragglers.items():
467+
if not await self._discover_node(address, mac, None):
468+
stragglers[address] = mac
469+
self._registry_stragglers = stragglers
470+
_LOGGER.debug(
471+
"Total %s nodes unreachable having unknown NodeType",
472+
str(len(stragglers)),
473+
)
474+
454475
async def _load_node(self, mac: str) -> bool:
455476
"""Load node."""
456477
if self._nodes.get(mac) is None:

0 commit comments

Comments
 (0)