2020-03-01 20:41:16 +03:00
void initUpgrade ( ) {
2020-03-27 15:48:17 +01:00
# ifdef ESP8266
if ( WiFi . status ( ) = = WL_CONNECTED ) last_version = getURL ( " http://91.204.228.124:1100/update/esp8266/version.txt " ) ;
# endif
# ifdef ESP32
if ( WiFi . status ( ) = = WL_CONNECTED ) last_version = getURL ( " http://91.204.228.124:1100/update/esp32/version.txt " ) ;
# endif
jsonWriteStr ( configSetup , " last_version " , last_version ) ;
Serial . print ( " [i] Last firmware version: " ) ;
Serial . println ( last_version ) ;
2020-03-01 20:41:16 +03:00
server . on ( " /upgrade " , HTTP_GET , [ ] ( AsyncWebServerRequest * request ) {
2020-03-22 22:41:52 +01:00
start_check_version = true ;
2020-03-04 00:27:35 +03:00
2020-03-18 09:57:46 +01:00
Serial . print ( " [i] Last firmware version: " ) ;
2020-03-22 22:41:52 +01:00
Serial . println ( last_version ) ;
2020-03-27 15:48:17 +01:00
# ifdef ESP8266
int ChipRealSize = ESP . getFlashChipRealSize ( ) / 1048576 ;
# endif
# ifdef ESP32
int ChipRealSize = 4 ;
# endif
2020-03-04 00:27:35 +03:00
String tmp = " {} " ;
2020-03-24 19:01:11 +01:00
if ( WiFi . status ( ) = = WL_CONNECTED ) {
2020-03-27 15:48:17 +01:00
if ( ChipRealSize > = 4 ) {
2020-03-24 19:01:11 +01:00
if ( last_version ! = " " ) {
if ( last_version ! = " error " ) {
if ( last_version = = firmware_version ) {
2020-03-27 15:48:17 +01:00
jsonWriteStr ( tmp , " title " , " <button class= \" close \" onclick= \" toggle('my-block') \" >× </button>Последняя версия прошивки уже установлена. " ) ;
jsonWriteStr ( tmp , " class " , " pop-up " ) ;
2020-03-24 19:01:11 +01:00
} else {
upgrade_flag = true ;
2020-03-27 15:48:17 +01:00
jsonWriteStr ( tmp , " title " , " <button class= \" close \" onclick= \" toggle('my-block') \" >× </button>Идет обновление прошивки... После завершения устройство перезагрузится. Подождите одну минуту!!! " ) ;
jsonWriteStr ( tmp , " class " , " pop-up " ) ;
2020-03-24 19:01:11 +01:00
}
2020-03-22 22:41:52 +01:00
} else {
2020-03-27 15:48:17 +01:00
jsonWriteStr ( tmp , " title " , " <button class= \" close \" onclick= \" toggle('my-block') \" >× </button>Ошибка... Cе р ве р не найден. Попробуйте позже... " ) ;
jsonWriteStr ( tmp , " class " , " pop-up " ) ;
2020-03-22 22:41:52 +01:00
}
} else {
2020-03-27 15:48:17 +01:00
jsonWriteStr ( tmp , " title " , " <button class= \" close \" onclick= \" toggle('my-block') \" >× </button>Нажмите на кнопку \" обновить прошивку \" повторно... " ) ;
jsonWriteStr ( tmp , " class " , " pop-up " ) ;
2020-03-22 22:41:52 +01:00
}
2020-03-04 00:27:35 +03:00
} else {
2020-03-27 15:48:17 +01:00
jsonWriteStr ( tmp , " title " , " <button class= \" close \" onclick= \" toggle('my-block') \" >× </button>Обновление по воздуху не поддерживается, модуль имеет меньше 4 мб памяти... " ) ;
jsonWriteStr ( tmp , " class " , " pop-up " ) ;
2020-03-04 00:27:35 +03:00
}
} else {
2020-03-27 15:48:17 +01:00
jsonWriteStr ( tmp , " title " , " <button class= \" close \" onclick= \" toggle('my-block') \" >× </button>Устройство не подключен к роутеру... " ) ;
jsonWriteStr ( tmp , " class " , " pop-up " ) ;
2020-03-04 00:27:35 +03:00
}
request - > send ( 200 , " text/text " , tmp ) ;
} ) ;
}
2020-03-22 22:41:52 +01:00
void handle_get_url ( ) {
if ( start_check_version ) {
start_check_version = false ;
# ifdef ESP32
last_version = getURL ( " http://91.204.228.124:1100/update/esp32/version.txt " ) ;
2020-03-27 15:48:17 +01:00
jsonWriteStr ( configSetup , " last_version " , last_version ) ;
2020-03-22 22:41:52 +01:00
# endif
# ifdef ESP8266
last_version = getURL ( " http://91.204.228.124:1100/update/esp8266/version.txt " ) ;
2020-03-27 15:48:17 +01:00
jsonWriteStr ( configSetup , " last_version " , last_version ) ;
2020-03-22 22:41:52 +01:00
# endif
}
}
2020-03-04 00:27:35 +03:00
void upgrade_firmware ( ) {
String scenario_for_update ;
String config_for_update ;
String configSetup_for_update ;
2020-03-30 01:45:42 +02:00
scenario_for_update = readFile ( " firmware.s.txt " , 3072 ) ;
config_for_update = readFile ( " firmware.c.txt " , 3072 ) ;
2020-03-04 00:27:35 +03:00
configSetup_for_update = configSetup ;
Serial . println ( " Start upgrade SPIFFS, please wait... " ) ;
2020-03-16 00:00:59 +01:00
2020-03-04 00:27:35 +03:00
WiFiClient client_for_upgrade ;
# ifdef ESP32
httpUpdate . rebootOnUpdate ( false ) ;
t_httpUpdate_return ret = httpUpdate . updateSpiffs ( client_for_upgrade , " http://91.204.228.124:1100/update/esp32/esp32-esp8266_iot-manager_modules_firmware.spiffs.bin " ) ;
# endif
# ifdef ESP8266
ESPhttpUpdate . rebootOnUpdate ( false ) ;
t_httpUpdate_return ret = ESPhttpUpdate . updateSpiffs ( client_for_upgrade , " http://91.204.228.124:1100/update/esp8266/esp32-esp8266_iot-manager_modules_firmware.spiffs.bin " ) ;
# endif
if ( ret = = HTTP_UPDATE_OK ) {
2020-03-30 01:45:42 +02:00
writeFile ( " firmware.s.txt " , scenario_for_update ) ;
writeFile ( " firmware.c.txt " , config_for_update ) ;
2020-03-04 00:27:35 +03:00
writeFile ( " config.json " , configSetup_for_update ) ;
saveConfig ( ) ;
Serial . println ( " SPIFFS upgrade done! " ) ;
Serial . println ( " Start upgrade BUILD, please wait... " ) ;
# ifdef ESP32
2020-03-16 00:00:59 +01:00
//httpUpdate.rebootOnUpdate(true);
2020-03-04 00:27:35 +03:00
t_httpUpdate_return ret = httpUpdate . update ( client_for_upgrade , " http://91.204.228.124:1100/update/esp32/esp32-esp8266_iot-manager_modules_firmware.ino.bin " ) ;
# endif
# ifdef ESP8266
2020-03-16 00:00:59 +01:00
//ESPhttpUpdate.rebootOnUpdate(true);
2020-03-04 00:27:35 +03:00
t_httpUpdate_return ret = ESPhttpUpdate . update ( client_for_upgrade , " http://91.204.228.124:1100/update/esp8266/esp32-esp8266_iot-manager_modules_firmware.ino.bin " ) ;
# endif
2020-03-16 00:00:59 +01:00
if ( ret = = HTTP_UPDATE_OK ) {
Serial . println ( " BUILD upgrade done! " ) ;
Serial . println ( " Restart ESP.... " ) ;
ESP . restart ( ) ;
}
2020-03-04 00:27:35 +03:00
}
}
void handle_upgrade ( ) {
if ( upgrade_flag ) {
upgrade_flag = false ;
2020-03-04 01:56:24 +03:00
upgrade_firmware ( ) ;
2020-03-04 00:27:35 +03:00
}
}
/*
void upgrade_status ( t_httpUpdate_return set ) {
switch ( set ) {
case HTTP_UPDATE_FAILED :
Serial . printf ( " UPDATE_FAILED Error (%d): %s " , httpUpdate . getLastError ( ) , httpUpdate . getLastErrorString ( ) . c_str ( ) ) ;
break ;
case HTTP_UPDATE_NO_UPDATES :
Serial . println ( " NO_UPDATES " ) ;
break ;
case HTTP_UPDATE_OK :
Serial . println ( " HTTP_UPDATE_OK " ) ;
break ;
}
}
*/
2020-03-01 20:41:16 +03:00
/*
// ----------------------- Обновление с сайта
void webUpgrade ( ) {
# ifdef ESP8266
String spiffsData = " http://91.204.228.124:1100/update/esp8266/esp32-esp8266_iot-manager_modules_firmware.spiffs.bin " ;
String buildData = " http://91.204.228.124:1100/update/esp8266/esp32-esp8266_iot-manager_modules_firmware.ino.bin " ;
# endif
# ifdef ESP32
String spiffsData = " http://91.204.228.124:1100/update/esp32/esp32-esp8266_iot-manager_modules_firmware.spiffs.bin " ;
String buildData = " http://91.204.228.124:1100/update/esp32/esp32-esp8266_iot-manager_modules_firmware.ino.bin " ;
# endif
if ( spiffsData ! = " " ) { // Если нужно прошить FS
String scenario_for_update ;
String config_for_update ;
String configSetup_for_update ;
Serial . println ( spiffsData ) ;
2020-03-30 01:45:42 +02:00
scenario_for_update = readFile ( " firmware.s.txt " , 2048 ) ;
2020-03-01 20:41:16 +03:00
config_for_update = readFile ( " config.all.txt " , 2048 ) ;
configSetup_for_update = configSetup ;
ESPhttpUpdate . rebootOnUpdate ( false ) ; // Отключим перезагрузку после обновления
updateHTTP ( spiffsData , true ) ;
2020-03-30 01:45:42 +02:00
writeFile ( " firmware.s.txt " , scenario_for_update ) ;
2020-03-01 20:41:16 +03:00
writeFile ( " config.all.txt " , config_for_update ) ;
writeFile ( " config.json " , configSetup_for_update ) ;
saveConfig ( ) ;
}
if ( buildData ! = " " ) { // Если нужно прошить build
Serial . println ( buildData ) ;
ESPhttpUpdate . rebootOnUpdate ( true ) ; // Включим перезагрузку после обновления
updateHTTP ( buildData , false ) ;
}
}
// ------------------ Обновление по url
void updateHTTP ( String url , boolean mode ) {
if ( url = = " " ) return ;
ESPhttpUpdate . setLedPin ( LED_BUILTIN , LOW ) ;
if ( mode ) {
Serial . println ( " Update Spiffs... " ) ;
t_httpUpdate_return ret = ESPhttpUpdate . updateSpiffs ( url ) ;
UpdateStatus ( ret , " Spiffs " ) ;
} else {
Serial . println ( " Update Build... " ) ;
t_httpUpdate_return ret = ESPhttpUpdate . update ( url ) ;
UpdateStatus ( ret , " build " ) ;
}
}
void UpdateStatus ( t_httpUpdate_return set , String mode ) {
switch ( set ) {
case HTTP_UPDATE_FAILED :
Serial . println ( mode + " _FAILED " ) ;
var = " {} " ;
2020-03-27 15:48:17 +01:00
jsonWriteStr ( var , " title " , " <button class= \" close \" onclick= \" toggle('my-block') \" >× </button>_FAILED " ) ;
jsonWriteStr ( var , " class " , " pop-up " ) ;
2020-03-01 20:41:16 +03:00
//request->send(200, "text/text", var);
break ;
case HTTP_UPDATE_NO_UPDATES :
Serial . println ( mode + " _NO_UPDATES " ) ;
var = " {} " ;
2020-03-27 15:48:17 +01:00
jsonWriteStr ( var , " title " , " <button class= \" close \" onclick= \" toggle('my-block') \" >× </button>_NO_UPDATES " ) ;
jsonWriteStr ( var , " class " , " pop-up " ) ;
2020-03-01 20:41:16 +03:00
//request->send(200, "text/text", var);
break ;
case HTTP_UPDATE_OK :
Serial . println ( mode + " _UPDATE_OK " ) ;
var = " {} " ;
2020-03-27 15:48:17 +01:00
jsonWriteStr ( var , " title " , " <button class= \" close \" onclick= \" toggle('my-block') \" >× </button>_UPDATE_OK " ) ;
jsonWriteStr ( var , " class " , " pop-up " ) ;
2020-03-01 20:41:16 +03:00
//request->send(200, "text/text", var);
break ;
}
}
*/