diff --git a/tasmota/i18n.h b/tasmota/i18n.h index 4a2a03281..8bcd461ee 100644 --- a/tasmota/i18n.h +++ b/tasmota/i18n.h @@ -421,6 +421,7 @@ #define D_CMND_COLORTEMPERATURE "CT" #define D_CMND_DIMMER "Dimmer" #define D_CMND_DIMMER_RANGE "DimmerRange" +#define D_CMND_DIMMER_STEP "DimmerStep" #define D_CMND_HSBCOLOR "HSBColor" #define D_CMND_LED "Led" #define D_CMND_LEDTABLE "LedTable" diff --git a/tasmota/settings.h b/tasmota/settings.h index 2c47ce31f..806c3386f 100644 --- a/tasmota/settings.h +++ b/tasmota/settings.h @@ -635,8 +635,9 @@ struct { uint8_t shutter_mode; // F43 uint16_t energy_power_delta[3]; // F44 uint16_t shutter_pwmrange[2][MAX_SHUTTERS]; // F4A - - uint8_t free_f5a[89]; // F5A Decrement if adding new Setting variables just above and below + uint8_t dimmer_step; // F5A + + uint8_t free_f5b[88]; // F5B - Decrement if adding new Setting variables just above and below // Only 32 bit boundary variables below SysBitfield5 flag5; // FB4 diff --git a/tasmota/settings.ino b/tasmota/settings.ino index c1aa605e1..5ee75c2ce 100644 --- a/tasmota/settings.ino +++ b/tasmota/settings.ino @@ -1015,6 +1015,8 @@ void SettingsDefaultSet2(void) Settings.dimmer_hw_max = DEFAULT_DIMMER_MAX; Settings.dimmer_hw_min = DEFAULT_DIMMER_MIN; + Settings.dimmer_step = DEFAULT_DIMMER_STEP; + // Display // Settings.display_model = 0; Settings.display_mode = 1; diff --git a/tasmota/tasmota_globals.h b/tasmota/tasmota_globals.h index fa6a4f9fc..cfb5315b7 100644 --- a/tasmota/tasmota_globals.h +++ b/tasmota/tasmota_globals.h @@ -219,6 +219,9 @@ String EthernetMacAddress(void); #ifndef DEFAULT_DIMMER_MIN #define DEFAULT_DIMMER_MIN 0 #endif +#ifndef DEFAULT_DIMMER_STEP +#define DEFAULT_DIMMER_STEP 10 +#endif #ifndef DEFAULT_LIGHT_DIMMER #define DEFAULT_LIGHT_DIMMER 10 #endif diff --git a/tasmota/xdrv_04_light.ino b/tasmota/xdrv_04_light.ino index d91666992..bfc6319b5 100644 --- a/tasmota/xdrv_04_light.ino +++ b/tasmota/xdrv_04_light.ino @@ -129,7 +129,7 @@ enum LightSchemes { LS_POWER, LS_WAKEUP, LS_CYCLEUP, LS_CYCLEDN, LS_RANDOM, LS_M const uint8_t LIGHT_COLOR_SIZE = 25; // Char array scolor size const char kLightCommands[] PROGMEM = "|" // No prefix - D_CMND_COLOR "|" D_CMND_COLORTEMPERATURE "|" D_CMND_DIMMER "|" D_CMND_DIMMER_RANGE "|" D_CMND_LEDTABLE "|" D_CMND_FADE "|" + D_CMND_COLOR "|" D_CMND_COLORTEMPERATURE "|" D_CMND_DIMMER "|" D_CMND_DIMMER_RANGE "|" D_CMND_DIMMER_STEP "|" D_CMND_LEDTABLE "|" D_CMND_FADE "|" D_CMND_RGBWWTABLE "|" D_CMND_SCHEME "|" D_CMND_SPEED "|" D_CMND_WAKEUP "|" D_CMND_WAKEUPDURATION "|" D_CMND_WHITE "|" D_CMND_CHANNEL "|" D_CMND_HSBCOLOR #ifdef USE_LIGHT_PALETTE @@ -141,7 +141,7 @@ const char kLightCommands[] PROGMEM = "|" // No prefix "|UNDOCA" ; void (* const LightCommand[])(void) PROGMEM = { - &CmndColor, &CmndColorTemperature, &CmndDimmer, &CmndDimmerRange, &CmndLedTable, &CmndFade, + &CmndColor, &CmndColorTemperature, &CmndDimmer, &CmndDimmerRange, &CmndDimmerStep, &CmndLedTable, &CmndFade, &CmndRgbwwTable, &CmndScheme, &CmndSpeed, &CmndWakeup, &CmndWakeupDuration, &CmndWhite, &CmndChannel, &CmndHsbColor, #ifdef USE_LIGHT_PALETTE @@ -2832,8 +2832,8 @@ void CmndDimmer(void) // Dimmer1 0..100 - Change RGB Dimmer // Dimmer2 0..100 - Change W(W) Dimmer // Dimmer3 0..100 - Change both RGB and W(W) Dimmers with no fading - // Dimmer + - Incerement Dimmer in steps of 10 - // Dimmer - - Decrement Dimmer in steps of 10 + // Dimmer + - Incerement Dimmer in steps of DimmerStep + // Dimmer - - Decrement Dimmer in steps of DimmerStep uint32_t dimmer; if (XdrvMailbox.index == 3) { TasmotaGlobal.skip_light_fade = true; @@ -2851,9 +2851,9 @@ void CmndDimmer(void) // Handle +/- special command if (1 == XdrvMailbox.data_len) { if ('+' == XdrvMailbox.data[0]) { - XdrvMailbox.payload = (dimmer > 89) ? 100 : dimmer + 10; + XdrvMailbox.payload = (dimmer > (100 - Settings.dimmer_step - 1)) ? 100 : dimmer + Settings.dimmer_step; } else if ('-' == XdrvMailbox.data[0]) { - XdrvMailbox.payload = (dimmer < 11) ? 1 : dimmer - 10; + XdrvMailbox.payload = (dimmer < (Settings.dimmer_step + 1)) ? 1 : dimmer - Settings.dimmer_step; } } // If value is ok, change it, otherwise report old value @@ -2910,6 +2910,22 @@ void CmndDimmerRange(void) Response_P(PSTR("{\"" D_CMND_DIMMER_RANGE "\":{\"Min\":%d,\"Max\":%d}}"), Settings.dimmer_hw_min, Settings.dimmer_hw_max); } +void CmndDimmerStep(void) +{ + // DimmerStep - Show current dimmer step as used by Dimmer +/- + // DimmerStep 1..50 - Set dimmer step + if (XdrvMailbox.data_len > 0) { + if (XdrvMailbox.payload < 1) { + Settings.dimmer_step = 1; + } else if (XdrvMailbox.payload > 50) { + Settings.dimmer_step = 50; + } else { + Settings.dimmer_step = XdrvMailbox.payload; + } + } + ResponseCmndNumber(Settings.dimmer_step); +} + void CmndLedTable(void) { // LedTable - Show current LedTable state