From bfcd156ee0f9262de51241f9e56dc8f0c842cc5e Mon Sep 17 00:00:00 2001 From: Stephan Hadinger Date: Sat, 2 Nov 2019 18:32:46 +0100 Subject: [PATCH] Fix wrong Dimmer behavior introduced with #6799 when SetOption37 < 128 --- tasmota/_changelog.ino | 1 + tasmota/xdrv_04_light.ino | 22 +++++++++++++++------- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/tasmota/_changelog.ino b/tasmota/_changelog.ino index 415761303..5de8cf199 100644 --- a/tasmota/_changelog.ino +++ b/tasmota/_changelog.ino @@ -2,6 +2,7 @@ * 7.0.0.2 20191102 * Add command WebColor19 to control color of Module and Name (#6811) * Add support for Honeywell I2C HIH series Humidity and Temperetaure sensor (#6808) + * Fix wrong Dimmer behavior introduced with #6799 when SetOption37 < 128 * * 7.0.0.1 20191027 * Remove references to versions before 6.0 diff --git a/tasmota/xdrv_04_light.ino b/tasmota/xdrv_04_light.ino index f4fb6dbab..034ed005f 100644 --- a/tasmota/xdrv_04_light.ino +++ b/tasmota/xdrv_04_light.ino @@ -2163,11 +2163,12 @@ void CmndColorTemperature(void) void CmndDimmer(void) { uint32_t dimmer; - - if ((1 == XdrvMailbox.index) || (2 == XdrvMailbox.index)) { // Dimmer1 is RGB, Dimmer 2 iw white - dimmer = light_state.getDimmer(XdrvMailbox.index); - } else { + if (XdrvMailbox.index > 2) { XdrvMailbox.index = 1; } + + if ((light_controller.isCTRGBLinked()) || (0 == XdrvMailbox.index)) { dimmer = light_state.getDimmer(); + } else { + dimmer = light_state.getDimmer(XdrvMailbox.index); } // Handle +/- special command if (1 == XdrvMailbox.data_len) { @@ -2179,10 +2180,17 @@ void CmndDimmer(void) } // If value is ok, change it, otherwise report old value if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 100)) { - if ((1 == XdrvMailbox.index) || (2 == XdrvMailbox.index)) { - light_controller.changeDimmer(XdrvMailbox.payload, XdrvMailbox.index); - } else { + if (light_controller.isCTRGBLinked()) { + // normal state, linked RGB and CW light_controller.changeDimmer(XdrvMailbox.payload); + } else { + if (0 != XdrvMailbox.index) { + light_controller.changeDimmer(XdrvMailbox.payload, XdrvMailbox.index); + } else { + // change both dimmers + light_controller.changeDimmer(XdrvMailbox.payload, 1); + light_controller.changeDimmer(XdrvMailbox.payload, 2); + } } Light.update = true; LightPreparePower();