Discovery ابزارهای فرزند
Discovery یک قابلیت اختیاری Driver است. بعضی Driverها Scan میکنند و بعضی فقط Manual configuration دارند.
مالکیت Runtime
HTML request یا dn/discover/start
→ DiscoveryCoordinator
→ Driver discovery capability
→ NativeBusExecutor (در صورت نیاز)
→ normalized DiscoveryCandidate
HTML یا MQTT Callback نباید Bus را مستقیم Scan یا Write کند.
DiscoveryCandidate
Candidate موقت است و ممکن است این اطلاعات را داشته باشد:
{
"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 یا Native locator DeviceSerial نیستند.
Manual onboarding
اگر Driver Discovery ندارد، HTML باید امکان ورو د دستی فیلدهای موردنیاز Driver را فراهم کند؛ مثل Bus، Slave ID یا IP. Manual flow از نظر Authorization هیچ میانبر خاصی ندارد.
Offline
Native scan میتواند در صورت طراحی محصول محلی انجام شود، اما Final Onboarding/Bind بدون Backend authoritative تکمیل نمیشود. Queue نامحدود «بعداً Bind کن» ایجاد نکنید.
Bus safety
Discovery باید bounded باشد و روی Bus فعال، polling/control ترافیک فعلی را Starve نکند. Failure یک Scan نباید Childهای فعال یا Manufacturer logic را متوقف کند.