Проблема с прошивкой MSW v3

Добрый вечер!
Новый датчик микроклимата c адресом 188 не определялся через wb-mqtt-serial, но сканированием сети определялся. Решил обновить прошивку, получил интересный лог:

root@IQ266003:~# wb-mcu-fw-updater update-all
2021-08-10 13:38:08,456 Will probe all devices defined in /etc/wb-mqtt-serial.conf
2021-08-10 13:38:16,926 Update available: WB-MR6C (port: /dev/ttyRS485-1; slaveid: 52) (from 1.15.1 to 1.16.2)
2021-08-10 13:38:17,458 Update available: WB-MR6C (port: /dev/ttyRS485-1; slaveid: 68) (from 1.15.4 to 1.16.2)
2021-08-10 13:38:17,843 Not Found: http://fw-releases.wirenboard.com/fw/by-signature/mao4/stable/latest.txt
2021-08-10 13:38:18,217 Not Found: http://fw-releases.wirenboard.com/fw/by-signature/mao4/stable/latest.txt
2021-08-10 13:38:18,724 Update available: WB-MR6C (port: /dev/ttyRS485-1; slaveid: 44) (from 1.15.5 to 1.16.2)
2021-08-10 13:38:19,242 Update available: WB-MR6C (port: /dev/ttyRS485-1; slaveid: 61) (from 1.15.5 to 1.16.2)
2021-08-10 13:38:19,752 Update available: WB-MSW v.3 (port: /dev/ttyRS485-2; slaveid: 184) (from 4.16.5 to 4.16.14)
2021-08-10 13:38:20,258 Update available: WB-MSW v.3 (port: /dev/ttyRS485-2; slaveid: 190) (from 4.16.5 to 4.16.14)
2021-08-10 13:38:20,266 Flashing firmware to WB-MR6C (port: /dev/ttyRS485-1; slaveid: 52)

Sending data block 109 of 110...
2021-08-10 13:38:43,024 Flashing firmware to WB-MR6C (port: /dev/ttyRS485-1; slaveid: 68)

Sending data block 109 of 110...
2021-08-10 13:39:05,742 Flashing firmware to WB-MR6C (port: /dev/ttyRS485-1; slaveid: 44)

Sending data block 109 of 110...
2021-08-10 13:39:28,390 Flashing firmware to WB-MR6C (port: /dev/ttyRS485-1; slaveid: 61)

Sending data block 109 of 110...
2021-08-10 13:39:51,102 Flashing firmware to WB-MSW v.3 (port: /dev/ttyRS485-2; slaveid: 184)

Sending data block 181 of 182...
2021-08-10 13:40:28,190 Flashing firmware to WB-MSW v.3 (port: /dev/ttyRS485-2; slaveid: 190)

Sending data block 181 of 182...
2021-08-10 13:41:05,184 The following devices have already the most recent firmware.
Run "wb-mcu-fw-updater update-all -f" to force update:
    WB-MAO4 (port: /dev/ttyRS485-1; slaveid: 43)
    WB-MAO4 (port: /dev/ttyRS485-1; slaveid: 53)
2021-08-10 13:41:05,207 The following devices are in bootloader mode.
Try "wb-mcu-fw-updater recover-all":
    WB-MSW v.3 (port: /dev/ttyRS485-2; slaveid: 188)
2021-08-10 13:41:05,233 6 upgraded, 2 skipped upgrade, 1 stuck in bootloader, 0 disconnected and 0 too old for any updates.

root@IQ266003:~# wb-mcu-fw-updater recover-all
2021-08-10 13:43:52,307 Will probe all devices defined in /etc/wb-mqtt-serial.conf
2021-08-10 13:43:56,011 Unknown fw_signature: WB-MSW v.3 (port: /dev/ttyRS485-2; slaveid: 188)
2021-08-10 13:43:56,030 Could not recover:
    WB-MSW v.3 (port: /dev/ttyRS485-2; slaveid: 188)
Try again or launch single recover with --fw-sig <fw_signature> key for each device!
2021-08-10 13:43:56,051 0 recovered, 8 was already working, 1 not recovered and 0 not answered to recover cmd.

Как вернуть к жизни датчик?

С wb-mcu-fw-updater явно что-то не то, постараемся воспроизвести и исправить.

Прошить пока можно вручную через wb-mcu-fw-flasher, скачав файл прошивки отсюда.

Здравствуйте! Начинаем разбираться.

По апдейтеру - хотим:

  1. логи
    grep -i 'wb-mcu-fw-updater' /var/log/messages > updater_log.txt

  2. версию апдейтера
    apt policy wb-mcu-fw-updater

  3. конфиг wb-mqtt-serial

  4. и сигнатуру прошивки проблемного MSW (когда починится); можно питоном3:
    from wb_modbus.bindings import WBModbusDeviceBase as base
    device = base(188, '/dev/ttyRS485-2')
    device.get_fw_signature()

По поводу устройства: я правильно понимаю, что на modbus (modbus-client’ом, например) оно отвечало, но при добавлении в конфиг wb-mqtt-serial - стало красненьким?

  1. updater_log.txt (179.7 КБ)
  2. Версия wb-mcu-fw-updater 1.0.7
  3. wb-mqtt-serial.conf (1.4 КБ)

Да, все верно. Сканировал по этой инструкции - устройство определялось. Но через wb-mqtt-serial все топики были в …/meta/error - r

Прошился через wb-mcu-fw-flasher, прошивкой отсюда.

msw3-49gd_oa

Вижу у Вас в конфиге wb-mqtt-serial один стопбит - это сделано специально?

Пока что моя версия такая: у проблемного MSW два стопбита; из-за этого поломались wb-mqtt-serial и wb-mcu-fw-updater, а сканирование шины через modbus-client - работало, т.к. там 2 стопбита в примере

чтобы это проверить - считайте, пожалуйста, регистр 112 (если через wb-mcu-fw-flasher не стирали настройки uart ключиком -u, конечно)

Мм, да. Это ошибка в конфигурации.
wb-mcu-fw-updater берет параметры из wb-mqtt-serial.conf?
Думал, что wb-mcu-fw-updater определяет параметры как-то автоматически, так как в wb-mcu-fw-updater --help нету вижу возможности задать параметры подключения вручную.

В целом, мы не сразу заметили, что стопбит неверный, и довольно много обновляли прошивки таким образом и использовали wb-mqtt-serial без особых проблем.

wb-mcu-fw-updater - довольно хитрый: имеет разные режимы работы и соответственно, разные наборы ключей запуска для них (например, wb-mcu-fw-updater update-fw --help)

в режиме update-all он смотрит в конфиг wb-mqtt-serial и берет настройки оттуда
в режиме update-fw - ищет их сам

В режиме update-fw ищет в регистрах?

при верных адресе и порту перебирает допустимые комбинации настроек
https://github.com/wirenboard/wb-mcu-fw-updater/blob/acd51ec352d5b7da1bba15e06d0dd0218c0cb377/wb-mcu-fw-updater#L12

Вообще странно, что MSWv3 не видился wb-mqtt-serial вообще, так как остальные MSWv3 висевшие на шине работали.
Это состояние было до перепрошивки.
Соответственно, wb-mcu-fw-updater, как я понял, и не начинал шить MSWv3 188, хотя другие два MSWv3 обновил.