При обновлении умер WB-MSW v.3

root@wirenboard-ACKAQBV2:~# wb-mcu-fw-updater update-all
2026-03-05 20:55:28,730 Will probe all devices on enabled serial ports of /etc/wb-mqtt-serial.conf:
Probing WB-MSW v.3 (port: /dev/ttyRS485-1, slaveid: 97, uart_params: 9600N2, response_timeout: 0.50)... (elapsed: 00:05)
Probing WB-MRGBW-D (port: /dev/ttyRS485-1, slaveid: 166, uart_params: 9600N2, response_timeout: 0.50)... (elapsed: 00:05)
Probing WB-MR11 (port: /dev/ttyRS485-1, slaveid: 196, uart_params: 9600N2, response_timeout: 0.50)... (elapsed: 00:01)
Probing WB-MR3 (port: /dev/ttyRS485-1, slaveid: 48, uart_params: 9600N2, response_timeout: 0.50)... (elapsed: 00:00)
2026-03-05 20:55:56,317 Is actual: 1.23.0 -> 1.23.0 (WB-MR3 (48, /dev/ttyRS485-1))
2026-03-05 20:55:57,352 Found in bootloader: WB-MSW v.3 (97, /dev/ttyRS485-1); fw_signature: None
2026-03-05 20:55:57,355 No answer from:
2026-03-05 20:55:57,358 	WB-MRGBW-D (166, /dev/ttyRS485-1)
2026-03-05 20:55:57,369 Devices are possibly disconnected
2026-03-05 20:55:57,377 Now in bootloader:
2026-03-05 20:55:57,380 	WB-MSW v.3 (97, /dev/ttyRS485-1)
2026-03-05 20:55:57,386 Try wb-mcu-fw-updater recover-all
2026-03-05 20:55:57,388 0 upgraded, 0 skipped upgrade, 0 bootloader updates available, 1 stuck in bootloader, 1 disconnected and 0 too old for any updates.
root@wirenboard-ACKAQBV2:~# wb-mcu-fw-updater recover-all
2026-03-05 20:56:34,149 Will probe all devices on enabled serial ports of /etc/wb-mqtt-serial.conf:
Probing WB-MR3 (port: /dev/ttyRS485-1, slaveid: 48, uart_params: 9600N2, response_timeout: 0.50)... (elapsed: 00:00)
Probing WB-MSW v.3 (port: /dev/ttyRS485-1, slaveid: 97, uart_params: 9600N2, response_timeout: 0.50)... (elapsed: 00:05)
Probing WB-MR11 (port: /dev/ttyRS485-1, slaveid: 196, uart_params: 9600N2, response_timeout: 0.50)... (elapsed: 00:01)
Probing WB-MRGBW-D (port: /dev/ttyRS485-1, slaveid: 166, uart_params: 9600N2, response_timeout: 0.50)... (elapsed: 00:05)
2026-03-05 20:56:48,738 Unknown fw_signature: WB-MSW v.3 (97, /dev/ttyRS485-1)
2026-03-05 20:56:48,748 Not recovered:
2026-03-05 20:56:48,760 	WB-MSW v.3 (97, /dev/ttyRS485-1)
2026-03-05 20:56:48,774 Try again or launch single recover with --fw-sig <fw_signature> key for each device!
2026-03-05 20:56:48,790 0 recovered, 1 was already working, 1 not recovered and 1 not answered to recover cmd.

По инструкции из Проблема с прошивкой MSW v3 прошил

wb-mcu-fw-updater recover -a 97 --fw-sig msw3-48mh /dev/ttyRS485-1

НО! У устройства пропал датчик Air Quality (VOC) (красный)

Как понять, ту ли я прошивку залил? (Или как залить правильную? Обнаружил, что для MSW3 16 разных прошивок)

Здравствуйте. Давайте сначала узнаем сигнатуру:

  1. драйвер надо остановить:
systemctl stop wb-mqtt-serial
  1. прочитайте информацию об устройстве:
wb-mcu-fw-flasher -d /dev/ttyRS485-1 -a97 --get-device-info
Bootloader version: 1.4.9
Firmware version: 4.35.1
Firmware signature (fw-sig): msw3-48mh
Download firmwares: https://fw-releases.wirenboard.com/?prefix=fw/by-signature/msw3-48mh/

Означает ли это, что я случайно попал в правильную fw или после перепрошивки он себя считает 48mh?

Контроллер почему-то не увидел вообще сигнатуру датчика:

Found in bootloader: WB-MSW v.3 (97, /dev/ttyRS485-1); fw_signature: None

Попробуйте выполнить ручное обновление прошивки. Сигнатуру вы уже знаете.

Так я выполнил. Сейчас прошита msw3-48mh. Она работает, но периодически становится красным Air Quality (VOC). Вот я и пытаюсь понять, точно ли 48mh это правильная прошивка?

root@wirenboard-ACKAQBV2:~# wb-mcu-fw-updater recover -a 97 /dev/ttyRS485-1
Will find bootloader port settings for (/dev/ttyRS485-1 : 97; response_timeout: 0.20)... (elapsed: 00:03)
2026-03-05 21:02:54,613 Has found bootloader port settings: SerialSettings(baudrate=9600, parity='N', stopbits=2)
2026-03-05 21:02:55,614 
2026-03-05 21:02:55,625 Try all possible fw_signatures (mr6c, m1w2-21, m1w2, mai2cc, mai2vc, mir, mir64, ms-33, msv2-4.0, msw3-48mh30, msw3-48mh, mio, map12h, map3e, map3h, map3h51, map6s, map6s51, mrgbw, mr2m, mr2m_k6, mr3, mr6, mrps6, mrwl3, wbmwac, mdm3, mcm8, mrwm2, map12e, msw3-45cm, mao4, msw3-49mh, map6se, msw3-49, wb-mai-v10, msw3-49th30, m1w2-22, msw3-49-467, mir64_gd, msv2-4.0_gd, map3e_36, mr2m_k6_gd, mr3_gd, mr6c_gd, mr6_gd, mrps6_gd, mrwl3_gd, wbmwac_gd, mdm3_1616, mdm3_26, mdm3_042, mr6c_042, mr6cu_042, mr6cu, wbmwac_042, map3e_031f6, msw3-49_gd, mr6_042, mrwl3_042, msw3-49gd_oa, mcm8G, mr2mG, mr3G, mr6cG, mr6cuG, mr6G, mrps6G, mrwl3G, wbmwacG, mao4G, mrgbwG, mdm3G, mdm3G26, msw3G49th, m1w2G21, ref-df, refu, map3eG, map3e_0312k, msw3G419, map12eG, mrwm2G, mr2mG115, msw3G419S, adc_test, map3eG16, map6seG16, map6sG16, msw3G419th, msv2G40s, mr6cpG, msv2-4gd_th, msv2G42, ledG, msw3Gc, msw3G419_LR, msw3G419L, wb-mai6, msw4G51L, msw5G, msw5GL, msw5Gth, map6semG16, map3e16, map3evG16, wb-mai6-15, msv2G42nlg, wbmwacS, mwac0, msw5Gr2, m1w2G3, msw5Gpb, mao4G-C, mao4G-C-B, dali3G, ok_gr3b, ok_tcl1b, ok_me1b, ok_aux1b, ok_hr1b, ok_dk1b, ok_dk5b, ok_gr1b, ok_hs3b, ok_tn1b, ok_mdvrfb, ok_md3b, ok_hs5b, ok_hs6b, mir_gdf8, ok_md1b, ok_gr3c, msv2Gth, ok_tcl3b, mr3Ge, mr6cGe, mr6cpGe, mr6cuGe, mr6Ge, mrps6Ge, mrwl3Ge, mai2ccG3, map12eGe, map3eG16e, map3evG16e, map6semG16e, ok_grp3b, ups-v3, ok_cgvrfb, mr2mGe, refuGe, mcm8Ge, ref-dfGe, mdm3G26e, mao4Ge, mao4Ge-C, mioGe, ok_ht1b, ok_mh2b, ok_tcl3c, ledGe, mrwm2Ge, msv2Ge42nlg, msv2Geth, msw5Ge, msw5Gepb, msw5Geth, mr2mncGe, mvc2, ok_air3c, ok_tcl6b, ups-v3-dlg2, ok_hsvrfb, co2_sens_ns8, ok_cgvrfc, ok_hs3c, ok_md3c, ok_mdvrfc, factory_mge_v3, mge_v3, ok_grp3c, ok_tb1b, wb-mai6-15Ge, ok_sgvrfc, ok_auxvrfc, map3etG16e, map3eG16e2, mr7gGe) for (97 /dev/ttyRS485-1); response_timeout: 0.20? [Y/N]
y
2026-03-05 21:03:07,331 Trying mr6c:
2026-03-05 21:03:39,794 Flashing /var/lib/wb-mcu-fw-updater/mr6c__1.20.4_master_f4ca222.wbfw (199 data chunks)
2026-03-05 21:03:42,246 Trying m1w2-21:
2026-03-05 21:03:56,819 Flashing /var/lib/wb-mcu-fw-updater/m1w2-21__4.31.0_master_f8e791c.wbfw (157 data chunks)
2026-03-05 21:03:59,301 Trying m1w2:
2026-03-05 21:04:24,131 Flashing /var/lib/wb-mcu-fw-updater/m1w2__4.31.0_master_f8e791c.wbfw (157 data chunks)
2026-03-05 21:04:26,589 Trying mai2cc:
2026-03-05 21:04:50,109 Flashing /var/lib/wb-mcu-fw-updater/mai2cc__4.33.0_master_2000fd3.wbfw (167 data chunks)
2026-03-05 21:04:52,559 Trying mai2vc:
....




