OTADrive сервер и его аналоги (обновление firmware по воздуху)...

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

Всем доброго дня, дорогие форумчане!

Озадачился я на досуге удаленным обновлением прошивок на ESP32, для новых устройств.

Наткнулся на условно бесплатный OTADrive, попробовал. Продукт понравился, и библиотека тебе готовая и UI через цуи-морду все хорошо, НО:

1. Долго ли они проживут.
2. Тариф дороговат.
3. Надо запустить свой сервис, из-за первых 2-х опасений.
4. Писать свое долго...

Может кто знает существуют ли бесплатные аналоги на GitHub (и др.) простеньких серверов OTA с похожим принципом построения? Девайсов может быть и больше 30 будет, а платить 99$ не с чего :-)

Исхожу из потребностей:

1. Загрузка и управлением прошивками через веб-морду.
2. Готовая библиотека для Arduino или PlatformIO.
3. Желательно индикация процесса загрузки прошивки.
4. Не ограниченное число девайсов.

P.S. Заранее спасибо, что читаете мой вопрос. Но отвечать не нужно если не знаете :-)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

подпишусь

SAB
Offline
Зарегистрирован: 27.12.2016
const char* serverIndex = 
"<script src='https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js'></script>"
"<form method='POST' action='#' enctype='multipart/form-data' id='upload_form'>"
   "<input type='file' name='update'>"
        "<input type='submit' value='Update'>"
    "</form>"
 "<div id='prg'>progress: 0%</div>"
 "<script>"
  "$('form').submit(function(e){"
  "e.preventDefault();"
  "var form = $('#upload_form')[0];"
  "var data = new FormData(form);"
  " $.ajax({"
  "url: '/update',"
  "type: 'POST',"
  "data: data,"
  "contentType: false,"
  "processData:false,"
  "xhr: function() {"
  "var xhr = new window.XMLHttpRequest();"
  "xhr.upload.addEventListener('progress', function(evt) {"
  "if (evt.lengthComputable) {"
  "var per = evt.loaded / evt.total;"
  "$('#prg').html('progress: ' + Math.round(per*100) + '%');"
  "}"
  "}, false);"
  "return xhr;"
  "},"
  "success:function(d, s) {"
  "console.log('success!')"
 "},"
 "error: function (a, b, c) {"
 "}"
 "});"
 "});"
 "</script>";

 

void loop(void) {
  server.handleClient();
  delay(1);
}

Вот бесплатное обновление прошивки по воздуху. Показывает проценты загрузки. После загрузки перезагружает ESP32

rkit
Offline
Зарегистрирован: 23.11.2016

В esp-idf есть готовое обновление по http с сервера. Соответственно остается выложить прошивку на сервер и реализовать механизм сигнализации об обновлении, который и так должен быть, если это какая-то реальная сеть. Всё пишется дня за 3.

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

rkit пишет:

В esp-idf есть готовое обновление по http с сервера. Соответственно остается выложить прошивку на сервер и реализовать механизм сигнализации об обновлении, который и так должен быть, если это какая-то реальная сеть. Всё пишется дня за 3.

Все эти решения "одноразовые" и не очень удобны в эксплуатации.

Представьте что у вас 20-40 разнотипных устройств. Да можно писать свое но это долго...

А в сегодняшней ситуации еще и огромный риск блокировки ресурса возникает. ArubaCloud нихрена нормально не работает уже, почти с самого начла событий, пришлось перелезть в РФ. А они почти сразу тарифы на VPS подняли...

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

AlexArGC пишет:

Обновление через WiFi у меня реализовано. Но дл пользователя это целое приключение обновить прошивку по WiFi.

Обновление через WiFi у меня реализовано, очень даже "симпатишно" AsyncElegantOTA... Но для пользователя это целое приключение обновить прошивку по WiFi.

SAB
Offline
Зарегистрирован: 27.12.2016

Вообще ни каких проблем для пользователя нет с обновлением прошивки через WiFi. Заходит на веб станицу, выбирает файл на диске , жмёт обновить. У меня бабушки старушки это делают.

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

