mirror of
https://github.com/arendst/Tasmota.git
synced 2025-04-25 07:17:16 +00:00
Merge pull request #13007 from Seestern93/DimmerNewState
SwitchMode11 & 12 (Dimmer) new state#10 as delayed single-press
This commit is contained in:
commit
1b5406fdd9
@ -37,7 +37,7 @@ const uint8_t AC_PERIOD = (20 + SWITCH_FAST_PROBE_INTERVAL - 1) / SWITCH_FAST_PR
|
|||||||
#define POWER_NONE 99
|
#define POWER_NONE 99
|
||||||
|
|
||||||
const char kSwitchPressStates[] PROGMEM =
|
const char kSwitchPressStates[] PROGMEM =
|
||||||
"||||POWER_INCREMENT|POWER_INV|POWER_CLEAR|POWER_RELEASE|POWER_100|";
|
"||||POWER_INCREMENT|POWER_INV|POWER_CLEAR|POWER_RELEASE|POWER_100||POWER_DELAYED";
|
||||||
|
|
||||||
#include <Ticker.h>
|
#include <Ticker.h>
|
||||||
|
|
||||||
@ -237,32 +237,21 @@ void SwitchHandler(uint32_t mode) {
|
|||||||
uint32_t mqtt_action = POWER_NONE;
|
uint32_t mqtt_action = POWER_NONE;
|
||||||
uint32_t switchmode = Settings->switchmode[i];
|
uint32_t switchmode = Settings->switchmode[i];
|
||||||
|
|
||||||
bool push_hold_multi_delay = ((PUSHHOLDMULTIDELAY == switchmode) || (PUSHHOLDMULTIDELAY_INV == switchmode));
|
if (Switch.hold_timer[i] & (((switchmode == PUSHHOLDMULTI) | (switchmode == PUSHHOLDMULTI_INV)) ? SM_TIMER_MASK: SM_NO_TIMER_MASK)) {
|
||||||
if (push_hold_multi_delay) {
|
|
||||||
switchmode -= (PUSHHOLDMULTIDELAY - PUSHHOLDMULTI);
|
|
||||||
}
|
|
||||||
bool push_hold_multi = ((PUSHHOLDMULTI == switchmode) || (PUSHHOLDMULTI_INV == switchmode));
|
|
||||||
|
|
||||||
if (Switch.hold_timer[i] & ((push_hold_multi) ? SM_TIMER_MASK : SM_NO_TIMER_MASK)) {
|
|
||||||
Switch.hold_timer[i]--;
|
Switch.hold_timer[i]--;
|
||||||
if ((Switch.hold_timer[i] & SM_TIMER_MASK) == loops_per_second * Settings->param[P_HOLD_TIME] / 25) {
|
if ((Switch.hold_timer[i] & SM_TIMER_MASK) == loops_per_second * Settings->param[P_HOLD_TIME] / 25) {
|
||||||
bool do_sendkey = false;
|
if ((switchmode == PUSHHOLDMULTI) | (switchmode == PUSHHOLDMULTI_INV)){
|
||||||
switch (switchmode) {
|
if (((switchmode == PUSHHOLDMULTI) & (NOT_PRESSED == Switch.last_state[i])) | ((switchmode == PUSHHOLDMULTI_INV) & (PRESSED == Switch.last_state[i]))) {
|
||||||
case PUSHHOLDMULTI:
|
SendKey(KEY_SWITCH, i +1, POWER_INCREMENT); // Execute command via MQTT
|
||||||
do_sendkey = (NOT_PRESSED == Switch.last_state[i]);
|
}
|
||||||
break;
|
else if ((Switch.hold_timer[i] & ~SM_TIMER_MASK) == SM_FIRST_PRESS) {
|
||||||
case PUSHHOLDMULTI_INV:
|
SendKey(KEY_SWITCH, i +1, POWER_DELAYED); // Execute command via MQTT
|
||||||
do_sendkey = (PRESSED == Switch.last_state[i]);
|
mqtt_action = POWER_DELAYED;
|
||||||
break;
|
Switch.hold_timer[i] = 0;
|
||||||
}
|
}
|
||||||
if (do_sendkey) {
|
|
||||||
SendKey(KEY_SWITCH, i +1, POWER_INCREMENT); // Execute command via MQTT
|
|
||||||
} else if (push_hold_multi_delay && ((Switch.hold_timer[i] & ~SM_TIMER_MASK) == SM_FIRST_PRESS)) {
|
|
||||||
switchflag = POWER_TOGGLE; // Toggle with pushbutton
|
|
||||||
Switch.hold_timer[i] = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (0 == (Switch.hold_timer[i] & ((push_hold_multi) ? SM_TIMER_MASK: SM_NO_TIMER_MASK))) {
|
if (0 == (Switch.hold_timer[i] & (((switchmode == PUSHHOLDMULTI) | (switchmode == PUSHHOLDMULTI_INV)) ? SM_TIMER_MASK: SM_NO_TIMER_MASK))) {
|
||||||
switch (switchmode) {
|
switch (switchmode) {
|
||||||
case TOGGLEMULTI:
|
case TOGGLEMULTI:
|
||||||
switchflag = POWER_TOGGLE; // Toggle after hold
|
switchflag = POWER_TOGGLE; // Toggle after hold
|
||||||
@ -365,9 +354,7 @@ void SwitchHandler(uint32_t mode) {
|
|||||||
if ((Switch.hold_timer[i] & SM_TIMER_MASK) > loops_per_second * Settings->param[P_HOLD_TIME] / 25) {
|
if ((Switch.hold_timer[i] & SM_TIMER_MASK) > loops_per_second * Settings->param[P_HOLD_TIME] / 25) {
|
||||||
if ((Switch.hold_timer[i] & ~SM_TIMER_MASK) != SM_SECOND_PRESS) {
|
if ((Switch.hold_timer[i] & ~SM_TIMER_MASK) != SM_SECOND_PRESS) {
|
||||||
Switch.hold_timer[i]= SM_FIRST_PRESS;
|
Switch.hold_timer[i]= SM_FIRST_PRESS;
|
||||||
if (!push_hold_multi_delay) {
|
switchflag = POWER_TOGGLE; // Toggle with pushbutton
|
||||||
switchflag = POWER_TOGGLE; // Toggle with pushbutton
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
SendKey(KEY_SWITCH, i +1, POWER_100); // Execute command via MQTT
|
SendKey(KEY_SWITCH, i +1, POWER_100); // Execute command via MQTT
|
||||||
@ -393,9 +380,7 @@ void SwitchHandler(uint32_t mode) {
|
|||||||
if ((Switch.hold_timer[i] & SM_TIMER_MASK)> loops_per_second * Settings->param[P_HOLD_TIME] / 25) {
|
if ((Switch.hold_timer[i] & SM_TIMER_MASK)> loops_per_second * Settings->param[P_HOLD_TIME] / 25) {
|
||||||
if ((Switch.hold_timer[i] & ~SM_TIMER_MASK) != SM_SECOND_PRESS) {
|
if ((Switch.hold_timer[i] & ~SM_TIMER_MASK) != SM_SECOND_PRESS) {
|
||||||
Switch.hold_timer[i]= SM_FIRST_PRESS;
|
Switch.hold_timer[i]= SM_FIRST_PRESS;
|
||||||
if (!push_hold_multi_delay) {
|
switchflag = POWER_TOGGLE; // Toggle with pushbutton
|
||||||
switchflag = POWER_TOGGLE; // Toggle with pushbutton
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
SendKey(KEY_SWITCH, i +1, POWER_100); // Execute command via MQTT
|
SendKey(KEY_SWITCH, i +1, POWER_100); // Execute command via MQTT
|
||||||
|
@ -515,6 +515,7 @@ bool SendKey(uint32_t key, uint32_t device, uint32_t state)
|
|||||||
// state 6 = POWER_CLEAR = button released
|
// state 6 = POWER_CLEAR = button released
|
||||||
// state 7 = POWER_RELEASE = button released
|
// state 7 = POWER_RELEASE = button released
|
||||||
// state 9 = CLEAR_RETAIN = clear retain flag
|
// state 9 = CLEAR_RETAIN = clear retain flag
|
||||||
|
// state 10 = POWER_DELAYED = button released delayed
|
||||||
|
|
||||||
char stopic[TOPSZ];
|
char stopic[TOPSZ];
|
||||||
char scommand[CMDSZ];
|
char scommand[CMDSZ];
|
||||||
|
@ -280,8 +280,7 @@ enum LoggingLevels {LOG_LEVEL_NONE, LOG_LEVEL_ERROR, LOG_LEVEL_INFO, LOG_LEVEL_D
|
|||||||
enum WifiConfigOptions {WIFI_RESTART, EX_WIFI_SMARTCONFIG, WIFI_MANAGER, EX_WIFI_WPSCONFIG, WIFI_RETRY, WIFI_WAIT, WIFI_SERIAL, WIFI_MANAGER_RESET_ONLY, MAX_WIFI_OPTION};
|
enum WifiConfigOptions {WIFI_RESTART, EX_WIFI_SMARTCONFIG, WIFI_MANAGER, EX_WIFI_WPSCONFIG, WIFI_RETRY, WIFI_WAIT, WIFI_SERIAL, WIFI_MANAGER_RESET_ONLY, MAX_WIFI_OPTION};
|
||||||
|
|
||||||
enum SwitchModeOptions {TOGGLE, FOLLOW, FOLLOW_INV, PUSHBUTTON, PUSHBUTTON_INV, PUSHBUTTONHOLD, PUSHBUTTONHOLD_INV, PUSHBUTTON_TOGGLE, TOGGLEMULTI,
|
enum SwitchModeOptions {TOGGLE, FOLLOW, FOLLOW_INV, PUSHBUTTON, PUSHBUTTON_INV, PUSHBUTTONHOLD, PUSHBUTTONHOLD_INV, PUSHBUTTON_TOGGLE, TOGGLEMULTI,
|
||||||
FOLLOWMULTI, FOLLOWMULTI_INV, PUSHHOLDMULTI, PUSHHOLDMULTI_INV, PUSHON, PUSHON_INV, PUSH_IGNORE, PUSHNOTUSED, PUSHHOLDMULTIDELAY,
|
FOLLOWMULTI, FOLLOWMULTI_INV, PUSHHOLDMULTI, PUSHHOLDMULTI_INV, PUSHON, PUSHON_INV, PUSH_IGNORE, MAX_SWITCH_OPTION};
|
||||||
PUSHHOLDMULTIDELAY_INV, MAX_SWITCH_OPTION};
|
|
||||||
|
|
||||||
enum LedStateOptions {LED_OFF, LED_POWER, LED_MQTTSUB, LED_POWER_MQTTSUB, LED_MQTTPUB, LED_POWER_MQTTPUB, LED_MQTT, LED_POWER_MQTT, MAX_LED_OPTION};
|
enum LedStateOptions {LED_OFF, LED_POWER, LED_MQTTSUB, LED_POWER_MQTTSUB, LED_MQTTPUB, LED_POWER_MQTTPUB, LED_MQTT, LED_POWER_MQTT, MAX_LED_OPTION};
|
||||||
|
|
||||||
@ -294,7 +293,8 @@ enum UploadTypes { UPL_TASMOTA = 1, UPL_SETTINGS, UPL_EFM8BB1, UPL_TASMOTACLIENT
|
|||||||
enum ExecuteCommandPowerOptions { POWER_OFF, POWER_ON, POWER_TOGGLE, POWER_BLINK, POWER_BLINK_STOP,
|
enum ExecuteCommandPowerOptions { POWER_OFF, POWER_ON, POWER_TOGGLE, POWER_BLINK, POWER_BLINK_STOP,
|
||||||
POWER_OFF_NO_STATE = 8, POWER_ON_NO_STATE, POWER_TOGGLE_NO_STATE,
|
POWER_OFF_NO_STATE = 8, POWER_ON_NO_STATE, POWER_TOGGLE_NO_STATE,
|
||||||
POWER_SHOW_STATE = 16 };
|
POWER_SHOW_STATE = 16 };
|
||||||
enum SendKeyPowerOptions { POWER_HOLD = 3, POWER_INCREMENT = 4, POWER_INV = 5, POWER_CLEAR = 6, POWER_RELEASE = 7, POWER_100 = 8, CLEAR_RETAIN = 9 };
|
enum SendKeyPowerOptions { POWER_HOLD = 3, POWER_INCREMENT = 4, POWER_INV = 5, POWER_CLEAR = 6, POWER_RELEASE = 7,
|
||||||
|
POWER_100 = 8, CLEAR_RETAIN = 9, POWER_DELAYED = 10 };
|
||||||
enum SendKeyOptions { KEY_BUTTON, KEY_SWITCH };
|
enum SendKeyOptions { KEY_BUTTON, KEY_SWITCH };
|
||||||
enum SendKeyMultiClick { SINGLE = 10, DOUBLE = 11, TRIPLE = 12, QUAD = 13, PENTA = 14};
|
enum SendKeyMultiClick { SINGLE = 10, DOUBLE = 11, TRIPLE = 12, QUAD = 13, PENTA = 14};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user