Окружение
- Контроллер: wb-2602 (wb7/bullseye, stable), SN AWRJQZPY
- wb-cli 1.8.5
- wb-device-manager 1.25.4
- wb-mqtt-serial 2.224.0-wb106
- python3-mqttrpc 1.3.5, python3-wb-common 2.2.6
- На шине ~50 устройств WB (MR6C, MR6CU, LED, M1W2, MWAC, MAP3E, MSW v.3, MRGBW-D) на ttyRS485-1/2
Симптом
wb-cli serial wb-fw check возвращает ошибку на всех устройствах:
RPC call to 'wb-device-manager/fw-update/GetFirmwareInfo' failed:
Server error [-32000]: Validation failed.
Причина
wb-cli (lib/serial_conf.py, iter_devices) берёт значения из
wb-mqtt-serial.conf и передаёт в RPC GetFirmwareInfo без приведения типов:
-
slave_id — в конфиге хранится строкой (
"73"), все 50 устройств.
Схема wb-device-manager требует integer:
<root>[slave_id] Value type not permitted by 'type' constraint -
baud_rate — у 30 устройств device-level baud_rate записан как
1152
(кодом, скорость/100). Схема ждёт реальную скорость из enum:
<root>[baud_rate] Failed to match against any enum values
Воспроизведение (прямой RPC, без wb-cli)
A) slave_id строкой + baud 1152 — как шлёт wb-cli → Validation failed:
mqtt-rpc-client -d wb-device-manager -s fw-update -m GetFirmwareInfo \
-a '{"slave_id":"73","port":{"path":"/dev/ttyRS485-1","baud_rate":1152,"parity":"N","data_bits":8,"stop_bits":2}}'
B) slave_id числом + baud 115200 → отрабатывает корректно:
mqtt-rpc-client -d wb-device-manager -s fw-update -m GetFirmwareInfo \
-a '{"slave_id":73,"port":{"path":"/dev/ttyRS485-1","baud_rate":115200,"parity":"N","data_bits":8,"stop_bits":2}}'
-> {"fw":"1.20.4","bootloader":"1.4.7","model":"WBMR6C", ...}
Вывод: сам wb-device-manager исправен, баг в wb-cli — не нормализует
slave_id и baud_rate перед RPC. В ветке main репозитория serial_conf.py тот же.
Диагностический архив прилагаю.