SAB пишет:

Вообще ни каких проблем для пользователя нет с обновлением прошивки через WiFi. Заходит на веб станицу, выбирает файл на диске , жмёт обновить. У меня бабушки старушки это делают.

Даже не убеждайте меня, я консультирую таких пользователей.

:-)))))))))))))))))))))))))) Это для Вас нет никаких проблем. Прежде чем зайти ему надо настроить wifi, чтобы подключится к точке доступа ESP открыть страницу с определенным адресом. А дальше все просто.

sadman41
Offline
Зарегистрирован: 19.10.2016

На перепрошивку можно поднимать Open AP. Определённым программным способом сразу загонять юзера на страничку.
Я не навязываю, но процесс упростить можно, если припрет.

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

sadman41 пишет:
На перепрошивку можно поднимать Open AP. Определённым программным способом сразу загонять юзера на страничку. Я не навязываю, но процесс упростить можно, если припрет.

Научите загонять на страничку?

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

Вот есть довольно живой проект по OTA чрез Интернет https://github.com/chrisjoyce911/esp32FOTA

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

Как это работает:
Эта библиотека пытается получить доступ к файлу JSON, размещенному на веб-сервере, и проверяет его, чтобы решить, была ли опубликована более новая прошивка, и если да, она загрузит и установит ее.
Есть несколько вещей, которые должны быть на месте, чтобы обновление работало.
Веб-сервер с информацией о прошивке в файле JSON
Версия прошивки
Тип прошивки
Корзина с прошивкой
Для https или проверки подписи: SPIFFS с root_ca.pem (https) и rsa_key.pem (проверка подписи)
Вы можете указать URL-адреса http или https для checkURL. Если вы используете https, вам нужен файл root_ca.pem в разделе SPIFFS. Для фактической прошивки он будет использовать https, когда вы определяете порт 443 или 4433. В противном случае он будет использовать обычный http.

 

rkit
Offline
Зарегистрирован: 23.11.2016

AlexArGC пишет:

Все эти решения "одноразовые" и не очень удобны в эксплуатации.

Представьте что у вас 20-40 разнотипных устройств. Да можно писать свое но это долго...

 

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

AlexArGC пишет:

А в сегодняшней ситуации еще и огромный риск блокировки ресурса возникает.

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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

rkit пишет:

 и можешь сделать решение какой угодно степени устойчивости к атакам.

с этого момента поподробнее и желательно с примерами...

rkit
Offline
Зарегистрирован: 23.11.2016

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

vrd
Offline
Зарегистрирован: 20.01.2022

А чем гитхаб не http сервер?

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

vrd пишет:
А чем гитхаб не http сервер?

Еще какой сервер! Только опять таки в больших рисках блокировки на территории РФ. Придется заложить возможность поддержания ещё и заграничного ресурса :-(

sadman41
Offline
Зарегистрирован: 19.10.2016

AlexArGC пишет:

sadman41 пишет:
На перепрошивку можно поднимать Open AP. Определённым программным способом сразу загонять юзера на страничку. Я не навязываю, но процесс упростить можно, если припрет.

Научите загонять на страничку?

Ключевая фраза: "ESP8266 Captive Portal"

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

sadman41 пишет:

Ключевая фраза: "ESP8266 Captive Portal"

Оно? https://github.com/125K/ESP8266-Captive-Portal/blob/master/WiFi_Captive_Portal.ino

sadman41
Offline
Зарегистрирован: 19.10.2016

Да, похоже. Много лишнего, конечно. При самопальной реализации всё хорошо подчищается, остается десяток строк.

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

sadman41 пишет:

Да, похоже. Много лишнего, конечно. При самопальной реализации всё хорошо подчищается, остается десяток строк.

Спасибо за подсказку, будет маленькая "фишечка"... Но основная тема все равно остается актуальной. OTA Drive повысили тариф и во "фримоде" сделали из 30 всего 10 устройств.