Skip to content

Commit 23088b2

Browse files
committed
keep repeating discover_nodes until all registered nodes are online
1 parent 557fdf4 commit 23088b2

File tree

2 files changed

+28
-6
lines changed

2 files changed

+28
-6
lines changed

plugwise_usb/constants.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@
4040
# In bigger networks a response from a Node could take up a while, so lets use 15 seconds.
4141
NODE_TIME_OUT: Final = 15
4242

43+
# Retry delay discover nodes
44+
NODE_DISCOVER_INTERVAL = 60
45+
4346
MAX_RETRIES: Final = 3
4447
SUPPRESS_INITIALIZATION_WARNINGS: Final = 10 # Minutes to suppress (expected) communication warning messages after initialization
4548

plugwise_usb/network/__init__.py

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
from ..api import NodeEvent, NodeType, PlugwiseNode, StickEvent
1414
from ..connection import StickController
15-
from ..constants import ENERGY_NODE_TYPES, UTF8
15+
from ..constants import ENERGY_NODE_TYPES, NODE_DISCOVER_INTERVAL, UTF8
1616
from ..exceptions import CacheError, MessageError, NodeError, StickError, StickTimeout
1717
from ..helpers.util import validate_mac
1818
from ..messages.requests import CircleMeasureIntervalRequest, NodePingRequest
@@ -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._discover_task: Task | None = None
76+
self._discover_schedule_task: Task | None = None
7577

7678
# region - Properties
7779

@@ -431,15 +433,33 @@ async def _discover_node(
431433
async def _discover_registered_nodes(self) -> None:
432434
"""Discover nodes."""
433435
_LOGGER.debug("Start discovery of registered nodes")
434-
counter = 0
436+
registered_counter = 0
437+
discovered_counter = 0
435438
for address, registration in self._register.registry.items():
436439
mac, node_type = registration
437440
if mac != "":
438441
if self._nodes.get(mac) is None:
439-
await self._discover_node(address, mac, node_type)
440-
counter += 1
442+
if await self._discover_node(address, mac, node_type):
443+
discovered_counter += 1
444+
else:
445+
discovered_counter += 1
446+
registered_counter += 1
441447
await sleep(0)
442-
_LOGGER.debug("Total %s registered node(s)", str(counter))
448+
_LOGGER.debug(
449+
"Total %s online of %s registered node(s)",
450+
str(discovered_counter),
451+
str(registered_counter),
452+
)
453+
if discovered_counter < registered_counter:
454+
if self._discover_task is None or self._discover_task.done():
455+
self._discover_task = create_task(
456+
self._schedule_discover_registered_nodes()
457+
)
458+
459+
async def _schedule_discover_registered_nodes(self) -> None:
460+
"""Reschedule node discovery every interval until finished."""
461+
await sleep(NODE_DISCOVER_INTERVAL)
462+
self._discover_schedule_task = create_task(self._discover_registered_nodes())
443463

444464
async def _load_node(self, mac: str) -> bool:
445465
"""Load node."""
@@ -499,7 +519,6 @@ async def discover_nodes(self, load: bool = True) -> bool:
499519
await self.discover_network_coordinator(load=load)
500520
if not self._is_running:
501521
await self.start()
502-
503522
await self._discover_registered_nodes()
504523
if load:
505524
return await self._load_discovered_nodes()

0 commit comments

Comments
 (0)