WEB интерфейс завис при обновлении устройств

Из командной строки устройства были обновлены без проблем.

apt update; apt -y upgrade
wb-mcu-fw-updater update-all

На одно устройство, при обновлении в командной строке, был вопрос об обновлении загрузчика, на что был утвердительный ответ и вроде бы все обновилось без проблем.

Но в WEB интерфейсе почти на все устройства стоит запрос на обновление прошивки.

Было запущено обновление в WEB интерфейсе, дошло до 64 процентов (скриншот) и зависло. При этом само устройство в WEB интерфейсе, ожидаемо, было красным все это время и выпало из работы.

Через часа три ожидания была выполнена команда в консоли

wb-mcu-fw-updater update-all

Она выполнена без ошибок и со статусом, что ничего не обновлено и обновлять не требуется, везде последние версии.
В WEB интерфейсе устройство перестало быть красным и прекрасно работает …
Но обновление продолжает висеть на 64 процентах.
Было запущено обновление другого устройства, но оно толком и не запустилось (зависло на самом начале).

Контроллер сейчас перегружать нет возможности (есть странность, похоже с питанием, но это другой вопрос). И что делать?



diag_output_AOXWLOXY_2025-02-04-14.32.08.zip (471,5 КБ)

Явно есть ошибка в коде и работе. Такого быть не должно в любом случае.

И как обновлять все устройства, вместе с загрузчиком!!!, одной командой из интерфейса или из командной строки? Чтобы не было проблем.

Добрый день!
Благодарю за замеченную странность в Web - интерфейсе.
Обычно обновление загрузчика и прошивки обоими способами проходила успешно.
Понадобится время на изучение архива и чтобы попробовать воспроизвести у себя.
Будут результаты или уточняющие вопросы – напишу.

Сегодня обновил устройства:

  1. Посмотрел в WEB интерфейсе, почти все устройства просили обновиться (еще со вчера)
  2. В консоли запустил update-all
  3. На все вопросы отвечал Y
  4. Оно все успешно обновило (наверное!, так как одно реле явно хоть и обновилось, но не выключалось, а должно было …)
  5. Перезапустит wb-rules
  6. В WEB интерфейсе продолжало писать на некоторые устройства, что нужно обновить только загрузчик (но он же был обновлен!!!)
  7. По очереди нажал обновить все устройства
  8. Большинство довольно быстро обновилось и судя по надписям, после обновления загрузчика была обновлена и прошивка … зачем-то.
  9. Но два последних устройства не обновилось с ошибкой (я так понимаю, для обновления загрузчика он скачивается, потом устройство переводится в режим загрузчика, … потом потеряло связь?)
  10. Запустил после каждого раза из консоли update-all и перезапуск wb-rules
  11. Во время обновления в консоли ничего не требовалось обновить6 но проблемное устройство было найдено и без вопросов было обновлено
  12. Все устройства после этого появились в консоли, ошибка с просьбой “найти устройство” исчезла, но первая ошибка на месте … (Как убрать этот глюк?)

Итого:

P.S.
Второй пункт (обновление в консоли) выполнял так:

apt update; apt -y upgrade
wb-mcu-fw-updater update-all #Везде Y
systemctl restart wb-rules
wb-mcu-fw-updater update-all #Убедиться, что обновления не требуются
systemctl restart wb-rules

Как убрать ошибки из коносли, не перезагружай контроллер?

Добрый день!
Прошу прощения за долгое ожидание.

Утилита wb-mcu-fw-updater обновляет загрузчик только в том случае, когда обновляет прошивку устройства. Если у устройств установлена актуальная версия прошивки, то загрузчики обновляться командой wb-mcu-fw-updater update-all не будут. Поэтому в WEB интерфейсе отображаются уведомления о доступном обновлении загрузчика. При обновлении загрузчика затирается прошивка, поэтому она загружается повторно, даже если была актуальна.

Было запущено обновление в WEB интерфейсе, дошло до 64 процентов (скриншот) и зависло.

Причин зависания в режиме обновления прошивки может быть достаточно много, стараемся фиксировать такие случаи и разбирать в отдельности. Иногда причиною оказывается плохая связь с интернетом или вовсе причина в отображении страницы и помогает её обновление с очисткой кэша (Crtl+5).
Если устройство после неудачного обновления все же осталось в режиме загрузчика, то для восстановление прошивки следует использовать автоматическое восстановление, а если это не помогло, то утилиту wb-mcu-fw-flasher.

Наши разработчики рекомендуют проводить обновление через консоль, как это описано в нашей документации, а сообщения в Web интерфейсе использовать как информацию о выходе обновлений.

