Merge pull request #2603 from proddy/dev

small updates
This commit is contained in:
Proddy
2025-08-04 17:38:28 +02:00
committed by GitHub
9 changed files with 602 additions and 593 deletions

View File

@@ -29,6 +29,7 @@ For more details go to [docs.emsesp.org](https://docs.emsesp.org/).
- shower active state retained, shows correctly in HA - shower active state retained, shows correctly in HA
- MQTT Command Topic with slashes [#2571](https://github.com/emsesp/EMS-ESP32/issues/2571) - MQTT Command Topic with slashes [#2571](https://github.com/emsesp/EMS-ESP32/issues/2571)
- Add pulsed water meter input to V1.3 gateway with Lilygo S3 [#2550](https://github.com/emsesp/EMS-ESP32/issues/2550) - Add pulsed water meter input to V1.3 gateway with Lilygo S3 [#2550](https://github.com/emsesp/EMS-ESP32/issues/2550)
- Fix missing long 10-second press of Button to perform a factory reset
## Changed ## Changed

View File

@@ -34,34 +34,34 @@
"jwt-decode": "^4.0.0", "jwt-decode": "^4.0.0",
"magic-string": "^0.30.17", "magic-string": "^0.30.17",
"mime-types": "^3.0.1", "mime-types": "^3.0.1",
"preact": "^10.26.9", "preact": "^10.27.0",
"react": "^19.1.0", "react": "^19.1.1",
"react-dom": "^19.1.0", "react-dom": "^19.1.1",
"react-icons": "^5.5.0", "react-icons": "^5.5.0",
"react-router": "^7.6.3", "react-router": "^7.7.1",
"react-toastify": "^11.0.5", "react-toastify": "^11.0.5",
"typesafe-i18n": "^5.26.2", "typesafe-i18n": "^5.26.2",
"typescript": "^5.8.3" "typescript": "^5.9.2"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.28.0", "@babel/core": "^7.28.0",
"@eslint/js": "^9.30.1", "@eslint/js": "^9.32.0",
"@preact/compat": "^18.3.1", "@preact/compat": "^18.3.1",
"@preact/preset-vite": "^2.10.2", "@preact/preset-vite": "^2.10.2",
"@trivago/prettier-plugin-sort-imports": "^5.2.2", "@trivago/prettier-plugin-sort-imports": "^5.2.2",
"@types/node": "^24.0.12", "@types/node": "^24.2.0",
"@types/react": "^19.1.8", "@types/react": "^19.1.9",
"@types/react-dom": "^19.1.6", "@types/react-dom": "^19.1.7",
"concurrently": "^9.2.0", "concurrently": "^9.2.0",
"eslint": "^9.30.1", "eslint": "^9.32.0",
"eslint-config-prettier": "^10.1.5", "eslint-config-prettier": "^10.1.8",
"prettier": "^3.6.2", "prettier": "^3.6.2",
"rollup-plugin-visualizer": "^6.0.3", "rollup-plugin-visualizer": "^6.0.3",
"terser": "^5.43.1", "terser": "^5.43.1",
"typescript-eslint": "^8.36.0", "typescript-eslint": "^8.38.0",
"vite": "^7.0.4", "vite": "^7.0.6",
"vite-plugin-imagemin": "^0.6.1", "vite-plugin-imagemin": "^0.6.1",
"vite-tsconfig-paths": "^5.1.4" "vite-tsconfig-paths": "^5.1.4"
}, },
"packageManager": "pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad" "packageManager": "pnpm@10.14.0+sha512.ad27a79641b49c3e481a16a805baa71817a04bbe06a38d17e60e2eaee83f6a146c6a688125f5792e48dd5ba30e7da52a5cda4c3992b9ccf333f9ce223af84748"
} }

1070
interface/pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -12,8 +12,8 @@
"@msgpack/msgpack": "^3.1.2", "@msgpack/msgpack": "^3.1.2",
"@trivago/prettier-plugin-sort-imports": "^5.2.2", "@trivago/prettier-plugin-sort-imports": "^5.2.2",
"formidable": "^3.5.4", "formidable": "^3.5.4",
"itty-router": "^5.0.18", "itty-router": "^5.0.21",
"prettier": "^3.6.2" "prettier": "^3.6.2"
}, },
"packageManager": "pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad" "packageManager": "pnpm@10.14.0+sha512.ad27a79641b49c3e481a16a805baa71817a04bbe06a38d17e60e2eaee83f6a146c6a688125f5792e48dd5ba30e7da52a5cda4c3992b9ccf333f9ce223af84748"
} }

