added application setting 'disable factory' Feature request->Button anti tampering mode

Fixes #3150
This commit is contained in:
proddy
2026-07-26 13:34:15 +02:00
parent e584adaa07
commit 2bef33f81a
25 changed files with 64 additions and 8 deletions
+1 -1
View File
@@ -131,7 +131,7 @@ void LED::led_fast_flash() {
set_led(led_flash_state_ ? Color::YELLOW : Color::OFF); // Yellow
}
// after duration, turn off the LED
// after duration, turn off the LED, and call the format command
if (current_time - led_flash_start_time_ >= led_flash_duration_) {
set_led(Color::OFF);
led_fast_flash_timer_ = false;
+12
View File
@@ -677,6 +677,7 @@ void System::store_settings(WebSettings & settings) {
locale_ = settings.locale;
system_name_ = settings.system_name;
developer_mode_ = settings.developer_mode;
disable_reset_ = settings.disable_reset;
}
// Starts up core services
@@ -761,6 +762,10 @@ void System::button_OnLongPress(PButton & b) {
// button indefinite press
void System::button_OnVLongPress(PButton & b) {
if (EMSESP::system_.disable_reset()) {
LOG_NOTICE("Factory reset disabled");
return;
}
LOG_NOTICE("Button pressed - very long press - perform factory reset");
EMSESP::led_.start_led_fast_flash(5); // Start LED flash timer for 5 seconds
}
@@ -2646,6 +2651,7 @@ bool System::command_info(const char * value, const int8_t id, JsonObject output
node["modbusEnabled"] = settings.modbus_enabled;
node["forceHeatingOff"] = settings.boiler_heatingoff;
node["developerMode"] = settings.developer_mode;
node["disableReset"] = settings.disable_reset;
});
// Devices - show EMS devices if we have any
@@ -2870,6 +2876,12 @@ bool System::command_txpause(const char * value, const int8_t id) {
// format command - factory reset, removing all config files
bool System::command_format(const char * value, const int8_t id) {
if (EMSESP::system_.disable_reset()) {
LOG_NOTICE("Factory reset disabled");
return false;
}
#if !defined(EMSESP_STANDALONE) && !defined(EMSESP_TEST)
// don't really format the filesystem in test or standalone mode
if (LittleFS.format()) {
+9
View File
@@ -199,6 +199,14 @@ class System {
developer_mode_ = developer_mode;
}
bool disable_reset() {
return disable_reset_;
}
void disable_reset(bool disable_reset) {
disable_reset_ = disable_reset;
}
// Boolean Format API/MQTT
uint8_t bool_format() {
return bool_format_;
@@ -438,6 +446,7 @@ class System {
uint8_t modbus_max_clients_;
uint32_t modbus_timeout_;
bool developer_mode_;
bool disable_reset_;
uint32_t fstotal_;
uint32_t psram_;
uint32_t appused_;
+4
View File
@@ -84,6 +84,7 @@ void WebSettings::read(WebSettings & settings, JsonObject root) {
root["modbus_max_clients"] = settings.modbus_max_clients;
root["modbus_timeout"] = settings.modbus_timeout;
root["developer_mode"] = settings.developer_mode;
root["disable_reset"] = settings.disable_reset;
root["email_enabled"] = settings.email_enabled;
root["email_security"] = settings.email_security;
root["email_server"] = settings.email_server;
@@ -306,6 +307,9 @@ StateUpdateResult WebSettings::update(JsonObject root, WebSettings & settings) {
settings.developer_mode = root["developer_mode"];
EMSESP::system_.developer_mode(settings.developer_mode);
settings.disable_reset = root["disable_reset"];
EMSESP::system_.disable_reset(settings.disable_reset);
settings.bool_dashboard = root["bool_dashboard"] | EMSESP_DEFAULT_BOOL_FORMAT;
EMSESP::system_.bool_dashboard(settings.bool_dashboard);
+2 -1
View File
@@ -121,7 +121,8 @@ class WebSettings {
uint8_t eth_clock_mode;
bool developer_mode; // developer mode
bool disable_reset; // disable reset
static void read(WebSettings & settings, JsonObject root);
static StateUpdateResult update(JsonObject root, WebSettings & settings);