Обновление modbus-устройств в 2204

С утра обновился до 2204. Если важно - оставил старые настройки wb-mqtt-serial.conf, как то рекомендует инструкция.

Теперь при попытке выполнить wb-mcu-fw-updater update-all возвращается ошибка:

root@wirenboard-AGY6SGDE:~# wb-mcu-fw-updater update-all
2022-05-30 06:05:55,370 Will probe all devices defined in /etc/wb-mqtt-serial.conf
2022-05-30 06:05:56,770 Unhandled exception!
Traceback (most recent call last):
  File "/usr/bin/wb-mcu-fw-updater", line 277, in <module>
    args.func(args)
  File "/usr/bin/wb-mcu-fw-updater", line 109, in update_all
    update_monitor._update_all(force=args.force, allow_downgrade=args.allow_downgrade)
  File "/usr/lib/python3/dist-packages/wb_mcu_fw_updater/update_monitor.py", line 385, in _update_all
    probing_result = probe_all_devices(CONFIG['SERIAL_DRIVER_CONFIG_FNAME'])
  File "/usr/lib/python3/dist-packages/wb_mcu_fw_updater/update_monitor.py", line 355, in probe_all_devices
    device_info = DeviceInfo(name=device_name, modbus_connection=get_correct_modbus_connection(device_slaveid, port, uart_params))
  File "/usr/lib/python3/dist-packages/wb_mcu_fw_updater/update_monitor.py", line 133, in get_correct_modbus_connection
    sn = modbus_connection.get_serial_number()  # Will raise NoResponseError, if disconnected
  File "/usr/lib/python3/dist-packages/wb_modbus/bindings.py", line 509, in get_serial_number
    device_signature = str(self.get_device_signature())
  File "/usr/lib/python3/dist-packages/wb_modbus/bindings.py", line 600, in get_device_signature
    return self.read_string(self.COMMON_REGS_MAP['device_signature'], self.DEVICE_SIGNATURE_LENGTH)
  File "/usr/lib/python3/dist-packages/wb_modbus/bindings.py", line 41, in wrapper
    raise thrown_exc
  File "/usr/lib/python3/dist-packages/wb_modbus/bindings.py", line 36, in wrapper
    return f(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/wb_modbus/bindings.py", line 416, in read_string
    ret = minimalmodbus._hexlify(self.device.read_string(addr, regs_lenght, 3))
  File "/usr/lib/python3/dist-packages/wb_modbus/minimalmodbus.py", line 755, in read_string
    payloadformat=_PAYLOADFORMAT_STRING,
  File "/usr/lib/python3/dist-packages/wb_modbus/minimalmodbus.py", line 1170, in _generic_command
    payload_from_slave = self._perform_command(functioncode, payload_to_slave)
  File "/usr/lib/python3/dist-packages/wb_modbus/minimalmodbus.py", line 1244, in _perform_command
    response, self.address, self.mode, functioncode
  File "/usr/lib/python3/dist-packages/wb_modbus/minimalmodbus.py", line 1769, in _extract_payload
    _check_response_slaveerrorcode(response)
  File "/usr/lib/python3/dist-packages/wb_modbus/minimalmodbus.py", line 3429, in _check_response_slaveerrorcode
    raise error
wb_modbus.minimalmodbus.IllegalRequestError: Slave reported illegal data address

По тексту ошибки, к сожалению, понять кто виновник не смог (намёк в сторону необходимости более информативных ошибок).

Если правильно понимаю, к Wb-mcu-fw-updater update-all валится после обновления первого устройства - #16 от пользователя Haggard один-в-один не имеет отношения, т.к. по обоим портам Baud rate = 9600. Но, например, Stop bits на одном из них изменён от стандартного (на одном 1, на другом 2 в силу специфики подключённого устройста).

По одному все родные устройства обновились.

Здравствуйте! Скажите, а есть ли подключенные сторонние устройства или все от Wirenboard?

Есть сторонние, конечно)
Приточка Turkov.

Тогда скорее всего проблема в стороннем устройстве. Попробуйте для начала его временно физически отключить.
В указанной по ссылке теме как раз эта проблема также присутствует. Сделали багрепорт для разработчиков.

здравствуйте!
взяли в работу.

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

python3-wb-mcu-fw-updater_1.3.2~exp~tmp+vdromanov+wb2204+bugfixes~7~g185a10e_all.deb (41.9 КБ)
wb-mcu-fw-updater_1.3.2~exp~tmp+vdromanov+wb2204+bugfixes~7~g185a10e_all.deb (5.5 КБ)

  1. положить оба deb-файла на контроллер
  2. apt install ./*wb-mcu-fw-updater*.deb --reinstall
  3. wb-mcu-fw-updater update-all -f

вернуть всё обратно:
apt update; apt install python3-wb-mcu-fw-updater=1.3.0 wb-mcu-fw-updater=1.3.0

Фикс работает корректно. Все устройства обновились.
После теста версию пока откатил обратно.

На всякий случай сначала в этом же треде спрошу, на случай, если это могло быть побочным действием force-update’а.

Почему-то у всех WB-MIR слетели записи в ROM (везде ROM size = 0).
Может ли это быть связанным с -f или под эту ситуацию лучше отдельный тред создать?

Благодарю!

А это, к сожалению, особенность хранения данных в самих устройствах (с updater’ом никак не связанная).
Mir и msw при перепрошивке теряют записанные в rom ИК-команды; модули реле - маппинг-матрицу.

Насколько мне известно, embedded-разработчики готовят крупное обновление прошивок устройств, убирающее эту неприятную особенность. По срокам, к сожалению, ничего сказать не могу.

1 лайк

Эта тема была автоматически закрыта через 7 дней после последнего ответа. В ней больше нельзя отвечать.