Skip to main content

Child Discovery

Discovery is an optional Driver capability. Some Drivers scan; others support manual configuration only.

Runtime ownership

HTML request or dn/discover/start
→ DiscoveryCoordinator
→ Driver discovery capability
→ NativeBusExecutor (when required)
→ normalized DiscoveryCandidate

HTML or MQTT callbacks must not scan/write native buses directly.

DiscoveryCandidate

A candidate is ephemeral and may contain:

{
"sessionId": "sess-123",
"candidateId": "drv-local-7",
"driverKey": "rs485.modbus.standard",
"transport": "rs485",
"protocol": "modbus-rtu",
"nativeLocator": {"busId":"rs485-1","slaveId":5},
"manufacturerHint": "Example Vendor",
"modelHint": "Controller X",
"deviceSerial": null,
"requiresManualConfiguration": true
}

candidateId and native locator are not DeviceSerial.

Manual onboarding

When a Driver has no discovery capability, HTML collects the Driver-required fields manually, such as bus, slave ID, or IP. Manual onboarding does not bypass authorization.

Offline behavior

A local native scan may be allowed while cloud is unavailable, but final authoritative onboarding/bind cannot complete without Backend authority. Do not create an unbounded "bind later" queue.

Bus safety

Discovery must be bounded and must not starve normal polling/control traffic on an active bus. Scan failure must not stop existing Children or manufacturer logic.