View File

@@ -18,8 +18,8 @@ importers:
specifier: ^3.5.4 specifier: ^3.5.4
version: 3.5.4 version: 3.5.4
itty-router: itty-router:
specifier: ^5.0.18 specifier: ^5.0.21
version: 5.0.18 version: 5.0.21
prettier: prettier:
specifier: ^3.6.2 specifier: ^3.6.2
version: 3.6.2 version: 3.6.2
@@ -59,8 +59,8 @@ packages:
resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==} resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
'@babel/types@7.28.0': '@babel/types@7.28.2':
resolution: {integrity: sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg==} resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
'@jridgewell/gen-mapping@0.3.12': '@jridgewell/gen-mapping@0.3.12':
@@ -122,8 +122,8 @@ packages:
resolution: {integrity: sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==} resolution: {integrity: sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==}
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
itty-router@5.0.18: itty-router@5.0.21:
resolution: {integrity: sha512-mK3ReOt4ARAGy0V0J7uHmArG2USN2x0zprZ+u+YgmeRjXTDbaowDy3kPcsmQY6tH+uHhDgpWit9Vqmv/4rTXwA==} resolution: {integrity: sha512-SrmsBfXtdoIkuDMTMXqCT0kYSl9OlQZLC7llHs4fE26dZlGfi0Cm4adNL7q/ygpWyoTZobZ547h5SZu/PwB+cg==}
javascript-natural-sort@0.7.1: javascript-natural-sort@0.7.1:
resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==} resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==}
@@ -167,7 +167,7 @@ snapshots:
'@babel/generator@7.28.0': '@babel/generator@7.28.0':
dependencies: dependencies:
'@babel/parser': 7.28.0 '@babel/parser': 7.28.0
'@babel/types': 7.28.0 '@babel/types': 7.28.2
'@jridgewell/gen-mapping': 0.3.12 '@jridgewell/gen-mapping': 0.3.12
'@jridgewell/trace-mapping': 0.3.29 '@jridgewell/trace-mapping': 0.3.29
jsesc: 3.1.0 jsesc: 3.1.0
@@ -180,13 +180,13 @@ snapshots:
'@babel/parser@7.28.0': '@babel/parser@7.28.0':
dependencies: dependencies:
'@babel/types': 7.28.0 '@babel/types': 7.28.2
'@babel/template@7.27.2': '@babel/template@7.27.2':
dependencies: dependencies:
'@babel/code-frame': 7.27.1 '@babel/code-frame': 7.27.1
'@babel/parser': 7.28.0 '@babel/parser': 7.28.0
'@babel/types': 7.28.0 '@babel/types': 7.28.2
'@babel/traverse@7.28.0': '@babel/traverse@7.28.0':
dependencies: dependencies:
@@ -195,12 +195,12 @@ snapshots:
'@babel/helper-globals': 7.28.0 '@babel/helper-globals': 7.28.0
'@babel/parser': 7.28.0 '@babel/parser': 7.28.0
'@babel/template': 7.27.2 '@babel/template': 7.27.2
'@babel/types': 7.28.0 '@babel/types': 7.28.2
debug: 4.4.1 debug: 4.4.1
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@babel/types@7.28.0': '@babel/types@7.28.2':
dependencies: dependencies:
'@babel/helper-string-parser': 7.27.1 '@babel/helper-string-parser': 7.27.1
'@babel/helper-validator-identifier': 7.27.1 '@babel/helper-validator-identifier': 7.27.1
@@ -232,7 +232,7 @@ snapshots:
'@babel/generator': 7.28.0 '@babel/generator': 7.28.0
'@babel/parser': 7.28.0 '@babel/parser': 7.28.0
'@babel/traverse': 7.28.0 '@babel/traverse': 7.28.0
'@babel/types': 7.28.0 '@babel/types': 7.28.2
javascript-natural-sort: 0.7.1 javascript-natural-sort: 0.7.1
lodash: 4.17.21 lodash: 4.17.21
prettier: 3.6.2 prettier: 3.6.2
@@ -256,7 +256,7 @@ snapshots:
dezalgo: 1.0.4 dezalgo: 1.0.4
once: 1.4.0 once: 1.4.0
itty-router@5.0.18: {} itty-router@5.0.21: {}
javascript-natural-sort@0.7.1: {} javascript-natural-sort@0.7.1: {}

