diff --git a/tasmota/language/bg_BG.h b/tasmota/language/bg_BG.h
index 7c80a6cf6..ec637b220 100644
--- a/tasmota/language/bg_BG.h
+++ b/tasmota/language/bg_BG.h
@@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Зареждането започна"
#define D_UPGRADE_STARTED "Обновяването започна"
#define D_UPLOAD_DONE "Зареждането завърши"
+#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Не е избран файл"
#define D_UPLOAD_ERR_2 "Недостатъчно свободно място"
diff --git a/tasmota/language/cs_CZ.h b/tasmota/language/cs_CZ.h
index 3aca1ffda..1d591b610 100644
--- a/tasmota/language/cs_CZ.h
+++ b/tasmota/language/cs_CZ.h
@@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Nahrávání zahájeno"
#define D_UPGRADE_STARTED "Zahájení aktualizace"
#define D_UPLOAD_DONE "Nahrávání ukončeno"
+#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Soubor nebyl vybrán"
#define D_UPLOAD_ERR_2 "Málo místa"
diff --git a/tasmota/language/de_DE.h b/tasmota/language/de_DE.h
index 77fbfa5e9..643110761 100644
--- a/tasmota/language/de_DE.h
+++ b/tasmota/language/de_DE.h
@@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Upload gestartet"
#define D_UPGRADE_STARTED "Update gestartet"
#define D_UPLOAD_DONE "Upload abgeschlossen"
+#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Keine Datei ausgewählt"
#define D_UPLOAD_ERR_2 "Ungenügend Speicherplatz"
diff --git a/tasmota/language/el_GR.h b/tasmota/language/el_GR.h
index a374cc116..8e3653957 100644
--- a/tasmota/language/el_GR.h
+++ b/tasmota/language/el_GR.h
@@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Η μεταφόρτωση ξεκίνησε"
#define D_UPGRADE_STARTED "Η αναβάθμιση ξεκίνησε"
#define D_UPLOAD_DONE "Η μεταφόρτωση ολοκληρώθηκε"
+#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Δεν έχει επιλεγεί αρχείο"
#define D_UPLOAD_ERR_2 "Δεν υπάρχει επαρκής χώρος"
diff --git a/tasmota/language/en_GB.h b/tasmota/language/en_GB.h
index e091d2ad1..c077dcb81 100644
--- a/tasmota/language/en_GB.h
+++ b/tasmota/language/en_GB.h
@@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Upload started"
#define D_UPGRADE_STARTED "Upgrade started"
#define D_UPLOAD_DONE "Upload done"
+#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "No file selected"
#define D_UPLOAD_ERR_2 "Not enough space"
diff --git a/tasmota/language/es_ES.h b/tasmota/language/es_ES.h
index 0fa3221ba..f68572eab 100644
--- a/tasmota/language/es_ES.h
+++ b/tasmota/language/es_ES.h
@@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Cargando archivo"
#define D_UPGRADE_STARTED "Actualización iniciada"
#define D_UPLOAD_DONE "Carga finalizada"
+#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Ningún archivo seleccionado"
#define D_UPLOAD_ERR_2 "Espacio insuficiente"
diff --git a/tasmota/language/fr_FR.h b/tasmota/language/fr_FR.h
index 5be788868..434dd07b8 100644
--- a/tasmota/language/fr_FR.h
+++ b/tasmota/language/fr_FR.h
@@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Téléchargement lancé"
#define D_UPGRADE_STARTED "Mise à jour lancée"
#define D_UPLOAD_DONE "Téléchargement terminé"
+#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Aucun fichier sélectionné"
#define D_UPLOAD_ERR_2 "Espace insuffisant"
diff --git a/tasmota/language/he_HE.h b/tasmota/language/he_HE.h
index a673cacc0..dd0f2fbee 100644
--- a/tasmota/language/he_HE.h
+++ b/tasmota/language/he_HE.h
@@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "העלאה מתחילה"
#define D_UPGRADE_STARTED "שדרוג מתחיל"
#define D_UPLOAD_DONE "העלאה הסתיימה"
+#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "לא נבחר קובץ"
#define D_UPLOAD_ERR_2 "אין מספיק מקום"
diff --git a/tasmota/language/hu_HU.h b/tasmota/language/hu_HU.h
index 69c467ef9..79d7c40aa 100644
--- a/tasmota/language/hu_HU.h
+++ b/tasmota/language/hu_HU.h
@@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Feltöltés elindítva"
#define D_UPGRADE_STARTED "Frissítés elindítva"
#define D_UPLOAD_DONE "Feltöltés kész"
+#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Nincs fájl kijelölve"
#define D_UPLOAD_ERR_2 "Nincs elég memória"
diff --git a/tasmota/language/it_IT.h b/tasmota/language/it_IT.h
index fc18d3d30..34f5a1696 100644
--- a/tasmota/language/it_IT.h
+++ b/tasmota/language/it_IT.h
@@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Caricamento..."
#define D_UPGRADE_STARTED "Aggiornamento..."
#define D_UPLOAD_DONE "Caricamento completato"
+#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Nessun file selezionato"
#define D_UPLOAD_ERR_2 "Spazio insufficiente"
diff --git a/tasmota/language/ko_KO.h b/tasmota/language/ko_KO.h
index a1f0f2972..ef1f781b2 100644
--- a/tasmota/language/ko_KO.h
+++ b/tasmota/language/ko_KO.h
@@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "업로드 시작됨"
#define D_UPGRADE_STARTED "업그레이드 시작됨"
#define D_UPLOAD_DONE "업그레이드 완료"
+#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "파일이 선택되지 않았습니다"
#define D_UPLOAD_ERR_2 "용량이 충분하지 않습니다"
diff --git a/tasmota/language/nl_NL.h b/tasmota/language/nl_NL.h
index edd09b795..a3a5821fd 100644
--- a/tasmota/language/nl_NL.h
+++ b/tasmota/language/nl_NL.h
@@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Verzending gestart"
#define D_UPGRADE_STARTED "Opwaarderen gestart"
#define D_UPLOAD_DONE "Opwaarderen klaar"
+#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Geen bestand gekozen"
#define D_UPLOAD_ERR_2 "Onvoldoende geheugen ruimte"
diff --git a/tasmota/language/pl_PL.h b/tasmota/language/pl_PL.h
index b0f0962fe..929774738 100644
--- a/tasmota/language/pl_PL.h
+++ b/tasmota/language/pl_PL.h
@@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Wgrywanie rozpoczęte"
#define D_UPGRADE_STARTED "Aktualizacja rozpoczęta"
#define D_UPLOAD_DONE "Wgrywanie zakończone"
+#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Nie wybrano pliku"
#define D_UPLOAD_ERR_2 "Niewystarczająca ilość miejsca"
diff --git a/tasmota/language/pt_BR.h b/tasmota/language/pt_BR.h
index 2af91db6e..990b308cb 100644
--- a/tasmota/language/pt_BR.h
+++ b/tasmota/language/pt_BR.h
@@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Início do envio"
#define D_UPGRADE_STARTED "Atualização iniciada"
#define D_UPLOAD_DONE "Atualização finalizada"
+#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Nenhum arquivo selecionado"
#define D_UPLOAD_ERR_2 "Não existe memória disponível"
diff --git a/tasmota/language/pt_PT.h b/tasmota/language/pt_PT.h
index da6f46758..a976811c3 100644
--- a/tasmota/language/pt_PT.h
+++ b/tasmota/language/pt_PT.h
@@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Envio Iniciado"
#define D_UPGRADE_STARTED "Atualização Iniciada"
#define D_UPLOAD_DONE "Atualização Finalizada"
+#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Nenhum ficheiro selecionado"
#define D_UPLOAD_ERR_2 "Não existe espaço disponível"
diff --git a/tasmota/language/ro_RO.h b/tasmota/language/ro_RO.h
index a6d66722f..c4cba2ee3 100644
--- a/tasmota/language/ro_RO.h
+++ b/tasmota/language/ro_RO.h
@@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Încărcare începută"
#define D_UPGRADE_STARTED "Actualizare începută"
#define D_UPLOAD_DONE "Încărcare terminată"
+#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Nici un fișier selectat"
#define D_UPLOAD_ERR_2 "Spațiu insuficient"
diff --git a/tasmota/language/ru_RU.h b/tasmota/language/ru_RU.h
index 921398a2d..f9e576f70 100644
--- a/tasmota/language/ru_RU.h
+++ b/tasmota/language/ru_RU.h
@@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Загрузка началась"
#define D_UPGRADE_STARTED "Обновление началось"
#define D_UPLOAD_DONE "Загрузка завершена"
+#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Файл не выбран"
#define D_UPLOAD_ERR_2 "Недостаточно места"
diff --git a/tasmota/language/sk_SK.h b/tasmota/language/sk_SK.h
index b418924d5..072caa53d 100644
--- a/tasmota/language/sk_SK.h
+++ b/tasmota/language/sk_SK.h
@@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Nahrávanie spustené"
#define D_UPGRADE_STARTED "Aktualizácia spustená"
#define D_UPLOAD_DONE "Nahrávanie ukončené"
+#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Súbor nebol vybraný"
#define D_UPLOAD_ERR_2 "Málo miesta"
diff --git a/tasmota/language/sv_SE.h b/tasmota/language/sv_SE.h
index 352c8b82d..1ba0b0b7e 100644
--- a/tasmota/language/sv_SE.h
+++ b/tasmota/language/sv_SE.h
@@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Uppladdning startad"
#define D_UPGRADE_STARTED "Uppgradeing startad"
#define D_UPLOAD_DONE "Uppladdning klar"
+#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Ingen fil vald"
#define D_UPLOAD_ERR_2 "Inte tillräckligt med ledigt utrymme"
diff --git a/tasmota/language/tr_TR.h b/tasmota/language/tr_TR.h
index e5a34fdcd..928ad30b6 100644
--- a/tasmota/language/tr_TR.h
+++ b/tasmota/language/tr_TR.h
@@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Yükleme başlatıldı"
#define D_UPGRADE_STARTED "YÜkestlme başlatıldı"
#define D_UPLOAD_DONE "Yükleme Tamamlandı"
+#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Dosya seçilmedi"
#define D_UPLOAD_ERR_2 "Boş yer yok"
diff --git a/tasmota/language/uk_UA.h b/tasmota/language/uk_UA.h
index 001e6692c..8ce7ee877 100644
--- a/tasmota/language/uk_UA.h
+++ b/tasmota/language/uk_UA.h
@@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Завантаження почалось"
#define D_UPGRADE_STARTED "Оновлення почалось"
#define D_UPLOAD_DONE "Завантаження завершено"
+#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Файл не вибраний"
#define D_UPLOAD_ERR_2 "Недостатньо місця"
diff --git a/tasmota/language/zh_CN.h b/tasmota/language/zh_CN.h
index 9dbe6728b..b1b58b4c4 100644
--- a/tasmota/language/zh_CN.h
+++ b/tasmota/language/zh_CN.h
@@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "开始上传"
#define D_UPGRADE_STARTED "开始升级"
#define D_UPLOAD_DONE "上传完成"
+#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "没有选择任何文件"
#define D_UPLOAD_ERR_2 "没有足够空间"
diff --git a/tasmota/language/zh_TW.h b/tasmota/language/zh_TW.h
index c3ecf4027..fc9606a90 100644
--- a/tasmota/language/zh_TW.h
+++ b/tasmota/language/zh_TW.h
@@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "已開始上傳"
#define D_UPGRADE_STARTED "已開始升級"
#define D_UPLOAD_DONE "已上傳完成"
+#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "沒選擇任何檔案"
#define D_UPLOAD_ERR_2 "可用空間不足"
diff --git a/tasmota/xdrv_01_webserver.ino b/tasmota/xdrv_01_webserver.ino
index 615317337..72876ecf2 100644
--- a/tasmota/xdrv_01_webserver.ino
+++ b/tasmota/xdrv_01_webserver.ino
@@ -637,12 +637,12 @@ const char HTTP_HEAD_STYLE_ZIGBEE_COMPRESSED[] PROGMEM = "\x3A\x0E\xA3\xDA\x3B\x
"\x33\x90\x81\x0F\x5F\x04\x2D\x53\xFA\x3C\x2A\x2B\x8F\x33\xAC\xE6\x10\x22\x70\x54"
"\x08\xFC\x0C\x82\x0F\x0A\x67\x30\x81\x23\x81\x23\xDA\x08\x34\x4C\xEF\xE7\x74\xEB"
"\x3A\xC7\x04\x75\x1C\x98\x43\x0D\x87\x78\xF0\x13\x31\x47\x99\xC8\x43\x0D\x87\xB8";
-
+
// Raw: .bt{box-sizing:border-box;position:relative;display:inline-block;width:20px;height:12px;border:2px solid;border-radius:3px;margin-left:-3px}.bt::after,.bt::before{content:"";display:block;box-sizing:border-box;position:absolute;height:6px;background:currentColor;top:1px}.bt::before{right:-4px;border-radius:3px;width:4px}.bt::after{width:var(--bl,14px);left:1px}
// Successfully compressed from 363 to 240 bytes (-33.9%)
#define HTTP_HEAD_STYLE_ZIGBEE Decompress(HTTP_HEAD_STYLE_ZIGBEE_COMPRESSED,HTTP_HEAD_STYLE_ZIGBEE_SIZE).c_str()
#else // USE_UNISHOX_COMPRESSION
-const char HTTP_HEAD_STYLE_ZIGBEE[] PROGMEM =
+const char HTTP_HEAD_STYLE_ZIGBEE[] PROGMEM =
".bt{box-sizing:border-box;position:relative;display:inline-block;width:20px;height:12px;border:2px solid;border-radius:3px;margin-left:-3px}"
".bt::after,.bt::before{content:\"\";display:block;box-sizing:border-box;position:absolute;height:6px;background:currentColor;top:1px}"
".bt::before{right:-4px;border-radius:3px;width:4px}"
@@ -869,6 +869,7 @@ void StartWebserver(int type, IPAddress ipweb)
Webserver->on("/u1", HandleUpgradeFirmwareStart); // OTA
Webserver->on("/u2", HTTP_POST, HandleUploadDone, HandleUploadLoop);
Webserver->on("/u2", HTTP_OPTIONS, HandlePreflightRequest);
+ Webserver->on("/u3", HandleUploadDone);
Webserver->on("/cs", HTTP_GET, HandleConsole);
Webserver->on("/cs", HTTP_OPTIONS, HandlePreflightRequest);
Webserver->on("/cm", HandleHttpCommand);
@@ -2624,6 +2625,16 @@ void HandleUploadDone(void)
{
if (!HttpCheckPriviledgedAccess()) { return; }
+#if defined(USE_ZIGBEE) && defined(USE_ZIGBEE_EZSP)
+ if (!Web.upload_error) {
+ // GUI xmodem
+ if (ZigbeeUploadOtaReady()) {
+ HandleZigbeeXfer();
+ return;
+ }
+ }
+#endif
+
AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_HTTP D_UPLOAD_DONE));
char error[100];
@@ -2639,8 +2650,8 @@ void HandleUploadDone(void)
if (!Web.upload_error) {
uint32_t javascript_settimeout = HTTP_OTA_RESTART_RECONNECT_TIME;
#if defined(USE_ZIGBEE) && defined(USE_ZIGBEE_EZSP)
- if (ZigbeeUploadOtaReady()) {
- javascript_settimeout = 30000; // Refesh main web ui after transfer upgrade
+ if (ZigbeeUploadFinish()) {
+ javascript_settimeout = 10000; // Refesh main web ui after transfer upgrade
}
#endif
WSContentSend_P(HTTP_SCRIPT_RELOAD_TIME, javascript_settimeout); // Refesh main web ui after OTA upgrade
@@ -2665,15 +2676,9 @@ void HandleUploadDone(void)
} else {
WSContentSend_P(PSTR("%06x'>" D_SUCCESSFUL "
"), WebColor(COL_TEXT_SUCCESS));
restart_flag = 2; // Always restart to re-enable disabled features during update
-#if defined(USE_ZIGBEE) && defined(USE_ZIGBEE_EZSP)
- if (ZigbeeUploadOtaReady()) {
- WSContentSend_P(PSTR("