diff --git a/tasmota/i18n.h b/tasmota/i18n.h index 252701637..b44c414de 100644 --- a/tasmota/i18n.h +++ b/tasmota/i18n.h @@ -616,6 +616,7 @@ // Commands xdrv_34_pwm_dimmer.ino #ifdef USE_PWM_DIMMER #define D_CMND_BRI_PRESET "BriPreset" +#define D_CMND_PWM_DIMMER_PWMS "PWMDimmerPWMs" #endif // Commands xdrv_38_ping.ino diff --git a/tasmota/settings.h b/tasmota/settings.h index b4598f987..842444c03 100644 --- a/tasmota/settings.h +++ b/tasmota/settings.h @@ -277,6 +277,18 @@ typedef union { }; } SensorCfg1; +typedef union { + uint8_t data; + struct { + uint8_t pwm_count : 3; // Number of PWMs to use for light + uint8_t spare3 : 1; + uint8_t spare4 : 1; + uint8_t spare5 : 1; + uint8_t spare6 : 1; + uint8_t spare7 : 1; + }; +} PWMDimmerCfg; + typedef union { uint8_t data; struct { @@ -589,7 +601,7 @@ struct { uint8_t sps30_inuse_hours; // F02 uint8_t hotplug_scan; // F03 uint8_t bri_power_on; // F04 - uint8_t bri_min; // F05 + PWMDimmerCfg pwm_dimmer_cfg; // F05 uint8_t bri_preset_low; // F06 uint8_t bri_preset_high; // F07 int8_t hum_comp; // F08 diff --git a/tasmota/xdrv_04_light.ino b/tasmota/xdrv_04_light.ino index b90d882c8..e0e3a7e66 100644 --- a/tasmota/xdrv_04_light.ino +++ b/tasmota/xdrv_04_light.ino @@ -564,9 +564,6 @@ class LightStateClass { #ifdef DEBUG_LIGHT AddLog_P2(LOG_LEVEL_DEBUG_MORE, "LightStateClass::setBri RGB raw (%d %d %d) HS (%d %d) bri (%d)", _r, _g, _b, _hue, _sat, _briRGB); #endif -#ifdef USE_PWM_DIMMER - if (PWM_DIMMER == my_module_type) PWMDimmerSetBrightnessLeds(0); -#endif // USE_PWM_DIMMER } // changes the RGB brightness alone @@ -574,6 +571,9 @@ class LightStateClass { uint8_t prev_bri = _briRGB; _briRGB = bri_rgb; if (bri_rgb > 0) { addRGBMode(); } +#ifdef USE_PWM_DIMMER + if (PWM_DIMMER == my_module_type) PWMDimmerSetBrightnessLeds(0); +#endif // USE_PWM_DIMMER return prev_bri; } @@ -582,6 +582,9 @@ class LightStateClass { uint8_t prev_bri = _briCT; _briCT = bri_ct; if (bri_ct > 0) { addCTMode(); } +#ifdef USE_PWM_DIMMER + if (PWM_DIMMER == my_module_type) PWMDimmerSetBrightnessLeds(0); +#endif // USE_PWM_DIMMER return prev_bri; } @@ -1275,6 +1278,13 @@ bool LightModuleInit(void) light_type = LT_PWM2; } #endif // ESP8266 +#ifdef USE_PWM_DIMMER +#ifdef USE_DEVICE_GROUPS + else if (PWM_DIMMER == my_module_type) { + light_type = Settings.pwm_dimmer_cfg.pwm_count + 1; + } +#endif // USE_DEVICE_GROUPS +#endif // USE_PWM_DIMMER if (light_type > LT_BASIC) { devices_present++; diff --git a/tasmota/xdrv_35_pwm_dimmer.ino b/tasmota/xdrv_35_pwm_dimmer.ino index 0e7a7bea8..fc2de3034 100644 --- a/tasmota/xdrv_35_pwm_dimmer.ino +++ b/tasmota/xdrv_35_pwm_dimmer.ino @@ -33,10 +33,18 @@ #define XDRV_35 35 const char kPWMDimmerCommands[] PROGMEM = "|" // No prefix - D_CMND_BRI_PRESET; + D_CMND_BRI_PRESET +#ifdef USE_DEVICE_GROUPS + "|" D_CMND_PWM_DIMMER_PWMS +#endif // USE_DEVICE_GROUPS + ; void (* const PWMDimmerCommand[])(void) PROGMEM = { - &CmndBriPreset }; + &CmndBriPreset, +#ifdef USE_DEVICE_GROUPS + &CmndPWMDimmerPWMs, +#endif // USE_DEVICE_GROUPS + }; #ifdef USE_PWM_DIMMER_REMOTE struct remote_pwm_dimmer { @@ -731,6 +739,17 @@ void CmndBriPreset(void) Response_P(PSTR("{\"" D_CMND_BRI_PRESET "\":{\"Low\":%d,\"High\":%d}}"), Settings.bri_preset_low, Settings.bri_preset_high); } +#ifdef USE_DEVICE_GROUPS +void CmndPWMDimmerPWMs(void) +{ + if (XdrvMailbox.data_len > 0 && XdrvMailbox.payload <= 5) { + Settings.pwm_dimmer_cfg.pwm_count = XdrvMailbox.payload - 1; + restart_flag = 2; + } + Response_P(PSTR("{\"" D_CMND_PWM_DIMMER_PWMS "\":%u}"), Settings.pwm_dimmer_cfg.pwm_count + 1); +} +#endif // USE_DEVICE_GROUPS + /*********************************************************************************************\ * Interface \*********************************************************************************************/