View File

@@ -18,10 +18,10 @@
my_build_flags = my_build_flags =
[platformio] [platformio]
; default_envs = s_16M_P ; BBQKees E32V2 default_envs = s_16M_P ; BBQKees E32V2
; default_envs = s3_16M_P ; BBQKees S3 ; default_envs = s3_16M_P ; BBQKees S3
; default_envs = s_4M ; BBQKees older S32, 4MB no psram ; default_envs = s_4M ; BBQKees older S32, 4MB no psram
default_envs = s_16M ; BBQKees newer S32 V2, 16MB no psram ; default_envs = s_16M ; BBQKees newer S32 V2, 16MB no psram
[env] [env]
@@ -30,10 +30,10 @@ default_envs = s_16M ; BBQKees newer S32 V2, 16MB no psram
; monitor_filters = colorize, esp32_exception_decoder ; monitor_filters = colorize, esp32_exception_decoder
; uncomment if you want to upload the firmware via OTA (must have upload_protocol = custom) ; uncomment if you want to upload the firmware via OTA (must have upload_protocol = custom)
; extra_scripts = extra_scripts =
; pre:scripts/build_interface.py ; builds the WebUI (unless NO_BUILD_WEBUI is set) - comment out if you don't want to build each time ; pre:scripts/build_interface.py ; builds the WebUI (unless NO_BUILD_WEBUI is set) - comment out if you don't want to build each time
; scripts/rename_fw.py ; renames the firmware .bin file - comment out if not needed scripts/rename_fw.py ; renames the firmware .bin file - comment out if not needed
; scripts/upload.py ; optionally upload the firmware via OTA (must have upload_protocol = custom) scripts/upload.py ; optionally upload the firmware via OTA (must have upload_protocol = custom)
; set the username and password for the admin account (default password is admin) ; set the username and password for the admin account (default password is admin)
custom_username = admin custom_username = admin
@@ -47,17 +47,28 @@ custom_password = admin
; upload_protocol = custom ; upload_protocol = custom
; custom_emsesp_ip = <ip address> or ems-esp.local ; custom_emsesp_ip = <ip address> or ems-esp.local
; upload_protocol = custom upload_protocol = custom
; custom_emsesp_ip = 10.10.10.93 ; custom_emsesp_ip = 10.10.10.93 ; S3
custom_emsesp_ip = 192.168.1.223 ; E32V2
; custom_emsesp_ip = 192.168.1.173 ; S32
; custom_emsesp_ip = 192.168.1.59 ; S32 (old) 4MB blue board
; example override for lib_deps and using locally built modules lib_deps =
; lib_deps = bblanchon/ArduinoJson @ 7.4.2
; bblanchon/ArduinoJson @ 7.4.2 ESP32Async/AsyncTCP @ 3.4.7
; ESP32Async/AsyncTCP @ 3.4.2 ESP32Async/ESPAsyncWebServer @ 3.7.10
; ESP32Async/ESPAsyncWebServer @ 3.7.9 file://${PROJECT_DIR}/../modules/EMS-ESP-Modules
; file://${PROJECT_DIR}/../modules/EMS-ESP-Modules
; ; https://github.com/emsesp/EMS-ESP-Modules.git @ 1.0.8 ; ; https://github.com/emsesp/EMS-ESP-Modules.git @ 1.0.8
[espressif32_base_16M]
framework = arduino
board_build.partitions = partitions/esp32_partition_16M.csv
board_upload.flash_size = 16MB
board_build.app_partition_name = app0
; platform = espressif32@6.11.0 ; Arduino Core v2.0.17 / IDF v4.4.7
; platform = https://github.com/pioarduino/platform-espressif32/releases/download/54.03.20/platform-espressif32.zip ; Arduino Core v3.2.0 / ESP-IDF v5.4.1
platform = https://github.com/pioarduino/platform-espressif32/releases/download/55.03.30/platform-espressif32.zip ; Arduino Core 3.3.0, IDF 5.5.0
; ** debug settings ** ; ** debug settings **
; to be used with esp-prog/JTAG hardware device like https://docs.espressif.com/projects/esp-dev-kits/en/latest/other/esp-prog/user_guide.html ; to be used with esp-prog/JTAG hardware device like https://docs.espressif.com/projects/esp-dev-kits/en/latest/other/esp-prog/user_guide.html
; pio run -e debug ; pio run -e debug

