diff --git a/sonoff/_releasenotes.ino b/sonoff/_releasenotes.ino index 4b0a6d335..07d30af84 100644 --- a/sonoff/_releasenotes.ino +++ b/sonoff/_releasenotes.ino @@ -5,6 +5,7 @@ * Change MQTT response topic for Energy changes from ENERGY to SENSOR (#2229, #2251) * Add Home Assistant MQTT Discovery for Buttons and change SetOption19 response (#2277) * Change webpage parameter communication + * Change default Reset configuration time from 4 seconds to 40 seconds on Button hold (#2268) * * 5.12.0h * Add optional Arduino OTA support to be enabled in user_config.h (#1998) diff --git a/sonoff/sonoff.h b/sonoff/sonoff.h index 5511856c4..61ef81adb 100644 --- a/sonoff/sonoff.h +++ b/sonoff/sonoff.h @@ -80,6 +80,7 @@ typedef unsigned long power_t; // Power (Relay) type #define MAX_POWER_RETRY 5 // Retry count allowing agreed power limit overflow #define STATES 20 // State loops per second +#define IMMINENT_RESET_FACTOR 10 // Factor to extent button hold time for imminent Reset to default 40 seconds using KEY_HOLD_TIME of 40 #define SYSLOG_TIMER 600 // Seconds to restore syslog_level #define SERIALLOG_TIMER 600 // Seconds to disable SerialLog #define OTA_ATTEMPTS 5 // Number of times to try fetching the new firmware diff --git a/sonoff/sonoff.ino b/sonoff/sonoff.ino index 9703b62e8..90abae7b5 100644 --- a/sonoff/sonoff.ino +++ b/sonoff/sonoff.ino @@ -31,7 +31,11 @@ #include // Arduino_Esp8266 version information (ARDUINO_ESP8266_RELEASE and ARDUINO_ESP8266_RELEASE_2_3_0) #include "sonoff.h" // Enumeration used in user_config.h #include "user_config.h" // Fixed user configurable options -#include "user_config_override.h" // Configuration overrides for user_config.h + +//#ifdef USE_CONFIG_OVERRIDE + #include "user_config_override.h" // Configuration overrides for user_config.h +//#endif + #include "i18n.h" // Language support configured by user_config.h #include "sonoff_template.h" // Hardware configuration #include "sonoff_post.h" // Configuration overrides for all previous includes @@ -572,7 +576,6 @@ void MqttDataHandler(char* topic, byte* data, unsigned int data_len) switch (index) { case 3: // mqtt case 15: // pwm_control -// case 19: // hass_discovery restart_flag = 2; case 0: // save_state case 1: // button_restrict @@ -1478,6 +1481,7 @@ void ButtonHandler() { uint8_t button = NOT_PRESSED; uint8_t button_present = 0; + uint8_t hold_time_extent = IMMINENT_RESET_FACTOR; // Extent hold time factor in case of iminnent Reset command char scmnd[20]; uint8_t maxdev = (devices_present > MAX_KEYS) ? MAX_KEYS : devices_present; @@ -1493,6 +1497,7 @@ void ButtonHandler() button = PRESSED; if (0xF500 == dual_button_code) { // Button hold holdbutton[button_index] = (Settings.param[P_HOLD_TIME] * (STATES / 10)) -1; + hold_time_extent = 0; } dual_button_code = 0; } @@ -1545,20 +1550,23 @@ void ButtonHandler() holdbutton[button_index] = 0; } else { holdbutton[button_index]++; - if (Settings.flag.button_single) { // Allow only single button press for immediate action - if (holdbutton[button_index] == Settings.param[P_HOLD_TIME] * (STATES / 10) * 4) { // Button hold for four times longer + if (Settings.flag.button_single) { // Allow only single button press for immediate action + if (holdbutton[button_index] == Settings.param[P_HOLD_TIME] * (STATES / 10) * hold_time_extent) { // Button held for factor times longer // Settings.flag.button_single = 0; snprintf_P(scmnd, sizeof(scmnd), PSTR(D_CMND_SETOPTION "13 0")); // Disable single press only ExecuteCommand(scmnd); } } else { - if (holdbutton[button_index] == Settings.param[P_HOLD_TIME] * (STATES / 10)) { // Button hold - multipress[button_index] = 0; - if (!Settings.flag.button_restrict) { // No button restriction + if (Settings.flag.button_restrict) { // Button restriction + if (holdbutton[button_index] == Settings.param[P_HOLD_TIME] * (STATES / 10)) { // Button hold + multipress[button_index] = 0; + send_button_power(0, button_index +1, 3); // Execute Hold command via MQTT if ButtonTopic is set + } + } else { + if (holdbutton[button_index] == (Settings.param[P_HOLD_TIME] * (STATES / 10)) * hold_time_extent) { // Button held for factor times longer + multipress[button_index] = 0; snprintf_P(scmnd, sizeof(scmnd), PSTR(D_CMND_RESET " 1")); ExecuteCommand(scmnd); - } else { - send_button_power(0, button_index +1, 3); // Execute Hold command via MQTT if ButtonTopic is set } } }