root@wirenboard-ACKAQBV2:~# wb-mcu-fw-updater recover -a 97 --fw-sig msw3-48mh30 /dev/ttyRS485-1

Will find bootloader port settings for (/dev/ttyRS485-1 : 97; response_timeout: 0.20)... (elapsed: 00:03)

2026-03-05 21:06:52,211 Has found bootloader port settings: SerialSettings(baudrate=9600, parity='N', stopbits=2)

2026-03-05 21:07:15,081 Flashing /var/lib/wb-mcu-fw-updater/msw3-48mh30__4.29.11_master_7712742.wbfw (219 data chunks)

2026-03-05 21:07:17,551 Recovering (97 /dev/ttyRS485-1) was not successful

2026-03-05 21:07:17,559 

root@wirenboard-ACKAQBV2:~# wb-mcu-fw-updater recover -a 97 --fw-sig msw3-48mh /dev/ttyRS485-1

Will find bootloader port settings for (/dev/ttyRS485-1 : 97; response_timeout: 0.20)... (elapsed: 00:03)

2026-03-05 21:08:23,647 Has found bootloader port settings: SerialSettings(baudrate=9600, parity='N', stopbits=2)

2026-03-05 21:08:56,250 Flashing /var/lib/wb-mcu-fw-updater/msw3-48mh__4.35.1_master_a2e0d1e.wbfw (325 data chunks)

100%|############################################################################################################################|325/325

2026-03-05 21:10:48,323 Done (97 /dev/ttyRS485-1)

Т.е. я увидел, что recover пытается перебирать прошивки и попытался сократить путь, выбирая только msw3 прошивки. Со второго раза угадал и пытаюсь понять, точно ли я правильно попал

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

Периодически? давайте проверим как часто:

  1. Остановите драйвер
  2. Выполните чтение 107 input регистра(Сырые значения датчика VOC) раз 10-20:
modbus_client -mrtu -pnone -s1 /dev/ttyRS485-1 -a97 -t -r108

Сколько будет ненулевых значений?

root@wirenboard-ACKAQBV2:~# modbus_client -mrtu -pnone -s1 /dev/ttyRS485-1 -a97 -t -r108
Function type (-r108) is not integer!

modbus_client [--debug] [-m {rtu|tcp}] [-a<slave-addr=1>] [-c<read-no>=1]
	[-r<start-addr>=100] [-t<f-type>] [-o<timeout-ms>=1000] [{rtu-params|tcp-params}] serialport|host [<write-data>]
NOTE: if first reference address starts at 0, set -0

root@wirenboard-ACKAQBV2:~# modbus_client -mrtu -pnone -s1 /dev/ttyRS485-1 -a97 -t3 -r108
SUCCESS: read 1 of elements:
	Data: 0x0006 

и так стабильно раз 30

Ой я ошибся, простите. Тут код функции -t4 должен быть и регистр 107:

modbus_client -mrtu -pnone -s1 /dev/ttyRS485-1 -a97 -t -r107
root@wirenboard-ACKAQBV2:~# modbus_client -mrtu -pnone -s1 /dev/ttyRS485-1 -a97 -t3 -r107
SUCCESS: read 1 of elements:
	Data: 0x42ac 
root@wirenboard-ACKAQBV2:~# modbus_client -mrtu -pnone -s1 /dev/ttyRS485-1 -a97 -t3 -r107
SUCCESS: read 1 of elements:
	Data: 0x42ac 
root@wirenboard-ACKAQBV2:~# modbus_client -mrtu -pnone -s1 /dev/ttyRS485-1 -a97 -t3 -r107
SUCCESS: read 1 of elements:
	Data: 0x42ac 
root@wirenboard-ACKAQBV2:~# modbus_client -mrtu -pnone -s1 /dev/ttyRS485-1 -a97 -t3 -r107
SUCCESS: read 1 of elements:
	Data: 0x42ac 

стабильно работает (раз 30 запустил)

Если нулевых значений или 0xFFFF не приходило - значит, датчик работает корректно.

При этом в веб интерфейсе значение становится VOC становится красным?

Включите обратно serial драйвер:

systemctl start wb-mqtt-serial

Пускай поработает минут 10 и (если покраснения появятся) затем пришлите диагностический архив. Создание архива описано в документации.

Так все-таки. Я правильную прошивку залил? или есть варианты?

я написал выше:

Т.е. да, правильно

root@wirenboard-ACKAQBV2:~# mosquitto_sub -v -t '/devices/wb-msw-v3_97/controls/Air Quality (VOC)/#'
/devices/wb-msw-v3_97/controls/Air Quality (VOC)/meta {"order":4,"readonly":true,"title":{"ru":"\u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0430 (VOC)"},"type":"value","units":"ppb"}
/devices/wb-msw-v3_97/controls/Air Quality (VOC)/meta/order 4
/devices/wb-msw-v3_97/controls/Air Quality (VOC)/meta/readonly 1
/devices/wb-msw-v3_97/controls/Air Quality (VOC)/meta/type value
/devices/wb-msw-v3_97/controls/Air Quality (VOC) 365
/devices/wb-msw-v3_97/controls/Air Quality (VOC) 362
/devices/wb-msw-v3_97/controls/Air Quality (VOC) 364
/devices/wb-msw-v3_97/controls/Air Quality (VOC) 365

Несколько часов проработала команда
Насколько я понимаю, при появлении ошибки она должна была попасть в /devices/wb-msw-v3_97/controls/Air Quality (VOC)/meta/error

Все чисто. Что это было - непонятно. Не могло длительное нахождение в бутлоадере как-то повлиять на датчик и он подглюкивал?

Нет.
Но VOC начинает работать через 5 минут после подачи питания (или перезагрузки) на устройство.