mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-07 00:09:51 +03:00
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
1070
interface/pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@@ -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"
|
||||||
}
|
}
|
||||||
|
|||||||
26
mock-api/pnpm-lock.yaml
generated
26
mock-api/pnpm-lock.yaml
generated
@@ -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: {}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -353,8 +353,8 @@ class System {
|
|||||||
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
|
||||||
|
|||||||
Reference in New Issue
Block a user