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
|
||||
- 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)
|
||||
- Fix missing long 10-second press of Button to perform a factory reset
|
||||
|
||||
## Changed
|
||||
|
||||
|
||||
@@ -34,34 +34,34 @@
|
||||
"jwt-decode": "^4.0.0",
|
||||
"magic-string": "^0.30.17",
|
||||
"mime-types": "^3.0.1",
|
||||
"preact": "^10.26.9",
|
||||
"react": "^19.1.0",
|
||||
"react-dom": "^19.1.0",
|
||||
"preact": "^10.27.0",
|
||||
"react": "^19.1.1",
|
||||
"react-dom": "^19.1.1",
|
||||
"react-icons": "^5.5.0",
|
||||
"react-router": "^7.6.3",
|
||||
"react-router": "^7.7.1",
|
||||
"react-toastify": "^11.0.5",
|
||||
"typesafe-i18n": "^5.26.2",
|
||||
"typescript": "^5.8.3"
|
||||
"typescript": "^5.9.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.28.0",
|
||||
"@eslint/js": "^9.30.1",
|
||||
"@eslint/js": "^9.32.0",
|
||||
"@preact/compat": "^18.3.1",
|
||||
"@preact/preset-vite": "^2.10.2",
|
||||
"@trivago/prettier-plugin-sort-imports": "^5.2.2",
|
||||
"@types/node": "^24.0.12",
|
||||
"@types/react": "^19.1.8",
|
||||
"@types/react-dom": "^19.1.6",
|
||||
"@types/node": "^24.2.0",
|
||||
"@types/react": "^19.1.9",
|
||||
"@types/react-dom": "^19.1.7",
|
||||
"concurrently": "^9.2.0",
|
||||
"eslint": "^9.30.1",
|
||||
"eslint-config-prettier": "^10.1.5",
|
||||
"eslint": "^9.32.0",
|
||||
"eslint-config-prettier": "^10.1.8",
|
||||
"prettier": "^3.6.2",
|
||||
"rollup-plugin-visualizer": "^6.0.3",
|
||||
"terser": "^5.43.1",
|
||||
"typescript-eslint": "^8.36.0",
|
||||
"vite": "^7.0.4",
|
||||
"typescript-eslint": "^8.38.0",
|
||||
"vite": "^7.0.6",
|
||||
"vite-plugin-imagemin": "^0.6.1",
|
||||
"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",
|
||||
"@trivago/prettier-plugin-sort-imports": "^5.2.2",
|
||||
"formidable": "^3.5.4",
|
||||
"itty-router": "^5.0.18",
|
||||
"itty-router": "^5.0.21",
|
||||
"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
|
||||
version: 3.5.4
|
||||
itty-router:
|
||||
specifier: ^5.0.18
|
||||
version: 5.0.18
|
||||
specifier: ^5.0.21
|
||||
version: 5.0.21
|
||||
prettier:
|
||||
specifier: ^3.6.2
|
||||
version: 3.6.2
|
||||
@@ -59,8 +59,8 @@ packages:
|
||||
resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
'@babel/types@7.28.0':
|
||||
resolution: {integrity: sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg==}
|
||||
'@babel/types@7.28.2':
|
||||
resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
'@jridgewell/gen-mapping@0.3.12':
|
||||
@@ -122,8 +122,8 @@ packages:
|
||||
resolution: {integrity: sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
|
||||
itty-router@5.0.18:
|
||||
resolution: {integrity: sha512-mK3ReOt4ARAGy0V0J7uHmArG2USN2x0zprZ+u+YgmeRjXTDbaowDy3kPcsmQY6tH+uHhDgpWit9Vqmv/4rTXwA==}
|
||||
itty-router@5.0.21:
|
||||
resolution: {integrity: sha512-SrmsBfXtdoIkuDMTMXqCT0kYSl9OlQZLC7llHs4fE26dZlGfi0Cm4adNL7q/ygpWyoTZobZ547h5SZu/PwB+cg==}
|
||||
|
||||
javascript-natural-sort@0.7.1:
|
||||
resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==}
|
||||
@@ -167,7 +167,7 @@ snapshots:
|
||||
'@babel/generator@7.28.0':
|
||||
dependencies:
|
||||
'@babel/parser': 7.28.0
|
||||
'@babel/types': 7.28.0
|
||||
'@babel/types': 7.28.2
|
||||
'@jridgewell/gen-mapping': 0.3.12
|
||||
'@jridgewell/trace-mapping': 0.3.29
|
||||
jsesc: 3.1.0
|
||||
@@ -180,13 +180,13 @@ snapshots:
|
||||
|
||||
'@babel/parser@7.28.0':
|
||||
dependencies:
|
||||
'@babel/types': 7.28.0
|
||||
'@babel/types': 7.28.2
|
||||
|
||||
'@babel/template@7.27.2':
|
||||
dependencies:
|
||||
'@babel/code-frame': 7.27.1
|
||||
'@babel/parser': 7.28.0
|
||||
'@babel/types': 7.28.0
|
||||
'@babel/types': 7.28.2
|
||||
|
||||
'@babel/traverse@7.28.0':
|
||||
dependencies:
|
||||
@@ -195,12 +195,12 @@ snapshots:
|
||||
'@babel/helper-globals': 7.28.0
|
||||
'@babel/parser': 7.28.0
|
||||
'@babel/template': 7.27.2
|
||||
'@babel/types': 7.28.0
|
||||
'@babel/types': 7.28.2
|
||||
debug: 4.4.1
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@babel/types@7.28.0':
|
||||
'@babel/types@7.28.2':
|
||||
dependencies:
|
||||
'@babel/helper-string-parser': 7.27.1
|
||||
'@babel/helper-validator-identifier': 7.27.1
|
||||
@@ -232,7 +232,7 @@ snapshots:
|
||||
'@babel/generator': 7.28.0
|
||||
'@babel/parser': 7.28.0
|
||||
'@babel/traverse': 7.28.0
|
||||
'@babel/types': 7.28.0
|
||||
'@babel/types': 7.28.2
|
||||
javascript-natural-sort: 0.7.1
|
||||
lodash: 4.17.21
|
||||
prettier: 3.6.2
|
||||
@@ -256,7 +256,7 @@ snapshots:
|
||||
dezalgo: 1.0.4
|
||||
once: 1.4.0
|
||||
|
||||
itty-router@5.0.18: {}
|
||||
itty-router@5.0.21: {}
|
||||
|
||||
javascript-natural-sort@0.7.1: {}
|
||||
|
||||
|
||||
@@ -18,10 +18,10 @@
|
||||
my_build_flags =
|
||||
|
||||
[platformio]
|
||||
; default_envs = s_16M_P ; BBQKees E32V2
|
||||
default_envs = s_16M_P ; BBQKees E32V2
|
||||
; default_envs = s3_16M_P ; BBQKees S3
|
||||
; 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]
|
||||
|
||||
@@ -30,10 +30,10 @@ default_envs = s_16M ; BBQKees newer S32 V2, 16MB no psram
|
||||
; monitor_filters = colorize, esp32_exception_decoder
|
||||
|
||||
; uncomment if you want to upload the firmware via OTA (must have upload_protocol = custom)
|
||||
; 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
|
||||
; 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)
|
||||
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
|
||||
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)
|
||||
|
||||
; set the username and password for the admin account (default password is admin)
|
||||
custom_username = admin
|
||||
@@ -47,17 +47,28 @@ custom_password = admin
|
||||
; upload_protocol = custom
|
||||
; custom_emsesp_ip = <ip address> or ems-esp.local
|
||||
|
||||
; upload_protocol = custom
|
||||
; custom_emsesp_ip = 10.10.10.93
|
||||
upload_protocol = custom
|
||||
; 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 =
|
||||
; bblanchon/ArduinoJson @ 7.4.2
|
||||
; ESP32Async/AsyncTCP @ 3.4.2
|
||||
; ESP32Async/ESPAsyncWebServer @ 3.7.9
|
||||
; file://${PROJECT_DIR}/../modules/EMS-ESP-Modules
|
||||
lib_deps =
|
||||
bblanchon/ArduinoJson @ 7.4.2
|
||||
ESP32Async/AsyncTCP @ 3.4.7
|
||||
ESP32Async/ESPAsyncWebServer @ 3.7.10
|
||||
file://${PROJECT_DIR}/../modules/EMS-ESP-Modules
|
||||
; ; 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 **
|
||||
; 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
|
||||
|
||||
@@ -22,8 +22,8 @@ extra_configs =
|
||||
pio_local.ini
|
||||
|
||||
[common]
|
||||
core_build_flags = -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_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 -fno-lto
|
||||
|
||||
my_build_flags =
|
||||
|
||||
@@ -101,8 +101,8 @@ build_type = release
|
||||
board_build.filesystem = littlefs
|
||||
lib_deps =
|
||||
bblanchon/ArduinoJson @ 7.4.2
|
||||
ESP32Async/AsyncTCP @ 3.4.2
|
||||
ESP32Async/ESPAsyncWebServer @ 3.7.9
|
||||
ESP32Async/AsyncTCP @ 3.4.7
|
||||
ESP32Async/ESPAsyncWebServer @ 3.7.10
|
||||
https://github.com/emsesp/EMS-ESP-Modules.git @ 1.0.8
|
||||
|
||||
;
|
||||
|
||||
@@ -512,13 +512,16 @@ void System::button_OnDblClick(PButton & b) {
|
||||
|
||||
// button long press
|
||||
void System::button_OnLongPress(PButton & b) {
|
||||
LOG_NOTICE("Button pressed - long press - restart from factory/boot partition");
|
||||
EMSESP::system_.system_restart("boot"); // this is default when first installed. it may contain the bootloader code.
|
||||
LOG_NOTICE("Button pressed - long press - perform factory reset");
|
||||
#ifndef EMSESP_STANDALONE
|
||||
System::command_format(nullptr, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
// button indefinite press - do nothing for now
|
||||
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
|
||||
@@ -1920,7 +1923,7 @@ bool System::load_board_profile(std::vector<int8_t> & data, const std::string &
|
||||
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) {
|
||||
LOG_INFO("Removing all config files");
|
||||
#ifndef EMSESP_STANDALONE
|
||||
|
||||
@@ -351,10 +351,10 @@ class System {
|
||||
static void button_OnDblClick(PButton & b);
|
||||
static void button_OnLongPress(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_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_VLongPressDelay = 9000; // Hold period for a very long press event (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_LongPressDelay = 9500; // Hold period for a long press event (in ms) - 10 seconds
|
||||
static constexpr uint32_t BUTTON_VLongPressDelay = 20000; // Hold period for a very long press event (in ms) - 20 seconds
|
||||
|
||||
// healthcheck
|
||||
#ifdef EMSESP_PINGTEST
|
||||
|
||||
Reference in New Issue
Block a user