Через консоль! Но при этом что-то может не обновиться (а версия загрузчика вообще не проверяется) и нет команды обновлять интерактивно …
Зато через WEB интерфейс все “отлично”, только сбоит. жутко (за две попытки обновления в течении пары месяцев, обе с бубнами и плясками …)

Все ясно. ))

Опция проверки версий загрузчиков и их обновления через WEB-интерфейс появилась относительно недавно, поэтому для нас важно получась обратную связь по её работе. Пока единой закономерности возникновения ошибок при обновлении мне установить не удалось. Заметил только, что через неустойчивое соединение Wi-Fi такое иногда случается и через консоль, а после того как подключил контроллер через кабель к роутеру больше не повторялось.

Поэтому и написал тут.
Саму проблему решил самостоятельно (и описал как)

Я так понимаю, проблема носит массовый характер, но да, скорее всего проявляется только при “слабом” Интернет. Может кратковременная потеря пакетов (что TCP не может сам исправить, или вообще UDP используется некорректно …)

Как разработчик, могу сказать, что основная причина - “неправильный” алгоритм, то есть проблема проектирования: нет учета “слабых” мест. При этом решение хоть и не совсем индустриальное, такого все равно не должно быть, имхо.

Повторюсь, о тех проблемах (и как должно быть), с моей точки зрения.
(Но у меня не многолетний опыт работы именно с WB, но и RS и Debian …, поэтому не факт, что прав абсолютно)

  1. Работа что через консоль, что через WEB должна быть абсолютно одинаковой! Через интерфейс только упрощается выбор устройства и “кнопка” … Через интерфейс возможностей обычно меньше, чем через консоль
  2. Работа должна быть абсолютно надежной
  3. Должен быть ключ утилиты “только скачать все прошивки и/или загрузчики” последней или заданной версии (с вариантом очистки предыдущих версий (замены) или положить рядом)
  4. Должен быть ключ интерфейса “обновлять устройства только из локальной копии (то что скачали пунктом 3 или положили в определенную папку вручную”
  5. Должен быть ключ вывода подробной информации (по сути он должен быть для WEB интерфейса, сам анализ вывода утилиты - вывод в интерфейс, а кнопка должна вызывать ту же саму консольную команду: “обновить -конкретное_устройство -включая/исключая_загрузчик -тихо -с_выводом_подробной_информации”
  6. Должна быть возможность проверки версии загрузчика
  7. Должна быть возможность сохранить и восстановить значения “настроечных” регистров.
  8. Должна быть возможность “тихой” установки - то есть не задавая никаких вопросов
  9. Должгны быть возможность обновления загрузчика
  10. Возможность очистки скачанных обновлений после успешной установки прошивки/загрузчика (для экономии места) или оставлять (для “истории” или использования на другом контроллере … или для других алгоритмов (замена неисправного устройства на новое и возврат на него версии и значений сохраненных регистров)
  11. Сам алгоритм обновления должен быть (а он примерно такой и есть сейчас, но “примерно”) четко по “ШАГАМ”: скачивание (при чем минимум три попытки, если соединение прервалось, или этот шаг пропускается ключом), сохранение всех настроечных параметров устройства (шаг можно пропустить), строго автономное (отдельным процессом, чтобы даже отвалившаяся консоль … не могла появлиять) обновление загрузчика (этот шаг можно пропустить ключом), аналогично обновление прошивки (также можно пропустить или обязателен при обновлении загрузчика), восстановление всех настроечных параметров устройства (можно пропустить или указать версию/дату сохранения параметров …), проверка версии (а может еще какая диагностика устройства).

В результате можно как по времени разделять (скачивать обновления (при чем не факт что самим контроллером), обновлять … ), так и гибкость и любая автоматизация процесса (а то получается “умный дом”, что только и исключительно “без участия человека”, но даже чтобы обновить, нужно очень плотное “участие”)

Но … все эти доработки не “быстрые”, и наверняка задач много …
Но с другой стороны, нужна надежность в любом случае, а значит в любом случае допиливать и исправлять …

P.S. И в WEB интерфейсе должна быть не “новая утилита” обновления со “своим” алгоритмом, а также самая утилита, единственная, только обернутая в WEB интерфейс. Имея два алгоритма в разных местах контроллера (а в WEB интерфейсе он второй исключительно потому, что консольная утилита “так не может”) получаете две разработки и ошибки в двух местах (а при обновлении/изменении логики работы еще и кучу дополнительных проблем)

Благодарю за развернутое предложение по улучшению функционала интерфейса и процесса обновления ПО!
Внес в предложения для руководства и команды разработчиков, ваши предложения и замечания будут рассмотрены.