View File

@@ -22,8 +22,8 @@ extra_configs =
pio_local.ini pio_local.ini
[common] [common]
core_build_flags = -std=gnu++17 -O3 -flto=auto -Wno-type-limits -Wall -Wextra -Wno-unused-parameter -Wno-unused-variable -Wno-format core_build_flags = -std=c++17 -std=gnu++17 -O3 -flto=auto -Wno-type-limits -Wall -Wextra -Wno-unused-parameter -Wno-unused-variable -Wno-format
core_unbuild_flags = -std=gnu++11 -std=gnu++14 -fno-lto core_unbuild_flags = -std=gnu++11 -fno-lto
my_build_flags = my_build_flags =
@@ -101,8 +101,8 @@ build_type = release
board_build.filesystem = littlefs board_build.filesystem = littlefs
lib_deps = lib_deps =
bblanchon/ArduinoJson @ 7.4.2 bblanchon/ArduinoJson @ 7.4.2
ESP32Async/AsyncTCP @ 3.4.2 ESP32Async/AsyncTCP @ 3.4.7
ESP32Async/ESPAsyncWebServer @ 3.7.9 ESP32Async/ESPAsyncWebServer @ 3.7.10
https://github.com/emsesp/EMS-ESP-Modules.git @ 1.0.8 https://github.com/emsesp/EMS-ESP-Modules.git @ 1.0.8
; ;

View File

@@ -512,13 +512,16 @@ void System::button_OnDblClick(PButton & b) {
// button long press // button long press
void System::button_OnLongPress(PButton & b) { void System::button_OnLongPress(PButton & b) {
LOG_NOTICE("Button pressed - long press - restart from factory/boot partition"); LOG_NOTICE("Button pressed - long press - perform factory reset");
EMSESP::system_.system_restart("boot"); // this is default when first installed. it may contain the bootloader code. #ifndef EMSESP_STANDALONE
System::command_format(nullptr, 0);
#endif
} }
// button indefinite press - do nothing for now // button indefinite press - do nothing for now
void System::button_OnVLongPress(PButton & b) { void System::button_OnVLongPress(PButton & b) {
LOG_NOTICE("Button pressed - very long press"); LOG_NOTICE("Button pressed - very long press - restart from factory/boot partition");
EMSESP::system_.system_restart("boot");
} }
// push button // push button
@@ -1920,7 +1923,7 @@ bool System::load_board_profile(std::vector<int8_t> & data, const std::string &
return true; return true;
} }
// format command - factory reset, removing all config fi`les // format command - factory reset, removing all config files
bool System::command_format(const char * value, const int8_t id) { bool System::command_format(const char * value, const int8_t id) {
LOG_INFO("Removing all config files"); LOG_INFO("Removing all config files");
#ifndef EMSESP_STANDALONE #ifndef EMSESP_STANDALONE

View File

@@ -351,10 +351,10 @@ class System {
static void button_OnDblClick(PButton & b); static void button_OnDblClick(PButton & b);
static void button_OnLongPress(PButton & b); static void button_OnLongPress(PButton & b);
static void button_OnVLongPress(PButton & b); static void button_OnVLongPress(PButton & b);
static constexpr uint32_t BUTTON_Debounce = 40; // Debounce period to prevent flickering when pressing or releasing the button (in ms) static constexpr uint32_t BUTTON_Debounce = 40; // Debounce period to prevent flickering when pressing or releasing the button (in ms)
static constexpr uint32_t BUTTON_DblClickDelay = 250; // Max period between clicks for a double click event (in ms) static constexpr uint32_t BUTTON_DblClickDelay = 250; // Max period between clicks for a double click event (in ms)
static constexpr uint32_t BUTTON_LongPressDelay = 750; // Hold period for a long press event (in ms) static constexpr uint32_t BUTTON_LongPressDelay = 9500; // Hold period for a long press event (in ms) - 10 seconds
static constexpr uint32_t BUTTON_VLongPressDelay = 9000; // Hold period for a very long press event (in ms) static constexpr uint32_t BUTTON_VLongPressDelay = 20000; // Hold period for a very long press event (in ms) - 20 seconds
// healthcheck // healthcheck
#ifdef EMSESP_PINGTEST #ifdef EMSESP_PINGTEST