From e8241e580b3bc10a9a6c1f13f96806457d39d7d8 Mon Sep 17 00:00:00 2001 From: proddy Date: Sat, 4 May 2024 14:15:32 +0200 Subject: [PATCH 01/11] package update --- interface/package.json | 4 ++-- interface/yarn.lock | 22 +++++++++++----------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/interface/package.json b/interface/package.json index 2d83f3420..9ff23469e 100644 --- a/interface/package.json +++ b/interface/package.json @@ -50,12 +50,12 @@ "typescript": "^5.4.5" }, "devDependencies": { - "@eslint/js": "^9.1.1", + "@eslint/js": "^9.2.0", "@preact/compat": "^17.1.2", "@preact/preset-vite": "^2.8.2", "@trivago/prettier-plugin-sort-imports": "^4.3.0", "concurrently": "^8.2.2", - "eslint": "^9.1.1", + "eslint": "^9.2.0", "eslint-config-prettier": "^9.1.0", "preact": "^10.21.0", "prettier": "^3.2.5", diff --git a/interface/yarn.lock b/interface/yarn.lock index 407dcaf0b..0303cd652 100644 --- a/interface/yarn.lock +++ b/interface/yarn.lock @@ -705,10 +705,10 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:9.1.1, @eslint/js@npm:^9.1.1": - version: 9.1.1 - resolution: "@eslint/js@npm:9.1.1" - checksum: 10c0/b25d11736b91d8df44dd217e88adb1f43d2bd5911ef4f4033e51faffe370f28d329731ffbf841d0b8303c8eedb60bda8c3a9efe803bb3b3737a06bb22c09ad0c +"@eslint/js@npm:9.2.0, @eslint/js@npm:^9.2.0": + version: 9.2.0 + resolution: "@eslint/js@npm:9.2.0" + checksum: 10c0/89632466d329d9dd68c6ec24290e407f0950ca8c4b7f3750b82457daa7f6233799ccbc956cd84231f9544efbefddd69833ee82658883ca673cfca9e4b8e0713a languageName: node linkType: hard @@ -1707,7 +1707,7 @@ __metadata: "@alova/scene-react": "npm:^1.5.0" "@emotion/react": "npm:^11.11.4" "@emotion/styled": "npm:^11.11.5" - "@eslint/js": "npm:^9.1.1" + "@eslint/js": "npm:^9.2.0" "@mui/icons-material": "npm:^5.15.16" "@mui/material": "npm:^5.15.16" "@preact/compat": "npm:^17.1.2" @@ -1722,7 +1722,7 @@ __metadata: alova: "npm:^2.20.3" async-validator: "npm:^4.2.5" concurrently: "npm:^8.2.2" - eslint: "npm:^9.1.1" + eslint: "npm:^9.2.0" eslint-config-prettier: "npm:^9.1.0" history: "npm:^5.3.0" jwt-decode: "npm:^4.0.0" @@ -3209,14 +3209,14 @@ __metadata: languageName: node linkType: hard -"eslint@npm:^9.1.1": - version: 9.1.1 - resolution: "eslint@npm:9.1.1" +"eslint@npm:^9.2.0": + version: 9.2.0 + resolution: "eslint@npm:9.2.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.2.0" "@eslint-community/regexpp": "npm:^4.6.1" "@eslint/eslintrc": "npm:^3.0.2" - "@eslint/js": "npm:9.1.1" + "@eslint/js": "npm:9.2.0" "@humanwhocodes/config-array": "npm:^0.13.0" "@humanwhocodes/module-importer": "npm:^1.0.1" "@humanwhocodes/retry": "npm:^0.2.3" @@ -3249,7 +3249,7 @@ __metadata: text-table: "npm:^0.2.0" bin: eslint: bin/eslint.js - checksum: 10c0/0173fbc561d2272802315726283f63df0cf7197949ca1f80afd8ef92e95867677d54601ff6cad5467c44745160ba0f9cef7ac1154ccbd097d0269a4c6eb21041 + checksum: 10c0/eab3265100a359a486e40e1d9d4d3ecff936d2f4d952f4ab107d404e0684fffbe186ecd0fb41791af5bcb13570a27032ddf9a2e628927ed33473f64255b0037b languageName: node linkType: hard From 71eea5abb39e35546d9947909125d6bc11e850c6 Mon Sep 17 00:00:00 2001 From: proddy Date: Sat, 4 May 2024 14:15:48 +0200 Subject: [PATCH 02/11] add comment to source of library --- lib/ESPAsyncWebServer/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/ESPAsyncWebServer/README.md b/lib/ESPAsyncWebServer/README.md index 8b213e81d..8038a041d 100644 --- a/lib/ESPAsyncWebServer/README.md +++ b/lib/ESPAsyncWebServer/README.md @@ -6,7 +6,9 @@ Async Web Server for ESP31B -This fork is based on https://github.com/yubox-node-org/ESPAsyncWebServer and includes all the concurrency fixes. +This is using + +This fork is based on and includes all the concurrency fixes. ## Changes From 5af16b7b7e3c3cf2ce70f8b78137405fd1375c51 Mon Sep 17 00:00:00 2001 From: proddy Date: Sat, 4 May 2024 14:16:04 +0200 Subject: [PATCH 03/11] formatting --- mock-api/upload_server.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/mock-api/upload_server.ts b/mock-api/upload_server.ts index 6bfd9c577..8893f2912 100644 --- a/mock-api/upload_server.ts +++ b/mock-api/upload_server.ts @@ -9,10 +9,8 @@ const UPLOAD_FILE_ENDPOINT = '/rest/uploadFile'; // delay functions, 2 different types const delay = (ms) => new Promise((res) => setTimeout(res, ms)); - function delay_blocking(milliseconds) { var start = new Date().getTime(); - // for (var i = 0; i < 1e7; i++) { while (true) { if (new Date().getTime() - start > milliseconds) { break; @@ -20,7 +18,7 @@ function delay_blocking(milliseconds) { } } -function progress_middleware(req, res, next) { +function progress_middleware(req, _res, next) { let progress = 0; const file_size = req.headers['content-length']; console.log('Uploading file. Size ' + file_size + ' bytes'); From a58706ef4166f6d21d0b42e323ef144b8f30a5fa Mon Sep 17 00:00:00 2001 From: proddy Date: Sat, 4 May 2024 14:16:16 +0200 Subject: [PATCH 04/11] formatting --- scripts/build_interface.py | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/build_interface.py b/scripts/build_interface.py index eb9f991fc..229b54c3b 100755 --- a/scripts/build_interface.py +++ b/scripts/build_interface.py @@ -3,7 +3,6 @@ import os Import("env") - def buildWeb(): os.chdir("interface") print("Building web interface...") From f14523d7aa256067e2f85d60007266a2fb6c5211 Mon Sep 17 00:00:00 2001 From: proddy Date: Sat, 4 May 2024 14:16:53 +0200 Subject: [PATCH 05/11] add python venv --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 6ace7c70c..81f72621f 100644 --- a/.gitignore +++ b/.gitignore @@ -64,3 +64,6 @@ bw-output/ # standalone executable for testing emsesp interface/tsconfig.tsbuildinfo + +# python virtual environment +venv/ From a2e2cf7f75584174f434c0991551d863e0e987fd Mon Sep 17 00:00:00 2001 From: proddy Date: Sat, 4 May 2024 14:17:16 +0200 Subject: [PATCH 06/11] add test for signin --- test/api_test.http | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/test/api_test.http b/test/api_test.http index 5be20b0b4..04d447f88 100755 --- a/test/api_test.http +++ b/test/api_test.http @@ -4,7 +4,7 @@ # The response will be shown in the right panel @host = http://ems-esp.local -@host_dev = http://10.10.10.20 +@host_dev = http://10.10.10.173 @host_standalone = http://localhost:3080 @host_standalone2 = http://localhost:3082 @@ -109,6 +109,14 @@ Authorization: Bearer {{token}} ### GET {{host_dev}}/api/thermostat/seltemp +### +POST {{host_dev}}/rest/signIn +Content-Type: application/json + +{ + "username" : "admin", + "password" : "admin" +} #### STANDALONE #### From 2112f1916f6397975ff82515bda1f714b83ab5a8 Mon Sep 17 00:00:00 2001 From: proddy Date: Sat, 4 May 2024 14:17:35 +0200 Subject: [PATCH 07/11] formatting --- src/telegram.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/telegram.h b/src/telegram.h index 45dfe598d..72c4ff0de 100644 --- a/src/telegram.h +++ b/src/telegram.h @@ -225,8 +225,7 @@ class EMSbus { } last_bus_activity_ = timestamp; - - bus_connected_ = true; + bus_connected_ = true; } // return bus uptime in seconds From 42cbacd07cc11505aa47dae0e2b970c743e4850f Mon Sep 17 00:00:00 2001 From: proddy Date: Sat, 4 May 2024 14:18:27 +0200 Subject: [PATCH 08/11] add comments --- lib/framework/HttpEndpoint.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/framework/HttpEndpoint.h b/lib/framework/HttpEndpoint.h index 636638da3..365303162 100644 --- a/lib/framework/HttpEndpoint.h +++ b/lib/framework/HttpEndpoint.h @@ -40,14 +40,14 @@ class HttpEndpoint { if (request->method() == HTTP_POST) { // Handle POST if (!json.is()) { - request->send(400); + request->send(400); // error, bad request return; } StateUpdateResult outcome = _statefulService->updateWithoutPropagation(json.as(), _stateUpdater); if (outcome == StateUpdateResult::ERROR) { - request->send(400); // error + request->send(400); // error, bad request return; } else if (outcome == StateUpdateResult::CHANGED || outcome == StateUpdateResult::CHANGED_RESTART) { // persist changes From 6537abedb94a3394635b130316addabeb2570054 Mon Sep 17 00:00:00 2001 From: proddy Date: Sat, 4 May 2024 14:18:47 +0200 Subject: [PATCH 09/11] formatting --- src/web/WebDataService.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/web/WebDataService.cpp b/src/web/WebDataService.cpp index 745f71bb4..b6e4330f3 100644 --- a/src/web/WebDataService.cpp +++ b/src/web/WebDataService.cpp @@ -20,9 +20,7 @@ namespace emsesp { -WebDataService::WebDataService(AsyncWebServer * server, SecurityManager * securityManager) - -{ +WebDataService::WebDataService(AsyncWebServer * server, SecurityManager * securityManager) { // write endpoints server->on(WRITE_DEVICE_VALUE_SERVICE_PATH, securityManager->wrapCallback([this](AsyncWebServerRequest * request, JsonVariant json) { write_device_value(request, json); }, From dabb958f06810fc007ede2dd2424b4042bcb8b4d Mon Sep 17 00:00:00 2001 From: proddy Date: Sat, 4 May 2024 14:19:19 +0200 Subject: [PATCH 10/11] Remove OTA feature #1738 --- CHANGELOG_LATEST.md | 2 + factory_settings.ini | 5 - interface/src/AuthenticatedRouting.tsx | 2 - interface/src/api/system.ts | 8 +- interface/src/framework/Settings.tsx | 9 +- interface/src/framework/ota/OTASettings.tsx | 141 ------- .../src/framework/system/SystemStatus.tsx | 13 +- interface/src/i18n/de/index.ts | 1 - interface/src/i18n/en/index.ts | 1 - interface/src/i18n/fr/index.ts | 1 - interface/src/i18n/it/index.ts | 1 - interface/src/i18n/nl/index.ts | 1 - interface/src/i18n/no/index.ts | 1 - interface/src/i18n/pl/index.ts | 1 - interface/src/i18n/sk/index.ts | 1 - interface/src/i18n/sv/index.ts | 1 - interface/src/i18n/tr/index.ts | 1 - interface/src/types/system.ts | 13 - interface/src/validators/index.ts | 1 - interface/src/validators/system.ts | 22 -- lib/framework/AuthenticationService.cpp | 10 +- lib/framework/ESP8266React.cpp | 3 - lib/framework/ESP8266React.h | 6 - lib/framework/Features.h | 6 - lib/framework/OTASettingsService.cpp | 87 ----- lib/framework/OTASettingsService.h | 51 --- lib/framework/SecuritySettingsService.h | 11 +- lib/framework/UploadFileService.cpp | 6 +- lib_standalone/ESP8266React.h | 13 +- lib_standalone/Features.h | 5 - mock-api/rest_server.ts | 18 - pio_local.ini_example | 29 +- scripts/espota.py | 343 ------------------ scripts/requirements.txt | 6 + scripts/upload.py | 130 +++++++ scripts/upload_cli.py | 119 ++++++ scripts/upload_esp32.py | 15 - src/console.cpp | 5 - src/locale_common.h | 2 +- src/system.cpp | 13 +- src/version.h | 2 +- src/web/WebAPIService.cpp | 1 - src/web/WebStatusService.cpp | 3 +- .../emsesp_settings.json | 5 - 44 files changed, 291 insertions(+), 824 deletions(-) delete mode 100644 interface/src/framework/ota/OTASettings.tsx delete mode 100644 interface/src/validators/system.ts delete mode 100644 lib/framework/OTASettingsService.cpp delete mode 100644 lib/framework/OTASettingsService.h delete mode 100755 scripts/espota.py create mode 100644 scripts/requirements.txt create mode 100644 scripts/upload.py create mode 100644 scripts/upload_cli.py delete mode 100755 scripts/upload_esp32.py diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index 3e03cf0e0..a75000324 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -17,6 +17,7 @@ - heatpump entities `fan` and `shutdown` [#1690](https://github.com/emsesp/EMS-ESP32/discussions/1690) - mqtt HA-mode 3 for v3.6 compatible HA entities, set on update v3.6->v3.7 - HP input states [#1723](https://github.com/emsesp/EMS-ESP32/discussions/1723) +- Added scripts for OTA (scripts/upload.py and upload_cli.py) [#1738](https://github.com/emsesp/EMS-ESP32/issues/1738) ## Fixed @@ -31,3 +32,4 @@ - Refresh UI - moving settings to one location [#1665](https://github.com/emsesp/EMS-ESP32/issues/1665) - rename DeviceValueTypes, add UINT32 for custom entities - dynamic register dhw circuits for thermostat +- removed OTA feature [#1738](https://github.com/emsesp/EMS-ESP32/issues/1738) diff --git a/factory_settings.ini b/factory_settings.ini index b423605ca..de76cc0f2 100644 --- a/factory_settings.ini +++ b/factory_settings.ini @@ -25,11 +25,6 @@ build_flags = -D FACTORY_NTP_TIME_ZONE_FORMAT=\"CET-1CEST,M3.5.0,M10.5.0/3\" -D FACTORY_NTP_SERVER=\"time.google.com\" - ; OTA settings - -D FACTORY_OTA_PORT=8266 - -D FACTORY_OTA_PASSWORD=\"ems-esp-neo\" - -D FACTORY_OTA_ENABLED=false - ; MQTT settings -D FACTORY_MQTT_ENABLED=false -D FACTORY_MQTT_HOST=\"\" diff --git a/interface/src/AuthenticatedRouting.tsx b/interface/src/AuthenticatedRouting.tsx index 664643a15..00ca0d836 100644 --- a/interface/src/AuthenticatedRouting.tsx +++ b/interface/src/AuthenticatedRouting.tsx @@ -8,7 +8,6 @@ import AccessPoint from 'framework/ap/AccessPoint'; import Mqtt from 'framework/mqtt/Mqtt'; import Network from 'framework/network/Network'; import NetworkTime from 'framework/ntp/NetworkTime'; -import OTASettings from 'framework/ota/OTASettings'; import Security from 'framework/security/Security'; import ESPSystemStatus from 'framework/system/ESPSystemStatus'; import System from 'framework/system/System'; @@ -43,7 +42,6 @@ const AuthenticatedRouting: FC = () => { } /> } /> } /> - } /> } /> alovaInstance.Post('/rest/restart'); export const partition = () => alovaInstance.Post('/rest/partition'); export const factoryReset = () => alovaInstance.Post('/rest/factoryReset'); -// OTA -export const readOTASettings = () => - alovaInstance.Get(`/rest/otaSettings`); -export const updateOTASettings = (data: OTASettings) => - alovaInstance.Post('/rest/otaSettings', data); - // SystemLog export const readLogSettings = () => alovaInstance.Get(`/rest/logSettings`); diff --git a/interface/src/framework/Settings.tsx b/interface/src/framework/Settings.tsx index e6e09a34e..6164406ad 100644 --- a/interface/src/framework/Settings.tsx +++ b/interface/src/framework/Settings.tsx @@ -3,7 +3,6 @@ import { toast } from 'react-toastify'; import AccessTimeIcon from '@mui/icons-material/AccessTime'; import CancelIcon from '@mui/icons-material/Cancel'; -import CastIcon from '@mui/icons-material/Cast'; import DeviceHubIcon from '@mui/icons-material/DeviceHub'; import ImportExportIcon from '@mui/icons-material/ImportExport'; import LockIcon from '@mui/icons-material/Lock'; @@ -212,13 +211,7 @@ const Settings: FC = () => { text={LL.CONFIGURE('MQTT')} to="mqtt" /> - + { - const { - loadData, - saveData, - saving, - updateDataValue, - data, - origData, - dirtyFlags, - setDirtyFlags, - blocker, - errorMessage - } = useRest({ - read: SystemApi.readOTASettings, - update: SystemApi.updateOTASettings - }); - - const { LL } = useI18nContext(); - - const updateFormValue = updateValueDirty( - origData, - dirtyFlags, - setDirtyFlags, - updateDataValue - ); - - const [fieldErrors, setFieldErrors] = useState(); - - const content = () => { - if (!data) { - return ; - } - - const validateAndSubmit = async () => { - try { - setFieldErrors(undefined); - await validate(OTA_SETTINGS_VALIDATOR, data); - await saveData(); - } catch (error) { - setFieldErrors(error as ValidateFieldsError); - } - }; - - useLayoutTitle('OTA'); - - return ( - <> - - } - label={LL.ENABLE_OTA()} - /> - - - {dirtyFlags && dirtyFlags.length !== 0 && ( - - - - - )} - - ); - }; - - return ( - - {blocker ? : null} - {content()} - - ); -}; - -export default OTASettings; diff --git a/interface/src/framework/system/SystemStatus.tsx b/interface/src/framework/system/SystemStatus.tsx index 8a83ef884..1b023cde6 100644 --- a/interface/src/framework/system/SystemStatus.tsx +++ b/interface/src/framework/system/SystemStatus.tsx @@ -4,7 +4,6 @@ import { toast } from 'react-toastify'; import AccessTimeIcon from '@mui/icons-material/AccessTime'; import BuildIcon from '@mui/icons-material/Build'; import CancelIcon from '@mui/icons-material/Cancel'; -import CastIcon from '@mui/icons-material/Cast'; import DeviceHubIcon from '@mui/icons-material/DeviceHub'; import DirectionsBusIcon from '@mui/icons-material/DirectionsBus'; import MemoryIcon from '@mui/icons-material/Memory'; @@ -277,20 +276,10 @@ const SystemStatus: FC = () => { /> - - - on(SIGN_IN_PATH, [this](AsyncWebServerRequest * request, JsonVariant json) { signIn(request, json); }); } -/** - * Verifies that the request supplied a valid JWT. - */ +// Verifies that the request supplied a valid JWT. void AuthenticationService::verifyAuthorization(AsyncWebServerRequest * request) { Authentication authentication = _securityManager->authenticateRequest(request); request->send(authentication.authenticated ? 200 : 401); } -/** - * Signs in a user if the username and password match. Provides a JWT to be used in the Authorization header in - * subsequent requests. - */ +// Signs in a user if the username and password match. Provides a JWT to be used in the Authorization header in subsequent requests. void AuthenticationService::signIn(AsyncWebServerRequest * request, JsonVariant json) { if (json.is()) { String username = json["username"]; @@ -33,6 +28,7 @@ void AuthenticationService::signIn(AsyncWebServerRequest * request, JsonVariant return; } } + AsyncWebServerResponse * response = request->beginResponse(401); request->send(response); } diff --git a/lib/framework/ESP8266React.cpp b/lib/framework/ESP8266React.cpp index be7baf8f1..12036b759 100644 --- a/lib/framework/ESP8266React.cpp +++ b/lib/framework/ESP8266React.cpp @@ -11,7 +11,6 @@ ESP8266React::ESP8266React(AsyncWebServer * server, FS * fs) , _apStatus(server, &_securitySettingsService, &_apSettingsService) , _ntpSettingsService(server, fs, &_securitySettingsService) , _ntpStatus(server, &_securitySettingsService) - , _otaSettingsService(server, fs, &_securitySettingsService) , _uploadFileService(server, &_securitySettingsService) , _mqttSettingsService(server, fs, &_securitySettingsService) , _mqttStatus(server, &_mqttSettingsService, &_securitySettingsService) @@ -76,7 +75,6 @@ void ESP8266React::begin() { }); _apSettingsService.begin(); _ntpSettingsService.begin(); - _otaSettingsService.begin(); _mqttSettingsService.begin(); _securitySettingsService.begin(); } @@ -84,6 +82,5 @@ void ESP8266React::begin() { void ESP8266React::loop() { _networkSettingsService.loop(); _apSettingsService.loop(); - _otaSettingsService.loop(); _mqttSettingsService.loop(); } \ No newline at end of file diff --git a/lib/framework/ESP8266React.h b/lib/framework/ESP8266React.h index 3ec012f10..1fdd69e5d 100644 --- a/lib/framework/ESP8266React.h +++ b/lib/framework/ESP8266React.h @@ -9,7 +9,6 @@ #include "MqttStatus.h" #include "NTPSettingsService.h" #include "NTPStatus.h" -#include "OTASettingsService.h" #include "UploadFileService.h" #include "RestartService.h" #include "SecuritySettingsService.h" @@ -48,10 +47,6 @@ class ESP8266React { return &_ntpSettingsService; } - StatefulService * getOTASettingsService() { - return &_otaSettingsService; - } - StatefulService * getMqttSettingsService() { return &_mqttSettingsService; } @@ -88,7 +83,6 @@ class ESP8266React { APStatus _apStatus; NTPSettingsService _ntpSettingsService; NTPStatus _ntpStatus; - OTASettingsService _otaSettingsService; UploadFileService _uploadFileService; MqttSettingsService _mqttSettingsService; MqttStatus _mqttStatus; diff --git a/lib/framework/Features.h b/lib/framework/Features.h index 1629b39ef..d5cccc997 100644 --- a/lib/framework/Features.h +++ b/lib/framework/Features.h @@ -21,15 +21,9 @@ #define FT_NTP 1 #endif -// ota feature on by default -#ifndef FT_OTA -#define FT_OTA 1 -#endif - // upload firmware/file feature on by default #ifndef FT_UPLOAD_FIRMWARE #define FT_UPLOAD_FIRMWARE 1 #endif - #endif diff --git a/lib/framework/OTASettingsService.cpp b/lib/framework/OTASettingsService.cpp deleted file mode 100644 index 61673092c..000000000 --- a/lib/framework/OTASettingsService.cpp +++ /dev/null @@ -1,87 +0,0 @@ -#include "OTASettingsService.h" - -#include "../../src/emsesp_stub.hpp" - -OTASettingsService::OTASettingsService(AsyncWebServer * server, FS * fs, SecurityManager * securityManager) - : _httpEndpoint(OTASettings::read, OTASettings::update, this, server, OTA_SETTINGS_SERVICE_PATH, securityManager) - , _fsPersistence(OTASettings::read, OTASettings::update, this, fs, OTA_SETTINGS_FILE) - , _arduinoOTA(nullptr) { - WiFi.onEvent([this](WiFiEvent_t event, WiFiEventInfo_t info) { WiFiEvent(event); }); - addUpdateHandler([this] { configureArduinoOTA(); }, false); -} - -void OTASettingsService::begin() { - _fsPersistence.readFromFS(); - configureArduinoOTA(); -} - -void OTASettingsService::loop() { - if (_state.enabled && _arduinoOTA) { - _arduinoOTA->handle(); - } -} - -void OTASettingsService::configureArduinoOTA() { - if (_arduinoOTA) { - _arduinoOTA->end(); - delete _arduinoOTA; - _arduinoOTA = nullptr; - } - - if (_state.enabled) { - _arduinoOTA = new ArduinoOTAClass; - _arduinoOTA->setPort(static_cast(_state.port)); - _arduinoOTA->setPassword(_state.password.c_str()); - - _arduinoOTA->onStart([] { emsesp::EMSESP::system_.upload_status(true); }); - _arduinoOTA->onEnd([] { emsesp::EMSESP::system_.upload_status(false); }); - - _arduinoOTA->onProgress([](unsigned int progress, unsigned int total) { - // Serial.printf("Progress: %u%%\r\n", (progress / (total / 100))); - }); - _arduinoOTA->onError([](ota_error_t error) { - /* -#if defined(EMSESP_DEBUG) - Serial.printf("Error[%u]: ", error); - if (error == OTA_AUTH_ERROR) - Serial.println("Auth Failed"); - else if (error == OTA_BEGIN_ERROR) - Serial.println("Begin Failed"); - else if (error == OTA_CONNECT_ERROR) - Serial.println("Connect Failed"); - else if (error == OTA_RECEIVE_ERROR) - Serial.println("Receive Failed"); - else if (error == OTA_END_ERROR) - Serial.println("End Failed"); -#endif -*/ - }); - - _arduinoOTA->setMdnsEnabled(false); // disable as handled in NetworkSettingsService.cpp. https://github.com/emsesp/EMS-ESP32/issues/161 - _arduinoOTA->begin(); - } -} - -void OTASettingsService::WiFiEvent(WiFiEvent_t event) { - switch (event) { - case ARDUINO_EVENT_WIFI_STA_GOT_IP: - case ARDUINO_EVENT_ETH_GOT_IP: - configureArduinoOTA(); - break; - default: - break; - } -} - -void OTASettings::read(OTASettings & settings, JsonObject root) { - root["enabled"] = settings.enabled; - root["port"] = settings.port; - root["password"] = settings.password; -} - -StateUpdateResult OTASettings::update(JsonObject root, OTASettings & settings) { - settings.enabled = root["enabled"] | FACTORY_OTA_ENABLED; - settings.port = root["port"] | FACTORY_OTA_PORT; - settings.password = root["password"] | FACTORY_OTA_PASSWORD; - return StateUpdateResult::CHANGED; -} \ No newline at end of file diff --git a/lib/framework/OTASettingsService.h b/lib/framework/OTASettingsService.h deleted file mode 100644 index 41183dac6..000000000 --- a/lib/framework/OTASettingsService.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef OTASettingsService_h -#define OTASettingsService_h - -#include "HttpEndpoint.h" -#include "FSPersistence.h" - -#include -#include - -#ifndef FACTORY_OTA_PORT -#define FACTORY_OTA_PORT 8266 -#endif - -#ifndef FACTORY_OTA_PASSWORD -#define FACTORY_OTA_PASSWORD "ems-esp-neo" -#endif - -#ifndef FACTORY_OTA_ENABLED -#define FACTORY_OTA_ENABLED false -#endif - -#define OTA_SETTINGS_FILE "/config/otaSettings.json" -#define OTA_SETTINGS_SERVICE_PATH "/rest/otaSettings" - -class OTASettings { - public: - bool enabled; - int port; - String password; - - static void read(OTASettings & settings, JsonObject root); - static StateUpdateResult update(JsonObject root, OTASettings & settings); -}; - -class OTASettingsService : public StatefulService { - public: - OTASettingsService(AsyncWebServer * server, FS * fs, SecurityManager * securityManager); - - void begin(); - void loop(); - - private: - HttpEndpoint _httpEndpoint; - FSPersistence _fsPersistence; - ArduinoOTAClass * _arduinoOTA; - - void configureArduinoOTA(); - void WiFiEvent(WiFiEvent_t event); -}; - -#endif diff --git a/lib/framework/SecuritySettingsService.h b/lib/framework/SecuritySettingsService.h index 91f3f4b3b..11cdebbf4 100644 --- a/lib/framework/SecuritySettingsService.h +++ b/lib/framework/SecuritySettingsService.h @@ -71,7 +71,6 @@ class SecuritySettingsService final : public StatefulService, void begin(); - // Functions to implement SecurityManager Authentication authenticate(const String & username, const String & password) override; Authentication authenticateRequest(AsyncWebServerRequest * request) override; String generateJWT(const User * user) override; @@ -88,15 +87,9 @@ class SecuritySettingsService final : public StatefulService, void configureJWTHandler(); - /* - * Lookup the user by JWT - */ - Authentication authenticateJWT(String & jwt); + Authentication authenticateJWT(String & jwt); // Lookup the user by JWT - /* - * Verify the payload is correct - */ - boolean validatePayload(JsonObject parsedPayload, const User * user); + boolean validatePayload(JsonObject parsedPayload, const User * user); // Verify the payload is correct }; #endif \ No newline at end of file diff --git a/lib/framework/UploadFileService.cpp b/lib/framework/UploadFileService.cpp index 13a8e5a09..3ab3428c1 100644 --- a/lib/framework/UploadFileService.cpp +++ b/lib/framework/UploadFileService.cpp @@ -1,4 +1,5 @@ #include "UploadFileService.h" + #include "../../src/emsesp_stub.hpp" #include @@ -84,6 +85,7 @@ void UploadFileService::handleUpload(AsyncWebServerRequest * request, const Stri Update.setMD5(_md5.data()); _md5.front() = '\0'; } + // emsesp::EMSESP::system_.upload_status(true); // force just in case, this is stop UART, MQTT and other services request->onDisconnect([this] { handleEarlyDisconnect(); }); // success, let's make sure we end the update if the client hangs up } else { handleError(request, 507); // failed to begin, send an error response Insufficient Storage @@ -101,11 +103,11 @@ void UploadFileService::handleUpload(AsyncWebServerRequest * request, const Stri } } else if (!request->_tempObject) { // if we haven't delt with an error, continue with the firmware update if (Update.write(data, len) != len) { - handleError(request, 500); + handleError(request, 500); // internal error, failed return; } if (final && !Update.end(true)) { - handleError(request, 500); + handleError(request, 500); // internal error, failed } } } diff --git a/lib_standalone/ESP8266React.h b/lib_standalone/ESP8266React.h index 9f7590ee1..6c11c7cdc 100644 --- a/lib_standalone/ESP8266React.h +++ b/lib_standalone/ESP8266React.h @@ -20,7 +20,6 @@ #define NETWORK_SETTINGS_FILE "/config/networkSettings.json" #define NTP_SETTINGS_FILE "/config/ntpSettings.json" #define EMSESP_SETTINGS_FILE "/config/emsespSettings.json" -#define OTA_SETTINGS_FILE "/config/otaSettings.json" class DummySettings { public: @@ -77,8 +76,8 @@ class DummySettings { uint8_t provisionMode = 0; uint32_t publish_time_water = 0; - static void read(DummySettings & settings, JsonObject root) {}; - static void read(DummySettings & settings) {}; + static void read(DummySettings & settings, JsonObject root){}; + static void read(DummySettings & settings){}; static StateUpdateResult update(JsonObject root, DummySettings & settings) { return StateUpdateResult::CHANGED; @@ -97,10 +96,8 @@ class DummySettingsService : public StatefulService { #define SecuritySettings DummySettings #define MqttSettings DummySettings #define NTPSettings DummySettings -#define OTASettings DummySettings #define APSettings DummySettings - class ESP8266React { public: ESP8266React(AsyncWebServer * server, FS * fs) @@ -110,7 +107,7 @@ class ESP8266React { void begin() { _mqttClient = new espMqttClient(); }; - void loop() {}; + void loop(){}; SecurityManager * getSecurityManager() { return &_securitySettingsService; @@ -145,10 +142,6 @@ class ESP8266React { return &_settings; } - StatefulService * getOTASettingsService() { - return &_settings; - } - StatefulService * getAPSettingsService() { return &_settings; } diff --git a/lib_standalone/Features.h b/lib_standalone/Features.h index 526806569..e5c05d101 100644 --- a/lib_standalone/Features.h +++ b/lib_standalone/Features.h @@ -21,11 +21,6 @@ #define FT_NTP 0 #endif -// mqtt feature on by default -#ifndef FT_OTA -#define FT_OTA 0 -#endif - // upload firmware/file feature off by default #ifndef FT_UPLOAD_FIRMWARE #define FT_UPLOAD_FIRMWARE 0 diff --git a/mock-api/rest_server.ts b/mock-api/rest_server.ts index 5d0e5f9f1..99505053e 100644 --- a/mock-api/rest_server.ts +++ b/mock-api/rest_server.ts @@ -291,14 +291,6 @@ const list_networks = { ] }; -// OTA -const OTA_SETTINGS_ENDPOINT = REST_ENDPOINT_ROOT + 'otaSettings'; -let ota_settings = { - enabled: false, - port: 8266, - password: 'ems-esp-neo' -}; - // MQTT const MQTT_SETTINGS_ENDPOINT = REST_ENDPOINT_ROOT + 'mqttSettings'; const MQTT_STATUS_ENDPOINT = REST_ENDPOINT_ROOT + 'mqttStatus'; @@ -389,7 +381,6 @@ const system_status = { num_analogs: 1, free_heap: 143, ntp_status: 2, - ota_status: false, mqtt_status: true, ap_status: false }; @@ -2339,15 +2330,6 @@ router return status(200); }); -// OTA -router - .get(OTA_SETTINGS_ENDPOINT, () => ota_settings) - .post(OTA_SETTINGS_ENDPOINT, async (request: any) => { - ota_settings = await request.json(); - console.log('ota settings saved', ota_settings); - return status(200); - }); - // MQTT router .get(MQTT_SETTINGS_ENDPOINT, () => mqtt_settings) diff --git a/pio_local.ini_example b/pio_local.ini_example index d111668b4..b056295cc 100644 --- a/pio_local.ini_example +++ b/pio_local.ini_example @@ -23,21 +23,24 @@ default_envs = esp32_4M ; default_envs = debug ; default_envs = custom +[env] +; upload settings +upload_protocol = custom +custom_emsesp_ip = 10.10.10.173 +custom_username = admin +custom_password = admin +upload_port = /dev/ttyUSB* + [env:esp32_4M] -; if using OTA enter your details below -; upload_protocol = espota -; upload_flags = -; --port=8266 -; --auth=ems-esp-neo -; upload_port = ems-esp.local -; for USB, here are some examples: -; upload_port = /dev/ttyUSB* -; upload_port = COM5 extra_scripts = pre:scripts/build_interface.py ; comment out if you don't want to re-build the WebUI each time scripts/rename_fw.py + scripts/upload.py -[env:esp32_16M] +[env:lolin_s3] +extra_scripts = +; pre:scripts/build_interface.py ; comment out if you don't want to re-build the WebUI each time + scripts/rename_fw.py [env:custom] ; use for basic ESP boards with 4MB flash @@ -75,12 +78,6 @@ build_flags = -D CONFIG_ASYNC_TCP_STACK_SIZE=8192 '-DEMSESP_DEFAULT_BOARD_PROFILE="Test"' -[env:lolin_s3] -upload_port = /dev/ttyUSB0 -extra_scripts = - pre:scripts/build_interface.py ; comment out if you don't want to re-build the WebUI each time - scripts/rename_fw.py - ; pio run -e debug ; or from Visual Studio Code do PIO -> Project Tasks -> debug -> General -> Upload and Monitor ; options for debugging are: EMSESP_DEBUG EMSESP_UART_DEBUG EMSESP_DEBUG_SENSOR diff --git a/scripts/espota.py b/scripts/espota.py deleted file mode 100755 index d6b5a8086..000000000 --- a/scripts/espota.py +++ /dev/null @@ -1,343 +0,0 @@ -#!/usr/bin/env python3 -# -# Original espota.py by Ivan Grokhotkov: -# https://gist.github.com/igrr/d35ab8446922179dc58c -# -# Modified since 2015-09-18 from Pascal Gollor (https://github.com/pgollor) -# Modified since 2015-11-09 from Hristo Gochkov (https://github.com/me-no-dev) -# Modified since 2016-01-03 from Matthew O'Gorman (https://githumb.com/mogorman) -# -# This script will push an OTA update to the ESP -# use it like: python3 espota.py -i -I -p -P [-a password] -f -# Or to upload SPIFFS image: -# python3 espota.py -i -I -p -P [-a password] -s -f -# -# Changes -# 2015-09-18: -# - Add option parser. -# - Add logging. -# - Send command to controller to differ between flashing and transmitting SPIFFS image. -# -# Changes -# 2015-11-09: -# - Added digest authentication -# - Enhanced error tracking and reporting -# -# Changes -# 2016-01-03: -# - Added more options to parser. -# - -from __future__ import print_function -import socket -import sys -import os -import optparse -import logging -import hashlib -import random - -# Commands -FLASH = 0 -SPIFFS = 100 -AUTH = 200 -PROGRESS = False -# update_progress() : Displays or updates a console progress bar -## Accepts a float between 0 and 1. Any int will be converted to a float. -## A value under 0 represents a 'halt'. -## A value at 1 or bigger represents 100% -def update_progress(progress): - if (PROGRESS): - barLength = 60 # Modify this to change the length of the progress bar - status = "" - if isinstance(progress, int): - progress = float(progress) - if not isinstance(progress, float): - progress = 0 - status = "error: progress var must be float\r\n" - if progress < 0: - progress = 0 - status = "Halt...\r\n" - if progress >= 1: - progress = 1 - status = "Done...\r\n" - block = int(round(barLength*progress)) - text = "\rUploading: [{0}] {1}% {2}".format( "="*block + " "*(barLength-block), int(progress*100), status) - sys.stderr.write(text) - sys.stderr.flush() - else: - sys.stderr.write('.') - sys.stderr.flush() - -def serve(remoteAddr, localAddr, remotePort, localPort, password, filename, command = FLASH): - # Create a TCP/IP socket - sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - server_address = (localAddr, localPort) - logging.info('Starting on %s:%s', str(server_address[0]), str(server_address[1])) - try: - sock.bind(server_address) - sock.listen(1) - except: - logging.error("Listen Failed") - return 1 - - # Check whether Signed Update is used. - if ( os.path.isfile(filename + '.signed') ): - filename = filename + '.signed' - file_check_msg = 'Detected Signed Update. %s will be uploaded instead.' % (filename) - sys.stderr.write(file_check_msg + '\n') - sys.stderr.flush() - logging.info(file_check_msg) - - content_size = os.path.getsize(filename) - f = open(filename,'rb') - file_md5 = hashlib.md5(f.read()).hexdigest() - f.close() - logging.info('Upload size: %d', content_size) - message = '%d %d %d %s\n' % (command, localPort, content_size, file_md5) - - # Wait for a connection - logging.info('Sending invitation to: %s', remoteAddr) - sock2 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - remote_address = (remoteAddr, int(remotePort)) - sent = sock2.sendto(message.encode(), remote_address) - sock2.settimeout(10) - try: - data = sock2.recv(128).decode() - except: - logging.error('No Answer') - sock2.close() - return 1 - if (data != "OK"): - if(data.startswith('AUTH')): - nonce = data.split()[1] - cnonce_text = '%s%u%s%s' % (filename, content_size, file_md5, remoteAddr) - cnonce = hashlib.md5(cnonce_text.encode()).hexdigest() - passmd5 = hashlib.md5(password.encode()).hexdigest() - result_text = '%s:%s:%s' % (passmd5 ,nonce, cnonce) - result = hashlib.md5(result_text.encode()).hexdigest() - sys.stderr.write('Authenticating...') - sys.stderr.flush() - message = '%d %s %s\n' % (AUTH, cnonce, result) - sock2.sendto(message.encode(), remote_address) - sock2.settimeout(10) - try: - data = sock2.recv(32).decode() - except: - sys.stderr.write('FAIL\n') - logging.error('No Answer to our Authentication') - sock2.close() - return 1 - if (data != "OK"): - sys.stderr.write('FAIL\n') - logging.error('%s', data) - sock2.close() - sys.exit(1) - return 1 - sys.stderr.write('OK\n') - else: - logging.error('Bad Answer: %s', data) - sock2.close() - return 1 - sock2.close() - - logging.info('Waiting for device...') - try: - sock.settimeout(10) - connection, client_address = sock.accept() - sock.settimeout(None) - connection.settimeout(None) - except: - logging.error('No response from device') - sock.close() - return 1 - - received_ok = False - - try: - f = open(filename, "rb") - if (PROGRESS): - update_progress(0) - else: - sys.stderr.write('Uploading') - sys.stderr.flush() - offset = 0 - while True: - chunk = f.read(1460) - if not chunk: break - offset += len(chunk) - update_progress(offset/float(content_size)) - connection.settimeout(10) - try: - connection.sendall(chunk) - if connection.recv(32).decode().find('O') >= 0: - # connection will receive only digits or 'OK' - received_ok = True - except: - sys.stderr.write('\n') - logging.error('Error Uploading') - connection.close() - f.close() - sock.close() - return 1 - - sys.stderr.write('\n') - logging.info('Waiting for result...') - # libraries/ArduinoOTA/ArduinoOTA.cpp L311 L320 - # only sends digits or 'OK'. We must not not close - # the connection before receiving the 'O' of 'OK' - try: - connection.settimeout(60) - received_ok = False - received_error = False - while not (received_ok or received_error): - reply = connection.recv(64).decode() - # Look for either the "E" in ERROR or the "O" in OK response - # Check for "E" first, since both strings contain "O" - if reply.find('E') >= 0: - sys.stderr.write('\n') - logging.error('%s', reply) - received_error = True - elif reply.find('O') >= 0: - logging.info('Result: OK') - received_ok = True - connection.close() - f.close() - sock.close() - if received_ok: - return 0 - return 1 - except: - logging.error('No Result!') - connection.close() - f.close() - sock.close() - return 1 - - finally: - connection.close() - f.close() - - sock.close() - return 1 -# end serve - - -def parser(unparsed_args): - parser = optparse.OptionParser( - usage = "%prog [options]", - description = "Transmit image over the air to the esp8266 module with OTA support." - ) - - # destination ip and port - group = optparse.OptionGroup(parser, "Destination") - group.add_option("-i", "--ip", - dest = "esp_ip", - action = "store", - help = "ESP8266 IP Address.", - default = False - ) - group.add_option("-I", "--host_ip", - dest = "host_ip", - action = "store", - help = "Host IP Address.", - default = "0.0.0.0" - ) - group.add_option("-p", "--port", - dest = "esp_port", - type = "int", - help = "ESP8266 ota Port. Default 8266", - default = 8266 - ) - group.add_option("-P", "--host_port", - dest = "host_port", - type = "int", - help = "Host server ota Port. Default random 10000-60000", - default = random.randint(10000,60000) - ) - parser.add_option_group(group) - - # auth - group = optparse.OptionGroup(parser, "Authentication") - group.add_option("-a", "--auth", - dest = "auth", - help = "Set authentication password.", - action = "store", - default = "" - ) - parser.add_option_group(group) - - # image - group = optparse.OptionGroup(parser, "Image") - group.add_option("-f", "--file", - dest = "image", - help = "Image file.", - metavar="FILE", - default = None - ) - group.add_option("-s", "--spiffs", - dest = "spiffs", - action = "store_true", - help = "Use this option to transmit a SPIFFS image and do not flash the module.", - default = False - ) - parser.add_option_group(group) - - # output group - group = optparse.OptionGroup(parser, "Output") - group.add_option("-d", "--debug", - dest = "debug", - help = "Show debug output. And override loglevel with debug.", - action = "store_true", - default = False - ) - group.add_option("-r", "--progress", - dest = "progress", - help = "Show progress output. Does not work for ArduinoIDE", - action = "store_true", - default = False - ) - parser.add_option_group(group) - - (options, args) = parser.parse_args(unparsed_args) - - return options -# end parser - - -def main(args): - # get options - options = parser(args) - - # adapt log level - loglevel = logging.WARNING - if (options.debug): - loglevel = logging.DEBUG - # end if - - # logging - logging.basicConfig(level = loglevel, format = '%(asctime)-8s [%(levelname)s]: %(message)s', datefmt = '%H:%M:%S') - - logging.debug("Options: %s", str(options)) - - # check options - global PROGRESS - PROGRESS = options.progress - if (not options.esp_ip or not options.image): - logging.critical("Not enough arguments.") - - return 1 - # end if - - command = FLASH - if (options.spiffs): - command = SPIFFS - # end if - - return serve(options.esp_ip, options.host_ip, options.esp_port, options.host_port, options.auth, options.image, command) -# end main - - -if __name__ == '__main__': - sys.exit(main(sys.argv)) -# end if diff --git a/scripts/requirements.txt b/scripts/requirements.txt new file mode 100644 index 000000000..b05375d1e --- /dev/null +++ b/scripts/requirements.txt @@ -0,0 +1,6 @@ +requests +termcolor +requests_toolbelt +tqdm + + diff --git a/scripts/upload.py b/scripts/upload.py new file mode 100644 index 000000000..61fff81bf --- /dev/null +++ b/scripts/upload.py @@ -0,0 +1,130 @@ + +# Modified from https://github.com/ayushsharma82/ElegantOTA + +# This is called during the platformIO upload process +# To use create a pio_local.ini file in the project root and add the following: +# [env] +# upload_protocol = custom +# custom_emsesp_ip = 10.10.10.173 +# custom_username = admin +# custom_password = admin +# +# and +# extra_scripts = scripts/upload.py + +import requests +import hashlib +from urllib.parse import urlparse +import time +Import("env") + +try: + from requests_toolbelt import MultipartEncoder, MultipartEncoderMonitor + from tqdm import tqdm + from termcolor import cprint +except ImportError: + env.Execute("$PYTHONEXE -m pip install requests_toolbelt") + env.Execute("$PYTHONEXE -m pip install tqdm") + env.Execute("$PYTHONEXE -m pip install termcolor") + from requests_toolbelt import MultipartEncoder, MultipartEncoderMonitor + from tqdm import tqdm + from termcolor import cprint + +def print_success(x): return cprint(x, 'green') +def print_fail(x): return cprint(x, 'red') + +def on_upload(source, target, env): + + # first check authentication + try: + username = env.GetProjectOption('custom_username') + password = env.GetProjectOption('custom_password') + except: + print('No authentication settings specified. Please, add these to your pio_local.ini file: \n\ncustom_username=username\ncustom_password=password\n') + return + + emsesp_url = "http://" + env.GetProjectOption('custom_emsesp_ip') + parsed_url = urlparse(emsesp_url) + host_ip = parsed_url.netloc + + signon_url = f"{emsesp_url}/rest/signIn" + + signon_headers = { + 'Host': host_ip, + 'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/118.0', + 'Accept': '*/*', + 'Accept-Language': 'de,en-US;q=0.7,en;q=0.3', + 'Accept-Encoding': 'gzip, deflate', + 'Referer': f'{emsesp_url}', + 'Content-Type': 'application/json', + 'Connection': 'keep-alive' + } + + username_password = { + "username": username, + "password": password + } + + response = requests.post(signon_url, json=username_password, headers=signon_headers, auth=None) + + if response.status_code != 200: + print_fail("Authentication failed (code " + str(response.status_code) + ")") + return + + print_success("Authentication successful") + access_token = response.json().get('access_token') + + # start the upload + firmware_path = str(source[0]) + + with open(firmware_path, 'rb') as firmware: + md5 = hashlib.md5(firmware.read()).hexdigest() + + firmware.seek(0) + + encoder = MultipartEncoder(fields={ + 'MD5': md5, + 'file': (firmware_path, firmware, 'application/octet-stream')} + ) + + bar = tqdm(desc='Upload Progress', + total=encoder.len, + dynamic_ncols=True, + unit='B', + unit_scale=True, + unit_divisor=1024 + ) + + monitor = MultipartEncoderMonitor(encoder, lambda monitor: bar.update(monitor.bytes_read - bar.n)) + + post_headers = { + 'Host': host_ip, + 'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/118.0', + 'Accept': '*/*', + 'Accept-Language': 'de,en-US;q=0.7,en;q=0.3', + 'Accept-Encoding': 'gzip, deflate', + 'Referer': f'{emsesp_url}', + 'Connection': 'keep-alive', + 'Content-Type': monitor.content_type, + 'Content-Length': str(monitor.len), + 'Origin': f'{emsesp_url}', + 'Authorization': 'Bearer ' + f'{access_token}' + } + + upload_url = f"{emsesp_url}/rest/uploadFile" + + response = requests.post(upload_url, data=monitor, headers=post_headers, auth=None) + + bar.close() + time.sleep(0.1) + + print() + + if response.status_code != 200: + print_fail("Upload failed (code " + response.status.code + ").") + else: + print_success("Upload successful.") + + print() + +env.Replace(UPLOADCMD=on_upload) \ No newline at end of file diff --git a/scripts/upload_cli.py b/scripts/upload_cli.py new file mode 100644 index 000000000..8a6a5836e --- /dev/null +++ b/scripts/upload_cli.py @@ -0,0 +1,119 @@ + +# Modified from https://github.com/ayushsharma82/ElegantOTA +# +# Requires Python (sudo apt install python3-pip) +# `python3 -m venv venv` to create the virtual environment +# `source ./venv/bin/activate` to enter it +# `pip install -r requirements.txt` to install the libraries +# +# Run using for example: +# python3 upload_cli.py -i 10.10.10.173 -f ../build/firmware/EMS-ESP-3_7_0-dev_8-ESP32_4M.bin + +import argparse +import requests +import hashlib +from urllib.parse import urlparse +import time +from requests_toolbelt import MultipartEncoder, MultipartEncoderMonitor +from tqdm import tqdm +from termcolor import cprint + +def print_success(x): return cprint(x, 'green') +def print_fail(x): return cprint(x, 'red') + +def upload(file, ip, username, password): + + # Print welcome message + print() + print("EMS-ESP Firmware Upload") + + # first check authentication + emsesp_url = "http://" + f'{ip}' + parsed_url = urlparse(emsesp_url) + host_ip = parsed_url.netloc + + signon_url = f"{emsesp_url}/rest/signIn" + + signon_headers = { + 'Host': host_ip, + 'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/118.0', + 'Accept': '*/*', + 'Accept-Language': 'de,en-US;q=0.7,en;q=0.3', + 'Accept-Encoding': 'gzip, deflate', + 'Referer': f'{emsesp_url}', + 'Content-Type': 'application/json', + 'Connection': 'keep-alive' + } + + username_password = { + "username": username, + "password": password + } + + response = requests.post(signon_url, json=username_password, headers=signon_headers, auth=None) + + if response.status_code != 200: + print_fail("Authentication failed (code " + str(response.status_code) + ")") + return + + print_success("Authentication successful") + access_token = response.json().get('access_token') + + # start the upload + with open(file, 'rb') as firmware: + md5 = hashlib.md5(firmware.read()).hexdigest() + + firmware.seek(0) + + encoder = MultipartEncoder(fields={ + 'MD5': md5, + 'file': (file, firmware, 'application/octet-stream')} + ) + + bar = tqdm(desc='Upload Progress', + total=encoder.len, + dynamic_ncols=True, + unit='B', + unit_scale=True, + unit_divisor=1024 + ) + + monitor = MultipartEncoderMonitor(encoder, lambda monitor: bar.update(monitor.bytes_read - bar.n)) + + post_headers = { + 'Host': host_ip, + 'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/118.0', + 'Accept': '*/*', + 'Accept-Language': 'de,en-US;q=0.7,en;q=0.3', + 'Accept-Encoding': 'gzip, deflate', + 'Referer': f'{emsesp_url}', + 'Connection': 'keep-alive', + 'Content-Type': monitor.content_type, + 'Content-Length': str(monitor.len), + 'Origin': f'{emsesp_url}', + 'Authorization': 'Bearer ' + f'{access_token}' + } + + upload_url = f"{emsesp_url}/rest/uploadFile" + + response = requests.post(upload_url, data=monitor, headers=post_headers, auth=None) + + bar.close() + time.sleep(0.1) + + if response.status_code != 200: + print_fail("Upload failed (code " + response.status.code + ").") + else: + print_success("Upload successful.") + + print() + +# main +parser = argparse.ArgumentParser(description="EMS-ESP Firmware Upload") +parser.add_argument("-f", "--file", metavar="FILE", required=True, type=str, help="firmware file") +parser.add_argument("-i", "--ip", metavar="IP", type=str, default="ems-esp.local", help="IP address of EMS-ESP") +parser.add_argument("-u", "--username", metavar="USERNAME", type=str, default="admin", help="admin user") +parser.add_argument("-p", "--password", metavar="PASSWORD", type=str, default="admin", help="admin password") +args = parser.parse_args() +upload(**vars(args)) + diff --git a/scripts/upload_esp32.py b/scripts/upload_esp32.py deleted file mode 100755 index 7afd4b095..000000000 --- a/scripts/upload_esp32.py +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env python -import subprocess -import os, argparse - -print("\n** Starting upload...") - -ap = argparse.ArgumentParser() -ap.add_argument("-p", "--port", required=True, help="port") -args = vars(ap.parse_args()) - -# esptool.py --chip esp32 --port "COM4" --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 40m --flash_size detect 0x1000 bootloader_dio_40m.bin 0x8000 partitions.bin 0xe000 boot_app0.bin 0x10000 EMS-ESP-dev-esp32.bin - -subprocess.call(["esptool.py", "--chip esp32", "-p", args['port'], "--baud", "921600", "--before", "default_reset", "--after", "hard_reset", "write_flash", "-z", "--flash_mode", "dio", "--flash_freq", "40m","--flash_size", "detect", "0x1000", "bootloader_dio_40m.bin", "0x8000", "partitions.bin","0xe000", "boot_app0.bin", "0x10000", "EMS-ESP-dev-esp32.bin"]) - -print("\n** Finished upload.") diff --git a/src/console.cpp b/src/console.cpp index 9c523f701..20271ccc1 100644 --- a/src/console.cpp +++ b/src/console.cpp @@ -364,11 +364,6 @@ static void setup_commands(std::shared_ptr & commands) { Settings.enabled = enable; return StateUpdateResult::CHANGED; }); - } else if (arguments.front() == "ota") { - to_app(shell).esp8266React.getOTASettingsService()->update([&](OTASettings & Settings) { - Settings.enabled = enable; - return StateUpdateResult::CHANGED; - }); } else if (arguments.front() == "ntp") { to_app(shell).esp8266React.getNTPSettingsService()->update([&](NTPSettings & Settings) { Settings.enabled = enable; diff --git a/src/locale_common.h b/src/locale_common.h index 5e0af068a..bec8b7eb9 100644 --- a/src/locale_common.h +++ b/src/locale_common.h @@ -160,7 +160,7 @@ MAKE_WORD_CUSTOM(new_password_prompt2, "Retype new password: ") MAKE_WORD_CUSTOM(password_prompt, "Password: ") MAKE_WORD_CUSTOM(unset, "") MAKE_WORD_CUSTOM(enable_mandatory, "") -MAKE_WORD_CUSTOM(service_mandatory, "") +MAKE_WORD_CUSTOM(service_mandatory, "") // more common names that don't need translations MAKE_NOTRANSLATION(1x3min, "1x3min") diff --git a/src/system.cpp b/src/system.cpp index 2e5804b2e..aa76da654 100644 --- a/src/system.cpp +++ b/src/system.cpp @@ -836,6 +836,9 @@ void System::commands_init() { } // uses LED to show system health +// 1 x flash = the EMS bus is not connected +// 2 x flash = the network (wifi or ethernet) is not connected +// 3 x flash = both EMS bus and network are failing. This is a critical error! void System::led_monitor() { // we only need to run the LED healthcheck if there are errors if (!healthcheck_ || !led_gpio_) { @@ -849,7 +852,6 @@ void System::led_monitor() { // first long pause before we start flashing if (led_long_timer_ && (uint32_t)(current_time - led_long_timer_) >= HEALTHCHECK_LED_LONG_DUARATION) { - // Serial.println("starting the flash check"); led_short_timer_ = current_time; // start the short timer led_long_timer_ = 0; // stop long timer led_flash_step_ = 1; // enable the short flash timer @@ -863,7 +865,6 @@ void System::led_monitor() { if (++led_flash_step_ == 8) { // reset the whole sequence - // Serial.println("resetting flash check"); led_long_timer_ = uuid::get_uptime(); led_flash_step_ = 0; #if defined(ARDUINO_LOLIN_C3_MINI) && !defined(BOARD_C3_MINI_V1) @@ -1100,7 +1101,6 @@ bool System::check_restore() { reboot_required |= saveSettings(NTP_SETTINGS_FILE, "NTP", input); reboot_required |= saveSettings(SECURITY_SETTINGS_FILE, "Security", input); reboot_required |= saveSettings(EMSESP_SETTINGS_FILE, "Settings", input); - reboot_required |= saveSettings(OTA_SETTINGS_FILE, "OTA", input); } else if (settings_type == "customizations") { // it's a customization file, just replace it and there's no need to reboot saveSettings(EMSESP_CUSTOMIZATION_FILE, "Customizations", input); @@ -1343,13 +1343,6 @@ bool System::command_info(const char * value, const int8_t id, JsonObject output node["tz label"] = settings.tzLabel; // node["tz format"] = settings.tzFormat; }); - - // OTA status - node = output["OTA Info"].to(); - EMSESP::esp8266React.getOTASettingsService()->read([&](OTASettings & settings) { - node["enabled"] = settings.enabled; - node["port"] = settings.port; - }); #endif // MQTT Status diff --git a/src/version.h b/src/version.h index ad1f990b9..25521abd3 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define EMSESP_APP_VERSION "3.7.0-dev.8" +#define EMSESP_APP_VERSION "3.7.0-dev.9" diff --git a/src/web/WebAPIService.cpp b/src/web/WebAPIService.cpp index 3a242d01e..a7e2e83eb 100644 --- a/src/web/WebAPIService.cpp +++ b/src/web/WebAPIService.cpp @@ -181,7 +181,6 @@ void WebAPIService::getSettings(AsyncWebServerRequest * request) { System::extractSettings(AP_SETTINGS_FILE, "AP", root); System::extractSettings(MQTT_SETTINGS_FILE, "MQTT", root); System::extractSettings(NTP_SETTINGS_FILE, "NTP", root); - System::extractSettings(OTA_SETTINGS_FILE, "OTA", root); System::extractSettings(SECURITY_SETTINGS_FILE, "Security", root); System::extractSettings(EMSESP_SETTINGS_FILE, "Settings", root); diff --git a/src/web/WebStatusService.cpp b/src/web/WebStatusService.cpp index 7916b2470..3d988176a 100644 --- a/src/web/WebStatusService.cpp +++ b/src/web/WebStatusService.cpp @@ -53,8 +53,7 @@ void WebStatusService::systemStatus(AsyncWebServerRequest * request) { root["num_analogs"] = EMSESP::analogsensor_.no_sensors(); root["free_heap"] = EMSESP::system_.getHeapMem(); root["uptime"] = uuid::get_uptime_sec(); - EMSESP::esp8266React.getOTASettingsService()->read([root](OTASettings & otaSettings) { root["ota_status"] = otaSettings.enabled; }); - root["mqtt_status"] = EMSESP::mqtt_.connected(); + root["mqtt_status"] = EMSESP::mqtt_.connected(); #ifndef EMSESP_STANDALONE root["ntp_status"] = [] { diff --git a/test/standalone_file_export/emsesp_settings.json b/test/standalone_file_export/emsesp_settings.json index 4dc16697e..988fe1bbe 100644 --- a/test/standalone_file_export/emsesp_settings.json +++ b/test/standalone_file_export/emsesp_settings.json @@ -62,11 +62,6 @@ "tz_label": "Europe/Amsterdam", "tz_format": "CET-1CEST,M3.5.0,M10.5.0/3" }, - "OTA": { - "enabled": false, - "port": 8266, - "password": "ems-esp-neo" - }, "Security": { "jwt_secret": "ems-esp-neo", "users": [ From 98839015fa45a9a9879b35672659c809fe7cc8f8 Mon Sep 17 00:00:00 2001 From: proddy Date: Sat, 4 May 2024 14:32:17 +0200 Subject: [PATCH 11/11] updated screenshot with removed ota --- media/web_settings.png | Bin 80342 -> 75145 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/media/web_settings.png b/media/web_settings.png index 5cd6897db818719a7307d73ed0f4a0e19a96f870..bd57cd1a5ac0ea3390232ab924344df934d35709 100644 GIT binary patch literal 75145 zcmb@u1yEdFvo0JGLI^&%yIXL#-~`Ly5S-v1EV#?y?h>5A-6gnNa1ZY8{ttQIPtN(j zTlb#2cUMg@d)RxgUaMt2{dCWOKFdiU!r{Wbdi4rXN>Wte)vGrk$O{My1NlTwveQ1lstc?8jHHDk9(?^xi_w-`hy4+r4^))cNv)>a{NT`s&qlu9WCU zrSIAYOYb$6rq;oxB~;s|AE|0 z0YAb(AW;FxDnm-}}_^}Ul^ws_$x_V`?#U?))2mvJe z=ZGkCEtT3ZV0@7}D2Pz!+D}w~K4YgHhh-+^WvYM8c`#UQ84VS*)4rRsKKy41{(NpI z#t82x>MTnN;IF@bl-B=W%9}<85*7dPC@o|AuUY?>iRp-$8B3D0y#DW^8e(8!VHs)( zkTG*|V!eO={@c`!Rmk~LgFD_-k!o*@Y;u;~de3YX@9PF`?yBPa`5J4UIwitQ z;RJD4BFxMM21Wt%TMoLU9oexlX<_>~Gd9c&h*%>}{xMW?#HW)|l!dJ z=95B*6^queaRq!#vA6@>00v4)1zUSM&d+mnBpc*c# z1T-<0sruUtAv#c>8~E1tLtfigZ93FeChJ{h+TGB<>Bo?cZbM6lF*k?!CS(-wu=!0> zswrn0Rhe+UtqVQyKiMKgE6O=na2TkYTCx(Yr?idyhQ2i`mOtmmE_dde--{z3lv#aL z;x>6kRmA^qX8aF@sz%MzDM_YstudrN-4n?y0|Ehb95jPDM98Zq9qP^d?4Oo`3)Uu{ zC<6Y?zy?%Q5+lD~A89=_JFvpIRibW9hs8E(NpG!=GOT1h_kNsh-MxQ3Do?O>wMyB?J(ZIf9+o7LfClzpMQc0bvaOYz9)Pwxfc025?y}-1*{ZujC^WZ;~a0aBN zn+!9LFVzkSd%hBv*@642$rl*vIYM%`|DoLQ3fisJF|Bc`lT~j*r`~>7p<+-cg%W*{ zkp};mhP@lR?Y$?>{gc1!`V>$1U?ScX?-NhH-9uZr-t}4C>JKX*zQ{fGoby|Kr$rqu zC!i%(#;wkHX5xKbTBCn8b{iH?fFrllnUmj$v-(oFJ;bS-=m&Z}Ac+6&CDQA~${=1F zlrO&zxt(P(M(=SdDXYeFNsUfm|J+-QTUeBRA8_3J&v{g4B`9lZYQ~Pe1j>!AEm9Ja zkEOWX5H~zExPYqm%!|>mD_fU{ShKvIiF7$7GJNc(lm%3Kpv~8s=NIosb5=_ALxmIa zy&A=8%7plxS%_`lD~_2dbSlp$sEUNCPXwwFrQH{~QG1SW}P*bUwiNc z;>fXg71@i9xWOF_8XgX+;kUqbYD@{a{PK7Jq)}@yjNOT;a;eSyEHN-=uD?eY9gq#t zH6c2rwCp(IE-kN*^NG2C7CP|%QZU{JRXSROX)N6?Z+F0~wi|%}>Kx-S6r6s}Iv3ch z>p5Q{(A8SUl=I+)898g_dz*T^N*XGBZBwVX%nFy3!8emIV>lRw1;O{m%d zTdWN1%?!il>jT_Z?pIfu*cPxKghTgqOH)m5e z9QUlnia4||c0HXPas2c4L(vr+7Al2v{seEGHC#$>I;fS++GlLmLdnChk~B+fI5VD$Hs&m=IQ)C!oR%z4=CE-*BhEMw6As{OGUHt6lVfoJddc|%`q0rD`0Z}Q<1 z|4L_kZn7yDpyTFez3h%LN?T%0Dmo4FqDEG48ZOdLi8yIHC1o3M0iaOu8aEufCQ@pz z#Ca=JTRN+{%4X3$U4u=Y?Gbtqv3;#K%s2VY9Y(Sbjoq6`?z7~g!qn~n!h9=Z2ZGzO zhVX{GMaE1=S}PBSq8T&Ku1t$1)xH0UR;Hnq!U0_pBAEJ~vk_m)(Vz-#3hcUfN*#ZO zJxog6Jg z%Uay)Hfm&#PNn$Y$p<%Qx@5;~+o}rydWMkr`RCEiEpXgSnf5x#NRP`kvMc)$u*wq^Nm0j5|wKs4JFw&|iK zNCv972}$(nP~WeP^0)dI;?3)tYq@dFov>%|yf@#2&ga3Op;-m!UeB*R#^5HvP**i2cRyKPcCI)ajU0E?6+ zDU?$@IxwYV-2dC@b$)D(K3|mYjjZ%)gAB}o@(B`mIDFQ8Y0_1~AYvy$36P)ey}95M z`g1&q{TwQSrmg54qYkot6`1lV3co$a-~9ZpnFe^#tqHwOxM%bN$dtCQQKg4om!5~z zFBo6w*Jw%9)ZFl~0C6hzskV2(%XoWm=HzP;o93sE>j7pZDx?BV$56+cf~#K}-)b}= zb-89(cC?3(G6f9#>s_O=|A<&sJXtJiRr6HKQ+wCUX9Oecq^0oM;70;f)J2k>S~(4D z8UNcw9!yYNTfwE0hkje&cE|8++;`cBKD_KN5!yF5D;d<@wmtC4O(~yz@p0)mD?t&# zlkfEt01pW_bJF6sLG-RF)V= zF%~0zCu>Sh16=Y|=C(fwroXSVeQv*RnxcJyKD2fSAPPr#Do^c*%M}a_kHxZDEc9Dj za=9#+#@1RPR@_-Ps5=KR)I*KVdlmLV+7yiFpi9kZS0W4B>6H%j=trvb2`A7p

AfATGiMfW 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

ty$^P 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 MPgg&ebxsLQ02W7LdH?_b literal 80342 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