From 6b013144ab4a3ec939667015947da130d38fd4e4 Mon Sep 17 00:00:00 2001 From: thirug010 <30732819+thirug010@users.noreply.github.com> Date: Sat, 18 May 2019 18:13:57 -0500 Subject: [PATCH] Updated the code based on the feedback * Updated xdrv_01_webserver.ino to show dimmer slider2 by default for Tuya Dimmer Module * Updated xdrv_16_tuyadimmer.ino remove the use of XdrvMailbox and removed the pow functions now the size for 6.5.0 build is 510kb * updated sonoff.ino to hold current device id --- sonoff/_changelog.ino | 11 +++++++++-- sonoff/sonoff.ino | 3 ++- sonoff/xdrv_01_webserver.ino | 2 +- sonoff/xdrv_16_tuyadimmer.ino | 29 +++++++++++++---------------- 4 files changed, 25 insertions(+), 20 deletions(-) diff --git a/sonoff/_changelog.ino b/sonoff/_changelog.ino index 08bf234da..7e2852ff8 100644 --- a/sonoff/_changelog.ino +++ b/sonoff/_changelog.ino @@ -1,8 +1,15 @@ -/* 6.5.0.12 20190517 +/* + * 6.5.0.13 20190518 + * Updated xdrv_01_webserver.ino to show dimmer slider2 by default for Tuya Dimmer Module optionally disabled for non dimmers + * Updated xdrv_16_tuyadimmer.ino remove the use of XdrvMailbox and removed the pow functions + * updated sonoff.ino to hold current device id + * + * 6.5.0.12 20190517 * Add command SetOption65 (tuya_show_dimmer) to enable or disable dimmer Slider ( for 4 Gang Tuya switch) * Added Seeting.pram9 to define no of Tuya MCU devices - * Updated xdrv_01_webserver.ino to check for the tuya_show_dimmer option to display slider2 + * Updated xdrv_01_webserver.ino to check for the tuya_show_dimmer option to display slider2 * Updated xdrv_16_tuyadimmer.ino create bool serial packet based on the Device Id and set the power status based on the Device id from MCU packet + * * 6.5.0.11 20190517 * Add command SetOption64 0/1 to switch between "-" or "_" as sensor index separator impacting DS18X20, DHT, BMP and SHT3X sensor names (#5689) * diff --git a/sonoff/sonoff.ino b/sonoff/sonoff.ino index d58955234..d90c8ef68 100755 --- a/sonoff/sonoff.ino +++ b/sonoff/sonoff.ino @@ -109,6 +109,7 @@ unsigned long pulse_timer[MAX_PULSETIMERS] = { 0 }; // Power off timer unsigned long blink_timer = 0; // Power cycle timer unsigned long backlog_delay = 0; // Command backlog delay power_t power = 0; // Current copy of Settings.power +power_t deviceid = 1; // hold current deviceid power_t blink_power; // Blink power state power_t blink_mask = 0; // Blink relay active mask power_t blink_powersave; // Blink start power save state @@ -1535,7 +1536,7 @@ void ExecuteCommandPower(uint8_t device, uint8_t state, int source) // ShowSource(source); - XdrvMailbox.notused = device; + deviceid = device; if (SONOFF_IFAN02 == my_module_type) { blink_mask &= 1; // No blinking on the fan relays diff --git a/sonoff/xdrv_01_webserver.ino b/sonoff/xdrv_01_webserver.ino index 0b33152a6..f714169ab 100644 --- a/sonoff/xdrv_01_webserver.ino +++ b/sonoff/xdrv_01_webserver.ino @@ -890,7 +890,7 @@ void HandleRoot(void) if ((LST_COLDWARM == (light_type &7)) || (LST_RGBWC == (light_type &7))) { WSContentSend_P(HTTP_MSG_SLIDER1, LightGetColorTemp()); } - if(Settings.flag3.tuya_show_dimmer == 1) + if(Settings.flag3.tuya_show_dimmer == 0) { WSContentSend_P(HTTP_MSG_SLIDER2, Settings.light_dimmer); } diff --git a/sonoff/xdrv_16_tuyadimmer.ino b/sonoff/xdrv_16_tuyadimmer.ino index 5e883b12c..4b0ebfcd8 100644 --- a/sonoff/xdrv_16_tuyadimmer.ino +++ b/sonoff/xdrv_16_tuyadimmer.ino @@ -123,26 +123,23 @@ bool TuyaSetPower(void) int16_t source = XdrvMailbox.payload; if (source != SRC_SWITCH && TuyaSerial) { // ignore to prevent loop from pushing state from faceplate interaction - boolean Bin[] = {0,0,0,0}; - convertDecToBin(rpower, Bin); - TuyaSendBool(XdrvMailbox.notused, Bin[XdrvMailbox.notused-1]); - + TuyaSendBool(deviceid, TuyaGetPower(rpower, deviceid)); status = true; } return status; } -void convertDecToBin(int Dec, boolean Bin[]) { - for(int i = 3 ; i >= 0 ; i--) { - if(pow(2, i)<=Dec) { - Dec = Dec - pow(2, i); - Bin[(i)] = 1; - } else { +uint8_t TuyaGetPower(uint8_t p, uint8_t d) { + uint8_t g = 0; + for(int i = 7 ; i >= 0 ; i--) { + g = p >> i; + //AddLog_P2(LOG_LEVEL_DEBUG, PSTR("TYA: --SetDevicePower3-- for Device = %d, Power=%d"),i, k&1); + if (i== d-1) + { + return g&1; } } } - - bool TuyaSetChannels(void) { LightSerialDuty(((uint8_t*)XdrvMailbox.data)[0]); @@ -156,8 +153,8 @@ void LightSerialDuty(uint8_t duty) duty = 25; // dimming acts odd below 25(10%) - this mirrors the threshold set on the faceplate itself } - - if(Settings.flag3.tuya_show_dimmer == 1) // no Dimmer for 4 relay + + if(Settings.flag3.tuya_show_dimmer == 0) { AddLog_P2(LOG_LEVEL_DEBUG, PSTR( "TYA: Send Serial Packet Dim Value=%d (id=%d)"), duty, Settings.param[P_TUYA_DIMMER_ID]); TuyaSendValue(Settings.param[P_TUYA_DIMMER_ID], duty); @@ -165,7 +162,7 @@ void LightSerialDuty(uint8_t duty) } else { tuya_ignore_dim = false; // reset flag - if(Settings.flag3.tuya_show_dimmer == 1) // no Dimmer for 4 relay + if(Settings.flag3.tuya_show_dimmer == 0) { AddLog_P2(LOG_LEVEL_DEBUG, PSTR( "TYA: Send Dim Level skipped due to 0 or already set. Value=%d"), duty); } @@ -432,7 +429,7 @@ bool Xdrv16(uint8_t function) if (tuya_heartbeat_timer > 10) { tuya_heartbeat_timer = 0; TuyaSendCmd(TUYA_CMD_HEARTBEAT); - } + } break; case FUNC_SET_CHANNELS: result = TuyaSetChannels();