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.