Обновление прошивки через почту

юный падаван

✩✩✩✩✩✩✩
13 Дек 2023
7
0
Приветствую всех.
Хотел для обновления прошивки сделать механизм через электронную почту. Причина: не хочу держать постоянно поднятый сервер обновлений, да и хочется полу-оффлайновый механизм. Как выложу прошивку, так как только устройство будет включено, само залезет в почту, проверит есть ли вложение, и обновится.
Решил использовать через библиотеку https://github.com/mobizt/ESP-Mail-Client
И как назло оказалось что там есть пример :) https://github.com/mobizt/ESP-Mail-Client/tree/master/examples/IMAP/Firmware_Update_Attachment

Однако у меня он не заработал.

Выдаётся сообщение:

11:37:08.153 -> #### Attachments (1)
11:37:08.153 -> #### 1. firmware.bin
11:37:08.153 ->
[.......]
11:37:08.321 ->
11:37:08.321 -> #### Updating firmware...
11:37:08.321 -> > C: [ ] 0 %
11:37:09.508 -> > C: [# ] 10 %
[.......]
11:37:18.933 -> > C: [############### ] 95 %
11:37:19.445 -> > C: [################] 100 %
[........]
11:37:19.536 -> Firmware is NOT updated!!!

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

Так вот у меня вопрос: кто-то пробовал этой библиотекой пользоваться для обновления прошивки? И если да, то что понадобилось для донастройки? А если нет, то кто-то вообще пытался реализовывать такой механизм? Спасибо.
 

vortigont

★★★★★★✩
24 Апр 2020
1,022
542
Saint-Petersburg, Russia
спасибо за ссылку на интересную библиотеку )
вы ведь не пробуете в код от примера залить прошивку из какого-то своего другого проекта, да? :) или таки пробуете?
Если собираете пример из либы, то и прошивку заливайте с этим же примером, которую только что прошивали через кабель. Прошивки из сборок разных проектов могут быть несовместимы.
 

юный падаван

✩✩✩✩✩✩✩
13 Дек 2023
7
0
Конечно пробую :)
0. предлагаю на ты.
1. так в том и смысл чтоб залить обновление, которое уже по факту не равно тому что уже есть.

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

юный падаван

✩✩✩✩✩✩✩
13 Дек 2023
7
0
По результатам теста докладываю: не изменилось ничего.
Вот что я заметил в файле ESP_Mail_IMAP.h из библиотеки: результат успешного обновления если:
(cPart(imap)->firmware_downloaded_byte == (size_t)cPart(imap)->attach_data_size || cPart(imap)->octetCount >= res.octetLength)

НО! attach_data_size идёт нарастающим итогом, чего по идее же быть не должно, а octetCount никогда не достигает octetLength, вероятно потому что не хватает одного последнего октета из-за неверного начала счёта:


Загружено: 57
Вложение: 1310777
Счетчик октетов: 78
Длина октетов: 1531258

Загружено: 114
Вложение: 1310834
Счетчик октетов: 156
Длина октетов: 1531258

.......

Загружено: 1118910
Вложение: 2429630
Счетчик октетов: 1531140
Длина октетов: 1531258

Загружено: 1118967
Вложение: 2429687
Счетчик октетов: 1531218
Длина октетов: 1531258
 

юный падаван

✩✩✩✩✩✩✩
13 Дек 2023
7
0
Я добавил в bool ESP_Mail_Client::parseAttachmentResponse(IMAPSession *imap, char *buf, esp_mail_imap_response_data &res)
в самое начало проверку printf("Начало: %u\n", (size_t)cPart(imap)->attach_data_size); и при входе там сразу есть размер. А далее выполняется cPart(imap)->attach_data_size += olen; которая в цикле безостановочно добавляет ту же константу что и к объёму загруженного cPart(imap)->firmware_downloaded_byte += fw_write == olen ? olen : 0;
 

vortigont

★★★★★★✩
24 Апр 2020
1,022
542
Saint-Petersburg, Russia
а где исходный размер файла прошивки и размер вложения? что такое длинна октетов и счетчик октетов?

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

юный падаван

✩✩✩✩✩✩✩
13 Дек 2023
7
0
1. Размер прошивки 300КБ
2. Что за октеты - не знаю. Пытался разобраться в библиотеке, увы, не понял.
3. Пытался, тот же результат, но мне кажется что это связано с другим, как я и говорил успешное выполнение только при условии выше, а оно невозможно никогда, потому что увеличиваются обе части сравнения одновременно.

И вообще, предлагаю попробовать самому, может это я уже замылил глаза и не вижу очевидного решения :)
 

vortigont

★★★★★★✩
24 Апр 2020
1,022
542
Saint-Petersburg, Russia
1. Размер прошивки 300КБ
что-то подозрительно мало для есп32. И как тогда получается что Загружено: 1118967?

предлагаю попробовать самому
не, мне лень.. нет имап-ящика без ссл куда прицепиться можно, возиться надо заводить. КМК это довольно странный и мутный способ для обновления прошивки. Но сама либа оч крутая ) Кто-то же не поленился.
 

юный падаван

✩✩✩✩✩✩✩
13 Дек 2023
7
0
что-то подозрительно мало для есп32. И как тогда получается что Загружено: 1118967?
О, нет. В примере с 1118967 была прошивка того же что и загружено. А сколько должно быть? :)
А 300 кил это что-то простое шумящаее в COM-порт для проверки.
КМК это довольно странный и мутный способ для обновления прошивки.
Почему же? Мне наоборот кажется самым оптимальным: старт устройства, проверка наличия обновления, и не нужно держать его включенным, держать сервер для обновления.
 

vortigont

★★★★★★✩
24 Апр 2020
1,022
542
Saint-Petersburg, Russia
А сколько должно быть?
ну какой файл ты загружаешь то? чего гадать, должен быть исходный размер чтобы понять на что ориентироваться

не нужно держать его включенным, держать сервер для обновления.
выложить прошивку куда-нибудь на гитхаб откуда его можно просто забрать по хттп намного проще чем найти почтовый сервер с доступом по имап, завести аккаунт и пошарить пароль куда-то там в прошивку. В итоге или ящик забанят или пароль утечёт и его завалят спамом. Так что такой способ прошивки представляет скорее академический интерес как возможность работать с почтой напрямую из МК.
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,969
632
44
Мне наоборот кажется самым оптимальным
Самым оптимальный это взять копеечный хостинг или vps/vds. Ну или на каком нить гитхабе. Можно ещё через Телеграм обновлять, там же можно и удалённое управление сделать и прочие плюшки.
 

юный падаван

✩✩✩✩✩✩✩
13 Дек 2023
7
0
Да, возможно так и прийдётся, немного жаль, хотелось именно такой способ, но что-то он отбирает слишком много ресурсов на разработку. Всем спасибо!