Постоянно появляется Ошибка загрузки файла: MQTT RPC request timed out MqttTimeoutError
после выключения и включения системы два модуля перешли в режим загрузчика один получилось восстановить с помощью команды wb-mcu-fw-updater recover /dev/ttyRS485-1 -a 10
а второй на нее выдавал ошибку Can’t connect to и адрес восстановил с помощью команды wb-mcu-fw-updater recover wb-mcu-fw-updater recover -a178
В чем причина появления ошибки, появляется частенько когда менял скорость модулей, теперь когда пытаюсь зайти в wb-engine.
Здравствуйте! Я автоматический помощник техподдержки Wiren Board. Сейчас выходной — я попробую помочь сразу, а в ближайший рабочий день инженеры посмотрят тему и ответят.
Я проанализировал ваш вопрос и постарался найти возможное решение:
Судя по описанию, у вас:
- контроллер Wiren Board (скорее всего WB7/WB8),
- модули на RS‑485 (адреса 10 и 178), вероятно, из серии WB-Mxxx,
- при работе через веб-интерфейс (wb-engine / панель управления) периодически возникает ошибка:
«Ошибка загрузки файла: MQTT RPC request timed out MqttTimeoutError»
И после перезагрузки системы два модуля перешли в режим загрузчика (bootloader), один удалось восстановить через wb-mcu-fw-updater recover /dev/ttyRS485-1 -a 10, второй — через wb-mcu-fw-updater recover -a 178.
1. Что означает ошибка MQTT RPC request timed out
Такое сообщение обычно говорит не о файле как таковом, а о том, что:
- веб-интерфейс делает RPC-запрос через MQTT к wb-rules / wb-mqtt-* сервисам,
- ответ от сервиса не приходит вовремя (таймаут),
- в итоге UI показывает “Ошибка загрузки файла”.
Частые причины:
- Сервис wb-rules или wb-mqtt- зависает или перезапускается* (например, из‑за перегрузки процессора/памяти или ошибок в правилах).
- MQTT-брокер (mosquitto) перегружен или периодически перезапускается.
- Слишком долгий или “зависший” обработчик RPC-запроса (например, при обращении к проблемному устройству по RS‑485).
Полезно сразу проверить логи:
journalctl -u wb-mqtt-serial -u wb-rules -u mosquitto -n 200 -f
И повторить операцию, которая вызывает ошибку — посмотреть, не появляются ли ошибки времени ответа, зависания, перезапуски сервисов.
2. Переход модулей в загрузчик после перезагрузки
То, что два модуля одновременно ушли в загрузчик, типично для:
- нарушения параметров RS‑485 (скорость, чётность, стоп‑биты),
- конфликтов адресов,
- некорректной работы линии (питание / помехи / “горячее” подключение),
- прерывания питания во время обновления прошивки.
По Recover-командам видно:
wb-mcu-fw-updater recover /dev/ttyRS485-1 -a 10 — стандартное восстановление по шине RS‑485[^1];
wb-mcu-fw-updater recover -a 178 — похоже, использовалась автонаходка порта или другая шина.
Режим загрузчика модулей Wiren Board обычно включается, если:
- не удаётся корректно запуститься основная прошивка (например, сильно “битая” конфигурация порта или ошибки при старте),
- или если модуль “поймал” последовательность линий/сигналов, похожую на вход в bootloader (на зашумлённой/нестабильной линии).
3. Связь с изменением скорости модулей
Вы сами отметили:
«появляется частенько когда менял скорость модулей»
Тут возможны варианты:
-
Несоответствие настроек скорости и формата порта
- В модуле вы выставили одну скорость (например, 115200), а в конфиге
/etc/wb-mqtt-serial.conf осталась другая (9600).
- Или разные модули на одной линии шины с разными скоростями.
Это может приводить к “мусору” в линии и временами к зависаниям/ошибкам parsed пакетов и, в редких случаях, к уходу модулей в bootloader.
-
Частое изменение параметров через веб-интерфейс
При каждом изменении скорости/параметров wb-mqtt-serial перезапускается и может посылать на шину “обрывки” данных. Если линия “на пределе” по помехам/землям/терминации — модуль может принять это за команду загрузчика.
-
Несоответствие параметров: четность / стоп‑биты
Нужно убедиться, что и в модуле, и в контроллере выставлены одинаковые:
- скорость (baud),
- чётность (N/E/O),
- количество стоп-битов.
4. Что сделать сейчас
-
Проверить текущие настройки RS‑485 и модулей
- Откройте
/etc/wb-mqtt-serial.conf и убедитесь, что:
- все устройства на одном порту
/dev/ttyRS485-* на одной скорости и с одинаковыми параметрами;
- скорость реально поддерживается всеми модулями (больше надёжности — 9600 или 19200, если линия длинная/шумная).
- На самих модулях (через Modbus/регистры или DIP-переключатели, если есть) проверьте те же параметры.
Документация по wb-mqtt-serial и конфигурации устройств Modbus есть здесь[^2][^3].
-
Уменьшить скорость и стабилизировать линию
На время отладки:
- поставьте 9600 бод, N,8,1 для всех модулей на этой линии;
- убедитесь в наличии:
- терминаторов 120 Ом на концах линии,
- общей земли между контроллером и модулями,
- правильной полярности A/B.
При проблемах на длинной линии лучше остаться на 9600–19200.
-
Проверить, что модули стабильно опрашиваются
Можно временно включить отладку wb-mqtt-serial:
nano /etc/default/wb-mqtt-serial
Добавить/изменить строку:
DAEMON_OPTS="--debug"
Затем:
systemctl restart wb-mqtt-serial
journalctl -u wb-mqtt-serial -n 200 -f
Посмотрите, нет ли множества ошибок CRC, timeouts, “device not responding”, захода в bootloader и т.п.
-
**Разобраться с ошибкой MQTT RPC при входе
Добрый день!
Для диагностики проблемы пришлите, пожалуйста, архив с диагностической информацией контроллера. Создание архива описано в документации.
А вот сейчас контроллер написал нет связи адрес/mqtt и контроллер завис, зайти без перезагрузки не получилось. Такое и раньше было.
Добрый день,
Появлялись ли еще проблемы?