mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-27 12:46:34 +00:00
v5.8.0d - Add Color/Dimmer control to PWM
5.8.0d * Remove previous GPIO configuration when another module is selected * Fix inverted relay power on state (#909) * Change default PWM assignments for H801 RGB(CW) led controller to support optional Color/Dimmer control * GPIO04 (W2) from GPIO_PWM2 to GPIO_USER to be user configurable for GPIO_PWM5 (second White - Warm if W1 is Cold) * GPIO12 (Blue) GPIO_PWM3 no change * GPIO13 (Green) from GPIO_PWM4 to GPIO_PWM2 * GPIO14 (W1) from GPIO_PWM1 to GPIO_USER to be user configurable for GPIO_PWM4 (first White - Cold or Warm) * GPIO15 (Red) from GPIO_PWM5 to GPIO_PWM1 * Change default PWM assignments for MagicHome RGB(W) led controller to support optional Color/Dimmer control * GPIO05 (Green) from GPIO_PWM4 to GPIO_PWM2 * GPIO12 (Blue) from GPIO_PWM5 to GPIO_PWM3 * GPIO13 (White) GPIO_USER to be user configurable for GPIO_PWM4 (White - Cold or Warm) * GPIO14 (Red) from GPIO_PWM3 to GPIO_PWM1 * Add command SetOption15 0 (default) for command PWM control or SetOption15 1 for commands Color/Dimmer control to PWM RGB(CW) leds (#941)
This commit is contained in:
parent
d609433b34
commit
48faeaa2ce
@ -1,7 +1,7 @@
|
|||||||
## Sonoff-Tasmota
|
## Sonoff-Tasmota
|
||||||
Provide ESP8266 based Sonoff by [iTead Studio](https://www.itead.cc/) and ElectroDragon IoT Relay with Serial, Web and MQTT control allowing 'Over the Air' or OTA firmware updates using Arduino IDE.
|
Provide ESP8266 based Sonoff by [iTead Studio](https://www.itead.cc/) and ElectroDragon IoT Relay with Serial, Web and MQTT control allowing 'Over the Air' or OTA firmware updates using Arduino IDE.
|
||||||
|
|
||||||
Current version is **5.8.0c** - See [sonoff/_releasenotes.ino](https://github.com/arendst/Sonoff-Tasmota/blob/development/sonoff/_releasenotes.ino) for change information.
|
Current version is **5.8.0d** - See [sonoff/_releasenotes.ino](https://github.com/arendst/Sonoff-Tasmota/blob/development/sonoff/_releasenotes.ino) for change information.
|
||||||
|
|
||||||
### ATTENTION All versions
|
### ATTENTION All versions
|
||||||
|
|
||||||
|
@ -1,4 +1,20 @@
|
|||||||
/* 5.8.0c
|
/* 5.8.0d
|
||||||
|
* Remove previous GPIO configuration when another module is selected
|
||||||
|
* Fix inverted relay power on state (#909)
|
||||||
|
* Change default PWM assignments for H801 RGB(CW) led controller to support optional Color/Dimmer control
|
||||||
|
* GPIO04 (W2) from GPIO_PWM2 to GPIO_USER to be user configurable for GPIO_PWM5 (second White - Warm if W1 is Cold)
|
||||||
|
* GPIO12 (Blue) GPIO_PWM3 no change
|
||||||
|
* GPIO13 (Green) from GPIO_PWM4 to GPIO_PWM2
|
||||||
|
* GPIO14 (W1) from GPIO_PWM1 to GPIO_USER to be user configurable for GPIO_PWM4 (first White - Cold or Warm)
|
||||||
|
* GPIO15 (Red) from GPIO_PWM5 to GPIO_PWM1
|
||||||
|
* Change default PWM assignments for MagicHome RGB(W) led controller to support optional Color/Dimmer control
|
||||||
|
* GPIO05 (Green) from GPIO_PWM4 to GPIO_PWM2
|
||||||
|
* GPIO12 (Blue) from GPIO_PWM5 to GPIO_PWM3
|
||||||
|
* GPIO13 (White) GPIO_USER to be user configurable for GPIO_PWM4 (White - Cold or Warm)
|
||||||
|
* GPIO14 (Red) from GPIO_PWM3 to GPIO_PWM1
|
||||||
|
* Add command SetOption15 0 (default) for command PWM control or SetOption15 1 for commands Color/Dimmer control to PWM RGB(CW) leds (#941)
|
||||||
|
*
|
||||||
|
* 5.8.0c
|
||||||
* Add warning to webpage when USE_MINIMAL is selected (#929)
|
* Add warning to webpage when USE_MINIMAL is selected (#929)
|
||||||
* Fix compile error when DOMOTICZ_UPDATE_TIMER is not defined (#930)
|
* Fix compile error when DOMOTICZ_UPDATE_TIMER is not defined (#930)
|
||||||
* Fix alignment of web page items in some browsers (#935)
|
* Fix alignment of web page items in some browsers (#935)
|
||||||
|
@ -37,7 +37,7 @@ typedef union { // Restricted by MISRA-C Rule 18.4 bu
|
|||||||
uint32_t stop_flash_rotate : 1; // bit 12 (v5.2.0)
|
uint32_t stop_flash_rotate : 1; // bit 12 (v5.2.0)
|
||||||
uint32_t button_single : 1; // bit 13 (v5.4.0)
|
uint32_t button_single : 1; // bit 13 (v5.4.0)
|
||||||
uint32_t interlock : 1; // bit 14 (v5.6.0)
|
uint32_t interlock : 1; // bit 14 (v5.6.0)
|
||||||
uint32_t spare15 : 1;
|
uint32_t pwm_control : 1; // bit 15 (v5.8.1)
|
||||||
uint32_t spare16 : 1;
|
uint32_t spare16 : 1;
|
||||||
uint32_t spare17 : 1;
|
uint32_t spare17 : 1;
|
||||||
uint32_t spare18 : 1;
|
uint32_t spare18 : 1;
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
- Select IDE Tools - Flash Size: "1M (no SPIFFS)"
|
- Select IDE Tools - Flash Size: "1M (no SPIFFS)"
|
||||||
====================================================*/
|
====================================================*/
|
||||||
|
|
||||||
#define VERSION 0x05080003 // 5.8.0c
|
#define VERSION 0x05080004 // 5.8.0d
|
||||||
|
|
||||||
enum week_t {Last, First, Second, Third, Fourth};
|
enum week_t {Last, First, Second, Third, Fourth};
|
||||||
enum dow_t {Sun=1, Mon, Tue, Wed, Thu, Fri, Sat};
|
enum dow_t {Sun=1, Mon, Tue, Wed, Thu, Fri, Sat};
|
||||||
@ -290,7 +290,7 @@ uint8_t hlw_flg = 0; // Power monitor configured
|
|||||||
uint8_t i2c_flg = 0; // I2C configured
|
uint8_t i2c_flg = 0; // I2C configured
|
||||||
uint8_t spi_flg = 0; // SPI configured
|
uint8_t spi_flg = 0; // SPI configured
|
||||||
uint8_t pwm_flg = 0; // PWM configured
|
uint8_t pwm_flg = 0; // PWM configured
|
||||||
uint8_t sfl_flg = 0; // Sonoff Led flag (0 = No led, 1 = BN-SZ01, 2 = Sonoff Led, 5 = Sonoff B1)
|
uint8_t sfl_flg = 0; // Sonoff Led flag (0 = No led, 1 = BN-SZ01, 2 = Sonoff Led, 3 = H801/MagicHome, 4 = H801/MagicHome, 5 = H801, 11 = WS2812, 12 = AiLight, 13 = Sonoff B1)
|
||||||
uint8_t pwm_idxoffset = 0; // Allowed PWM command offset (change for Sonoff Led)
|
uint8_t pwm_idxoffset = 0; // Allowed PWM command offset (change for Sonoff Led)
|
||||||
|
|
||||||
boolean mDNSbegun = false;
|
boolean mDNSbegun = false;
|
||||||
@ -1079,7 +1079,7 @@ void mqttDataCb(char* topic, byte* data, unsigned int data_len)
|
|||||||
}
|
}
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_SAVEDATA "\":\"%s\"}"), (sysCfg.savedata > 1) ? stemp1 : getStateText(sysCfg.savedata));
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_SAVEDATA "\":\"%s\"}"), (sysCfg.savedata > 1) ? stemp1 : getStateText(sysCfg.savedata));
|
||||||
}
|
}
|
||||||
else if (!strcasecmp_P(type, PSTR(D_CMND_SETOPTION)) && ((index >= 0) && (index <= 14)) || ((index > 31) && (index <= P_MAX_PARAM8 +31))) {
|
else if (!strcasecmp_P(type, PSTR(D_CMND_SETOPTION)) && ((index >= 0) && (index <= 15)) || ((index > 31) && (index <= P_MAX_PARAM8 +31))) {
|
||||||
if (index <= 31) {
|
if (index <= 31) {
|
||||||
ptype = 0; // SetOption0 .. 31
|
ptype = 0; // SetOption0 .. 31
|
||||||
} else {
|
} else {
|
||||||
@ -1091,6 +1091,7 @@ void mqttDataCb(char* topic, byte* data, unsigned int data_len)
|
|||||||
if (payload <= 1) {
|
if (payload <= 1) {
|
||||||
switch (index) {
|
switch (index) {
|
||||||
case 3: // mqtt
|
case 3: // mqtt
|
||||||
|
case 15: // pwm_control
|
||||||
restartflag = 2;
|
restartflag = 2;
|
||||||
case 0: // savestate
|
case 0: // savestate
|
||||||
case 1: // button_restrict
|
case 1: // button_restrict
|
||||||
@ -2324,7 +2325,7 @@ void stateloop()
|
|||||||
button_handler();
|
button_handler();
|
||||||
switch_handler();
|
switch_handler();
|
||||||
|
|
||||||
if (sfl_flg) { // Sonoff B1, AiLight, Sonoff led or BN-SZ01
|
if (sfl_flg) {
|
||||||
sl_animate();
|
sl_animate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2619,6 +2620,15 @@ void GPIO_init()
|
|||||||
analogWriteRange(PWM_RANGE); // Default is 1023 (Arduino.h)
|
analogWriteRange(PWM_RANGE); // Default is 1023 (Arduino.h)
|
||||||
analogWriteFreq(PWM_FREQ); // Default is 1000 (core_esp8266_wiring_pwm.c)
|
analogWriteFreq(PWM_FREQ); // Default is 1000 (core_esp8266_wiring_pwm.c)
|
||||||
|
|
||||||
|
if (sysCfg.flag.pwm_control) {
|
||||||
|
sfl_flg = 0;
|
||||||
|
for (byte i = 0; i < 5; i++) {
|
||||||
|
if (pin[GPIO_PWM1 +i] < 99) {
|
||||||
|
sfl_flg++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Maxdevice = 1;
|
Maxdevice = 1;
|
||||||
if (SONOFF_BRIDGE == sysCfg.module) {
|
if (SONOFF_BRIDGE == sysCfg.module) {
|
||||||
Baudrate = 19200;
|
Baudrate = 19200;
|
||||||
@ -2635,17 +2645,22 @@ void GPIO_init()
|
|||||||
Maxdevice = 0;
|
Maxdevice = 0;
|
||||||
Baudrate = 19200;
|
Baudrate = 19200;
|
||||||
}
|
}
|
||||||
else if (SONOFF_BN == sysCfg.module) { // Single color led (White)
|
else if ((H801 == sysCfg.module) || (MAGICHOME == sysCfg.module)) { // PWM RGBCW led
|
||||||
|
if (!sysCfg.flag.pwm_control) {
|
||||||
|
sfl_flg = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (SONOFF_BN == sysCfg.module) { // PWM Single color led (White)
|
||||||
sfl_flg = 1;
|
sfl_flg = 1;
|
||||||
}
|
}
|
||||||
else if (SONOFF_LED == sysCfg.module) { // Dual color led (White warm and cold)
|
else if (SONOFF_LED == sysCfg.module) { // PWM Dual color led (White warm and cold)
|
||||||
sfl_flg = 2;
|
sfl_flg = 2;
|
||||||
}
|
}
|
||||||
else if (AILIGHT == sysCfg.module) { // RGBW led
|
else if (AILIGHT == sysCfg.module) { // RGBW led
|
||||||
sfl_flg = 4;
|
sfl_flg = 12;
|
||||||
}
|
}
|
||||||
else if (SONOFF_B1 == sysCfg.module) { // RGBWC led
|
else if (SONOFF_B1 == sysCfg.module) { // RGBWC led
|
||||||
sfl_flg = 5;
|
sfl_flg = 13;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Maxdevice = 0;
|
Maxdevice = 0;
|
||||||
@ -2674,14 +2689,14 @@ void GPIO_init()
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_WS2812
|
#ifdef USE_WS2812
|
||||||
if (!sfl_flg && (pin[GPIO_WS2812] < 99)) {
|
if (!sfl_flg && (pin[GPIO_WS2812] < 99)) { // RGB led
|
||||||
Maxdevice++;
|
Maxdevice++;
|
||||||
sfl_flg = 3;
|
sfl_flg = 11;
|
||||||
}
|
}
|
||||||
#endif // USE_WS2812
|
#endif // USE_WS2812
|
||||||
if (sfl_flg) { // Sonoff B1, AiLight, Sonoff Led or BN-SZ01, WS2812
|
if (sfl_flg) { // Sonoff B1, AiLight, Sonoff Led or BN-SZ01, WS2812
|
||||||
if (sfl_flg < 3) {
|
if (sfl_flg < 6) {
|
||||||
pwm_idxoffset = sfl_flg; // 1 for BN-SZ01, 2 for Sonoff Led
|
pwm_idxoffset = sfl_flg; // 1 for BN-SZ01, 2 for Sonoff Led, 3,4,5 for H801 and MagicHome
|
||||||
}
|
}
|
||||||
sl_init();
|
sl_init();
|
||||||
}
|
}
|
||||||
@ -2833,7 +2848,7 @@ void setup()
|
|||||||
|
|
||||||
// Issue #526
|
// Issue #526
|
||||||
for (byte i = 0; i < Maxdevice; i++) {
|
for (byte i = 0; i < Maxdevice; i++) {
|
||||||
if ((pin[GPIO_REL1 +i] < 99) && (digitalRead(pin[GPIO_REL1 +i]))) {
|
if ((pin[GPIO_REL1 +i] < 99) && (digitalRead(pin[GPIO_REL1 +i]) ^ rel_inverted[i])) {
|
||||||
bitSet(power, i);
|
bitSet(power, i);
|
||||||
pulse_timer[i] = sysCfg.pulsetime[i];
|
pulse_timer[i] = sysCfg.pulsetime[i];
|
||||||
}
|
}
|
||||||
|
@ -52,11 +52,11 @@ enum upins_t {
|
|||||||
GPIO_LED2_INV,
|
GPIO_LED2_INV,
|
||||||
GPIO_LED3_INV,
|
GPIO_LED3_INV,
|
||||||
GPIO_LED4_INV,
|
GPIO_LED4_INV,
|
||||||
GPIO_PWM1, // Sonoff Led Cold
|
GPIO_PWM1, // RGB Red or C Cold White
|
||||||
GPIO_PWM2, // Sonoff Led Warm
|
GPIO_PWM2, // RGB Green or CW Warm White
|
||||||
GPIO_PWM3, // Red (swapped with Blue from original)
|
GPIO_PWM3, // RGB Blue
|
||||||
GPIO_PWM4, // Green
|
GPIO_PWM4, // RGBW (Cold) White
|
||||||
GPIO_PWM5, // Blue (swapped with Red from original)
|
GPIO_PWM5, // RGBCW Warm White
|
||||||
GPIO_CNTR1,
|
GPIO_CNTR1,
|
||||||
GPIO_CNTR2,
|
GPIO_CNTR2,
|
||||||
GPIO_CNTR3,
|
GPIO_CNTR3,
|
||||||
@ -467,13 +467,13 @@ const mytmplt modules[MAXMODULE] PROGMEM = {
|
|||||||
GPIO_LED1, // GPIO01 Green LED
|
GPIO_LED1, // GPIO01 Green LED
|
||||||
GPIO_TXD, // GPIO02 RX - Pin next to TX on the PCB
|
GPIO_TXD, // GPIO02 RX - Pin next to TX on the PCB
|
||||||
GPIO_RXD, // GPIO03 TX - Pin next to GND on the PCB
|
GPIO_RXD, // GPIO03 TX - Pin next to GND on the PCB
|
||||||
GPIO_PWM2, // GPIO04 W2
|
GPIO_USER, // GPIO04 W2 - PWM5
|
||||||
GPIO_LED2_INV, // GPIO05 Red LED
|
GPIO_LED2_INV, // GPIO05 Red LED
|
||||||
0, 0, 0, 0, 0, 0, // Flash connection
|
0, 0, 0, 0, 0, 0, // Flash connection
|
||||||
GPIO_PWM3, // GPIO12 Blue
|
GPIO_PWM3, // GPIO12 Blue
|
||||||
GPIO_PWM4, // GPIO13 Green
|
GPIO_PWM2, // GPIO13 Green
|
||||||
GPIO_PWM1, // GPIO14 W1
|
GPIO_USER, // GPIO14 W1 - PWM4
|
||||||
GPIO_PWM5, // GPIO15 Red
|
GPIO_PWM1, // GPIO15 Red
|
||||||
0, 0
|
0, 0
|
||||||
},
|
},
|
||||||
{ "Sonoff SC", // Sonoff SC (ESP8266)
|
{ "Sonoff SC", // Sonoff SC (ESP8266)
|
||||||
@ -658,11 +658,11 @@ const mytmplt modules[MAXMODULE] PROGMEM = {
|
|||||||
GPIO_LED1_INV, // GPIO02 Blue onboard LED
|
GPIO_LED1_INV, // GPIO02 Blue onboard LED
|
||||||
0,
|
0,
|
||||||
GPIO_USER, // GPIO04 IR receiver (optional)
|
GPIO_USER, // GPIO04 IR receiver (optional)
|
||||||
GPIO_PWM4, // GPIO05 RGB LED Green
|
GPIO_PWM2, // GPIO05 RGB LED Green
|
||||||
0, 0, 0, 0, 0, 0, // Flash connection
|
0, 0, 0, 0, 0, 0, // Flash connection
|
||||||
GPIO_PWM5, // GPIO12 RGB LED Blue
|
GPIO_PWM3, // GPIO12 RGB LED Blue
|
||||||
GPIO_USER, // GPIO13 RGBW LED White (optional - set to PWM1 for Cold White or PWM2 for Warm White)
|
GPIO_USER, // GPIO13 RGBW LED White (optional - set to PWM4 for Cold White or Warm White)
|
||||||
GPIO_PWM3, // GPIO14 RGB LED Red
|
GPIO_PWM1, // GPIO14 RGB LED Red
|
||||||
0, 0, 0
|
0, 0, 0
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -443,7 +443,7 @@ void handleRoot()
|
|||||||
page += F("<div id='l1' name='l1'></div>");
|
page += F("<div id='l1' name='l1'></div>");
|
||||||
if (Maxdevice) {
|
if (Maxdevice) {
|
||||||
if (sfl_flg) {
|
if (sfl_flg) {
|
||||||
if ((2 == sfl_flg) || (5 == sfl_flg)) {
|
if ((2 == (sfl_flg &7)) || (5 == (sfl_flg &7))) {
|
||||||
snprintf_P(line, sizeof(line), HTTP_MSG_SLIDER1, sl_getColorTemp());
|
snprintf_P(line, sizeof(line), HTTP_MSG_SLIDER1, sl_getColorTemp());
|
||||||
page += line;
|
page += line;
|
||||||
}
|
}
|
||||||
@ -1051,11 +1051,12 @@ void handleSave()
|
|||||||
for (byte i = 0; i < MAX_GPIO_PIN; i++) {
|
for (byte i = 0; i < MAX_GPIO_PIN; i++) {
|
||||||
if (new_modflg) {
|
if (new_modflg) {
|
||||||
sysCfg.my_module.gp.io[i] = 0;
|
sysCfg.my_module.gp.io[i] = 0;
|
||||||
}
|
} else {
|
||||||
if (GPIO_USER == cmodule.gp.io[i]) {
|
if (GPIO_USER == cmodule.gp.io[i]) {
|
||||||
snprintf_P(stemp, sizeof(stemp), PSTR("g%d"), i);
|
snprintf_P(stemp, sizeof(stemp), PSTR("g%d"), i);
|
||||||
sysCfg.my_module.gp.io[i] = (!strlen(webServer->arg(stemp).c_str())) ? 0 : atoi(webServer->arg(stemp).c_str());
|
sysCfg.my_module.gp.io[i] = (!strlen(webServer->arg(stemp).c_str())) ? 0 : atoi(webServer->arg(stemp).c_str());
|
||||||
gpios += F(", " D_GPIO ); gpios += String(i); gpios += F(" "); gpios += String(sysCfg.my_module.gp.io[i]);
|
gpios += F(", " D_GPIO ); gpios += String(i); gpios += F(" "); gpios += String(sysCfg.my_module.gp.io[i]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
snprintf_P(stemp, sizeof(stemp), modules[sysCfg.module].name);
|
snprintf_P(stemp, sizeof(stemp), modules[sysCfg.module].name);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
xdrv_snfled.ino - WS2812 and sonoff led support for Sonoff-Tasmota
|
xdrv_snfled.ino - PWM, WS2812 and sonoff led support for Sonoff-Tasmota
|
||||||
|
|
||||||
Copyright (C) 2017 Theo Arends
|
Copyright (C) 2017 Theo Arends
|
||||||
|
|
||||||
@ -18,14 +18,19 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*********************************************************************************************\
|
/*********************************************************************************************\
|
||||||
* WS2812, Sonoff B1, AiLight, Sonoff Led and BN-SZ01
|
* PWM, WS2812, Sonoff B1, AiLight, Sonoff Led and BN-SZ01
|
||||||
*
|
*
|
||||||
* sfl_flg Module Color ColorTemp
|
* sfl_flg Module Color ColorTemp
|
||||||
* 1 Sonoff BN-SZ W no
|
* 1 PWM1 W no (Sonoff BN-SZ)
|
||||||
* 2 Sonoff Led CW yes
|
* 2 PWM2 CW yes (Sonoff Led)
|
||||||
* 3 +WS2812 RGB no
|
* 3 PWM3 RGB no (H801 and MagicHome)
|
||||||
* 4 AiLight RGBW no
|
* 4 PWM4 RGBW no (H801 and MagicHome)
|
||||||
* 5 Sonoff B1 RGBCW yes
|
* 5 PWM5 RGBCW yes (H801)
|
||||||
|
* 9 reserved no
|
||||||
|
* 10 reserved yes
|
||||||
|
* 11 +WS2812 RGB no
|
||||||
|
* 12 AiLight RGBW no
|
||||||
|
* 13 Sonoff B1 RGBCW yes
|
||||||
*
|
*
|
||||||
* led_scheme WS2812 Others Effect
|
* led_scheme WS2812 Others Effect
|
||||||
* 0 yes yes Color On/Off
|
* 0 yes yes Color On/Off
|
||||||
@ -114,7 +119,7 @@ void sl_my92x1_write(uint8_t data)
|
|||||||
|
|
||||||
void sl_my92x1_init()
|
void sl_my92x1_init()
|
||||||
{
|
{
|
||||||
uint8_t chips = sfl_flg -3; // 1 (AiLight) or 2 (Sonoff B1)
|
uint8_t chips = sfl_flg -11; // 1 (AiLight) or 2 (Sonoff B1)
|
||||||
|
|
||||||
sl_dcki_pulse(chips * 32); // Clear all duty register
|
sl_dcki_pulse(chips * 32); // Clear all duty register
|
||||||
os_delay_us(12); // TStop > 12us.
|
os_delay_us(12); // TStop > 12us.
|
||||||
@ -136,7 +141,7 @@ void sl_my92x1_duty(uint8_t duty_r, uint8_t duty_g, uint8_t duty_b, uint8_t duty
|
|||||||
{
|
{
|
||||||
uint8_t channels[2] = { 4, 6 };
|
uint8_t channels[2] = { 4, 6 };
|
||||||
|
|
||||||
uint8_t didx = sfl_flg -4; // 0 or 1
|
uint8_t didx = sfl_flg -12; // 0 or 1
|
||||||
|
|
||||||
uint8_t duty[2][6] = {{ duty_r, duty_g, duty_b, duty_w, 0, 0 }, // Definition for RGBW channels
|
uint8_t duty[2][6] = {{ duty_r, duty_g, duty_b, duty_w, 0, 0 }, // Definition for RGBW channels
|
||||||
{ duty_w, duty_c, 0, duty_g, duty_r, duty_b }}; // Definition for RGBWC channels
|
{ duty_w, duty_c, 0, duty_g, duty_r, duty_b }}; // Definition for RGBWC channels
|
||||||
@ -154,27 +159,28 @@ void sl_my92x1_duty(uint8_t duty_r, uint8_t duty_g, uint8_t duty_b, uint8_t duty
|
|||||||
|
|
||||||
void sl_init(void)
|
void sl_init(void)
|
||||||
{
|
{
|
||||||
if (sfl_flg < 3) {
|
if (sfl_flg < 6) { // PWM
|
||||||
if (!my_module.gp.io[4]) {
|
for (byte i = 0; i < sfl_flg; i++) {
|
||||||
pinMode(4, OUTPUT); // Stop floating outputs
|
sysCfg.pwmvalue[i] = 0; // Disable direct PWM control
|
||||||
digitalWrite(4, LOW);
|
|
||||||
}
|
}
|
||||||
if (!my_module.gp.io[5]) {
|
if (SONOFF_LED == sysCfg.module) { // Fix Sonoff Led instabilities
|
||||||
pinMode(5, OUTPUT); // Stop floating outputs
|
if (!my_module.gp.io[4]) {
|
||||||
digitalWrite(5, LOW);
|
pinMode(4, OUTPUT); // Stop floating outputs
|
||||||
}
|
digitalWrite(4, LOW);
|
||||||
if (!my_module.gp.io[14]) {
|
}
|
||||||
pinMode(14, OUTPUT); // Stop floating outputs
|
if (!my_module.gp.io[5]) {
|
||||||
digitalWrite(14, LOW);
|
pinMode(5, OUTPUT); // Stop floating outputs
|
||||||
}
|
digitalWrite(5, LOW);
|
||||||
sysCfg.pwmvalue[0] = 0; // We use dimmer / led_color
|
}
|
||||||
if (2 == sfl_flg) {
|
if (!my_module.gp.io[14]) {
|
||||||
sysCfg.pwmvalue[1] = 0; // We use led_color
|
pinMode(14, OUTPUT); // Stop floating outputs
|
||||||
|
digitalWrite(14, LOW);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
sysCfg.led_scheme = 0;
|
sysCfg.led_scheme = 0;
|
||||||
}
|
}
|
||||||
#ifdef USE_WS2812 // ************************************************************************
|
#ifdef USE_WS2812 // ************************************************************************
|
||||||
else if (3 == sfl_flg) {
|
else if (11 == sfl_flg) {
|
||||||
ws2812_init();
|
ws2812_init();
|
||||||
if (1 == sysCfg.led_scheme) {
|
if (1 == sysCfg.led_scheme) {
|
||||||
sysCfg.led_scheme = 0;
|
sysCfg.led_scheme = 0;
|
||||||
@ -212,7 +218,7 @@ void sl_setColorTemp(uint16_t ct)
|
|||||||
}
|
}
|
||||||
uint16_t icold = (100 * (347 - my_ct)) / 136;
|
uint16_t icold = (100 * (347 - my_ct)) / 136;
|
||||||
uint16_t iwarm = (100 * my_ct) / 136;
|
uint16_t iwarm = (100 * my_ct) / 136;
|
||||||
if (5 == sfl_flg) {
|
if (5 == (sfl_flg &7)) {
|
||||||
sysCfg.led_color[0] = 0;
|
sysCfg.led_color[0] = 0;
|
||||||
sysCfg.led_color[1] = 0;
|
sysCfg.led_color[1] = 0;
|
||||||
sysCfg.led_color[2] = 0;
|
sysCfg.led_color[2] = 0;
|
||||||
@ -227,7 +233,7 @@ void sl_setColorTemp(uint16_t ct)
|
|||||||
uint16_t sl_getColorTemp()
|
uint16_t sl_getColorTemp()
|
||||||
{
|
{
|
||||||
uint8_t ct_idx = 0;
|
uint8_t ct_idx = 0;
|
||||||
if (5 == sfl_flg) {
|
if (5 == (sfl_flg &7)) {
|
||||||
ct_idx = 3;
|
ct_idx = 3;
|
||||||
}
|
}
|
||||||
uint16_t my_ct = sysCfg.led_color[ct_idx +1];
|
uint16_t my_ct = sysCfg.led_color[ct_idx +1];
|
||||||
@ -243,11 +249,11 @@ void sl_setDim(uint8_t myDimmer)
|
|||||||
{
|
{
|
||||||
float temp;
|
float temp;
|
||||||
|
|
||||||
if ((1 == sfl_flg) && (100 == myDimmer)) {
|
if ((SONOFF_BN == sysCfg.module) && (100 == myDimmer)) {
|
||||||
myDimmer = 99; // BN-SZ01 starts flickering at dimmer = 100
|
myDimmer = 99; // BN-SZ01 starts flickering at dimmer = 100
|
||||||
}
|
}
|
||||||
float newDim = 100 / (float)myDimmer;
|
float newDim = 100 / (float)myDimmer;
|
||||||
for (byte i = 0; i < sfl_flg; i++) {
|
for (byte i = 0; i < (sfl_flg &7); i++) {
|
||||||
temp = (float)sysCfg.led_color[i] / newDim;
|
temp = (float)sysCfg.led_color[i] / newDim;
|
||||||
sl_dcolor[i] = (uint8_t)temp;
|
sl_dcolor[i] = (uint8_t)temp;
|
||||||
}
|
}
|
||||||
@ -258,7 +264,7 @@ void sl_setColor()
|
|||||||
uint8_t highest = 0;
|
uint8_t highest = 0;
|
||||||
float temp;
|
float temp;
|
||||||
|
|
||||||
for (byte i = 0; i < sfl_flg; i++) {
|
for (byte i = 0; i < (sfl_flg &7); i++) {
|
||||||
if (highest < sl_dcolor[i]) {
|
if (highest < sl_dcolor[i]) {
|
||||||
highest = sl_dcolor[i];
|
highest = sl_dcolor[i];
|
||||||
}
|
}
|
||||||
@ -266,7 +272,7 @@ void sl_setColor()
|
|||||||
float mDim = (float)highest / 2.55;
|
float mDim = (float)highest / 2.55;
|
||||||
sysCfg.led_dimmer[0] = (uint8_t)mDim;
|
sysCfg.led_dimmer[0] = (uint8_t)mDim;
|
||||||
float newDim = 100 / mDim;
|
float newDim = 100 / mDim;
|
||||||
for (byte i = 0; i < sfl_flg; i++) {
|
for (byte i = 0; i < (sfl_flg &7); i++) {
|
||||||
temp = (float)sl_dcolor[i] * newDim;
|
temp = (float)sl_dcolor[i] * newDim;
|
||||||
sysCfg.led_color[i] = (uint8_t)temp;
|
sysCfg.led_color[i] = (uint8_t)temp;
|
||||||
}
|
}
|
||||||
@ -276,7 +282,7 @@ char* sl_getColor(char* scolor)
|
|||||||
{
|
{
|
||||||
sl_setDim(sysCfg.led_dimmer[0]);
|
sl_setDim(sysCfg.led_dimmer[0]);
|
||||||
scolor[0] = '\0';
|
scolor[0] = '\0';
|
||||||
for (byte i = 0; i < sfl_flg; i++) {
|
for (byte i = 0; i < (sfl_flg &7); i++) {
|
||||||
snprintf_P(scolor, 11, PSTR("%s%02X"), scolor, sl_dcolor[i]);
|
snprintf_P(scolor, 11, PSTR("%s%02X"), scolor, sl_dcolor[i]);
|
||||||
}
|
}
|
||||||
return scolor;
|
return scolor;
|
||||||
@ -297,7 +303,7 @@ void sl_prepPower()
|
|||||||
// mqtt_publishDomoticzPowerState(1);
|
// mqtt_publishDomoticzPowerState(1);
|
||||||
domoticz_updatePowerState(Maxdevice);
|
domoticz_updatePowerState(Maxdevice);
|
||||||
#endif // USE_DOMOTICZ
|
#endif // USE_DOMOTICZ
|
||||||
if (sfl_flg > 1) {
|
if ((sfl_flg &7) > 1) {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_RSLT_POWER "\":\"%s\", \"" D_CMND_DIMMER "\":%d, \"" D_CMND_COLOR "\":\"%s\"}"),
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_RSLT_POWER "\":\"%s\", \"" D_CMND_DIMMER "\":%d, \"" D_CMND_COLOR "\":\"%s\"}"),
|
||||||
getStateText(sl_power), sysCfg.led_dimmer[0], sl_getColor(scolor));
|
getStateText(sl_power), sysCfg.led_dimmer[0], sl_getColor(scolor));
|
||||||
} else {
|
} else {
|
||||||
@ -328,7 +334,7 @@ void sl_animate()
|
|||||||
if (!sl_power) { // Power Off
|
if (!sl_power) { // Power Off
|
||||||
sleep = sysCfg.sleep;
|
sleep = sysCfg.sleep;
|
||||||
stripTimerCntr = 0;
|
stripTimerCntr = 0;
|
||||||
for (byte i = 0; i < sfl_flg; i++) {
|
for (byte i = 0; i < (sfl_flg &7); i++) {
|
||||||
sl_tcolor[i] = 0;
|
sl_tcolor[i] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -338,11 +344,11 @@ void sl_animate()
|
|||||||
case 0: // Power On
|
case 0: // Power On
|
||||||
sl_setDim(sysCfg.led_dimmer[0]); // Power On
|
sl_setDim(sysCfg.led_dimmer[0]); // Power On
|
||||||
if (0 == sysCfg.led_fade) {
|
if (0 == sysCfg.led_fade) {
|
||||||
for (byte i = 0; i < sfl_flg; i++) {
|
for (byte i = 0; i < (sfl_flg &7); i++) {
|
||||||
sl_tcolor[i] = sl_dcolor[i];
|
sl_tcolor[i] = sl_dcolor[i];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (byte i = 0; i < sfl_flg; i++) {
|
for (byte i = 0; i < (sfl_flg &7); i++) {
|
||||||
if (sl_tcolor[i] != sl_dcolor[i]) {
|
if (sl_tcolor[i] != sl_dcolor[i]) {
|
||||||
if (sl_tcolor[i] < sl_dcolor[i]) {
|
if (sl_tcolor[i] < sl_dcolor[i]) {
|
||||||
sl_tcolor[i] += ((sl_dcolor[i] - sl_tcolor[i]) >> sysCfg.led_speed) +1;
|
sl_tcolor[i] += ((sl_dcolor[i] - sl_tcolor[i]) >> sysCfg.led_speed) +1;
|
||||||
@ -357,7 +363,7 @@ void sl_animate()
|
|||||||
case 1: // Power On using wake up duration
|
case 1: // Power On using wake up duration
|
||||||
if (2 == sl_wakeupActive) {
|
if (2 == sl_wakeupActive) {
|
||||||
sl_wakeupActive = 1;
|
sl_wakeupActive = 1;
|
||||||
for (byte i = 0; i < sfl_flg; i++) {
|
for (byte i = 0; i < (sfl_flg &7); i++) {
|
||||||
sl_tcolor[i] = 0;
|
sl_tcolor[i] = 0;
|
||||||
}
|
}
|
||||||
sl_wakeupCntr = 0;
|
sl_wakeupCntr = 0;
|
||||||
@ -369,7 +375,7 @@ void sl_animate()
|
|||||||
sl_wakeupDimmer++;
|
sl_wakeupDimmer++;
|
||||||
if (sl_wakeupDimmer <= sysCfg.led_dimmer[0]) {
|
if (sl_wakeupDimmer <= sysCfg.led_dimmer[0]) {
|
||||||
sl_setDim(sl_wakeupDimmer);
|
sl_setDim(sl_wakeupDimmer);
|
||||||
for (byte i = 0; i < sfl_flg; i++) {
|
for (byte i = 0; i < (sfl_flg &7); i++) {
|
||||||
sl_tcolor[i] = sl_dcolor[i];
|
sl_tcolor[i] = sl_dcolor[i];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -382,7 +388,7 @@ void sl_animate()
|
|||||||
break;
|
break;
|
||||||
#ifdef USE_WS2812 // ************************************************************************
|
#ifdef USE_WS2812 // ************************************************************************
|
||||||
default:
|
default:
|
||||||
if (3 == sfl_flg) {
|
if (11 == sfl_flg) {
|
||||||
ws2812_showScheme(sysCfg.led_scheme -2);
|
ws2812_showScheme(sysCfg.led_scheme -2);
|
||||||
}
|
}
|
||||||
#endif // USE_WS2812 ************************************************************************
|
#endif // USE_WS2812 ************************************************************************
|
||||||
@ -390,28 +396,28 @@ void sl_animate()
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((sysCfg.led_scheme < 2) || !sl_power) {
|
if ((sysCfg.led_scheme < 2) || !sl_power) {
|
||||||
for (byte i = 0; i < sfl_flg; i++) {
|
for (byte i = 0; i < (sfl_flg &7); i++) {
|
||||||
if (sl_lcolor[i] != sl_tcolor[i]) {
|
if (sl_lcolor[i] != sl_tcolor[i]) {
|
||||||
sl_any = 1;
|
sl_any = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (sl_any) {
|
if (sl_any) {
|
||||||
sl_any = 0;
|
sl_any = 0;
|
||||||
for (byte i = 0; i < sfl_flg; i++) {
|
for (byte i = 0; i < (sfl_flg &7); i++) {
|
||||||
sl_lcolor[i] = sl_tcolor[i];
|
sl_lcolor[i] = sl_tcolor[i];
|
||||||
cur_col[i] = (sysCfg.led_table) ? ledTable[sl_lcolor[i]] : sl_lcolor[i];
|
cur_col[i] = (sysCfg.led_table) ? ledTable[sl_lcolor[i]] : sl_lcolor[i];
|
||||||
if (sfl_flg < 3) {
|
if (sfl_flg < 6) {
|
||||||
if (pin[GPIO_PWM1 +i] < 99) {
|
if (pin[GPIO_PWM1 +i] < 99) {
|
||||||
analogWrite(pin[GPIO_PWM1 +i], cur_col[i] * (PWM_RANGE / 255));
|
analogWrite(pin[GPIO_PWM1 +i], cur_col[i] * (PWM_RANGE / 255));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef USE_WS2812 // ************************************************************************
|
#ifdef USE_WS2812 // ************************************************************************
|
||||||
if (3 == sfl_flg) {
|
if (11 == sfl_flg) {
|
||||||
ws2812_setColor(0, cur_col[0], cur_col[1], cur_col[2]);
|
ws2812_setColor(0, cur_col[0], cur_col[1], cur_col[2]);
|
||||||
}
|
}
|
||||||
#endif // USE_ES2812 ************************************************************************
|
#endif // USE_ES2812 ************************************************************************
|
||||||
if (sfl_flg > 3) {
|
if (sfl_flg > 11) {
|
||||||
sl_my92x1_duty(cur_col[0], cur_col[1], cur_col[2], cur_col[3], cur_col[4]);
|
sl_my92x1_duty(cur_col[0], cur_col[1], cur_col[2], cur_col[3], cur_col[4]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -525,7 +531,7 @@ void sl_hsb2rgb()
|
|||||||
|
|
||||||
void sl_replaceHSB(String *response)
|
void sl_replaceHSB(String *response)
|
||||||
{
|
{
|
||||||
if (sfl_flg > 2) {
|
if ((sfl_flg &7) > 2) {
|
||||||
sl_rgb2hsb();
|
sl_rgb2hsb();
|
||||||
response->replace("{h}", String((uint16_t)(65535.0f * sl_Hue)));
|
response->replace("{h}", String((uint16_t)(65535.0f * sl_Hue)));
|
||||||
response->replace("{s}", String((uint8_t)(254.0f * sl_Sat)));
|
response->replace("{s}", String((uint8_t)(254.0f * sl_Sat)));
|
||||||
@ -540,7 +546,7 @@ void sl_replaceHSB(String *response)
|
|||||||
|
|
||||||
void sl_getHSB(float *hue, float *sat, float *bri)
|
void sl_getHSB(float *hue, float *sat, float *bri)
|
||||||
{
|
{
|
||||||
if (sfl_flg > 2) {
|
if ((sfl_flg &7) > 2) {
|
||||||
sl_rgb2hsb();
|
sl_rgb2hsb();
|
||||||
*hue = sl_Hue;
|
*hue = sl_Hue;
|
||||||
*sat = sl_Sat;
|
*sat = sl_Sat;
|
||||||
@ -567,7 +573,7 @@ void sl_setHSB(float hue, float sat, float bri, uint16_t ct)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
if (sfl_flg > 2) {
|
if (sfl_flg > 2) {
|
||||||
if ((5 == sfl_flg) && (ct > 0)) {
|
if ((5 == (sfl_flg &7)) && (ct > 0)) {
|
||||||
sl_setColorTemp(ct);
|
sl_setColorTemp(ct);
|
||||||
} else {
|
} else {
|
||||||
sl_Hue = hue;
|
sl_Hue = hue;
|
||||||
@ -581,7 +587,7 @@ void sl_setHSB(float hue, float sat, float bri, uint16_t ct)
|
|||||||
} else {
|
} else {
|
||||||
uint8_t tmp = (uint8_t)(bri * 100);
|
uint8_t tmp = (uint8_t)(bri * 100);
|
||||||
sysCfg.led_dimmer[0] = tmp;
|
sysCfg.led_dimmer[0] = tmp;
|
||||||
if (2 == sfl_flg) {
|
if (2 == (sfl_flg &7)) {
|
||||||
if (ct > 0) {
|
if (ct > 0) {
|
||||||
sl_setColorTemp(ct);
|
sl_setColorTemp(ct);
|
||||||
}
|
}
|
||||||
@ -605,13 +611,13 @@ boolean sl_command(char *type, uint16_t index, char *dataBuf, uint16_t data_len,
|
|||||||
char scolor[11];
|
char scolor[11];
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
if ((sfl_flg > 1) && !strcasecmp_P(type, PSTR(D_CMND_COLOR))) {
|
if (((sfl_flg &7) > 1) && !strcasecmp_P(type, PSTR(D_CMND_COLOR))) {
|
||||||
if (dataBuf[0] == '#') {
|
if (dataBuf[0] == '#') {
|
||||||
dataBuf++;
|
dataBuf++;
|
||||||
data_len--;
|
data_len--;
|
||||||
}
|
}
|
||||||
if ((2 * sfl_flg) == data_len) {
|
if ((2 * (sfl_flg &7)) == data_len) {
|
||||||
for (byte i = 0; i < sfl_flg; i++) {
|
for (byte i = 0; i < (sfl_flg &7); i++) {
|
||||||
strlcpy(scolor, dataBuf + (i *2), 3);
|
strlcpy(scolor, dataBuf + (i *2), 3);
|
||||||
sl_dcolor[i] = (uint8_t)strtol(scolor, &p, 16);
|
sl_dcolor[i] = (uint8_t)strtol(scolor, &p, 16);
|
||||||
}
|
}
|
||||||
@ -622,14 +628,14 @@ boolean sl_command(char *type, uint16_t index, char *dataBuf, uint16_t data_len,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef USE_WS2812 // ***********************************************************************
|
#ifdef USE_WS2812 // ***********************************************************************
|
||||||
else if ((3 == sfl_flg) && !strcasecmp_P(type, PSTR(D_CMND_LED)) && (index > 0) && (index <= sysCfg.led_pixels)) {
|
else if ((11 == sfl_flg) && !strcasecmp_P(type, PSTR(D_CMND_LED)) && (index > 0) && (index <= sysCfg.led_pixels)) {
|
||||||
if (dataBuf[0] == '#') {
|
if (dataBuf[0] == '#') {
|
||||||
dataBuf++;
|
dataBuf++;
|
||||||
data_len--;
|
data_len--;
|
||||||
}
|
}
|
||||||
uint8_t sl_ledcolor[3];
|
uint8_t sl_ledcolor[3];
|
||||||
if ((2 * sfl_flg) == data_len) {
|
if ((2 * (sfl_flg &7)) == data_len) {
|
||||||
for (byte i = 0; i < sfl_flg; i++) {
|
for (byte i = 0; i < (sfl_flg &7); i++) {
|
||||||
strlcpy(scolor, dataBuf + (i *2), 3);
|
strlcpy(scolor, dataBuf + (i *2), 3);
|
||||||
sl_ledcolor[i] = (uint8_t)strtol(scolor, &p, 16);
|
sl_ledcolor[i] = (uint8_t)strtol(scolor, &p, 16);
|
||||||
}
|
}
|
||||||
@ -637,7 +643,7 @@ boolean sl_command(char *type, uint16_t index, char *dataBuf, uint16_t data_len,
|
|||||||
}
|
}
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_LED "%d\":\"%s\"}"), index, ws2812_getColor(index, scolor));
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_LED "%d\":\"%s\"}"), index, ws2812_getColor(index, scolor));
|
||||||
}
|
}
|
||||||
else if ((3 == sfl_flg) && !strcasecmp_P(type, PSTR(D_CMND_PIXELS))) {
|
else if ((11 == sfl_flg) && !strcasecmp_P(type, PSTR(D_CMND_PIXELS))) {
|
||||||
if ((payload > 0) && (payload <= WS2812_MAX_LEDS)) {
|
if ((payload > 0) && (payload <= WS2812_MAX_LEDS)) {
|
||||||
sysCfg.led_pixels = payload;
|
sysCfg.led_pixels = payload;
|
||||||
ws2812_clear();
|
ws2812_clear();
|
||||||
@ -645,13 +651,13 @@ boolean sl_command(char *type, uint16_t index, char *dataBuf, uint16_t data_len,
|
|||||||
}
|
}
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_PIXELS "\":%d}"), sysCfg.led_pixels);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_PIXELS "\":%d}"), sysCfg.led_pixels);
|
||||||
}
|
}
|
||||||
else if ((3 == sfl_flg) && !strcasecmp_P(type, PSTR(D_CMND_WIDTH))) {
|
else if ((11 == sfl_flg) && !strcasecmp_P(type, PSTR(D_CMND_WIDTH))) {
|
||||||
if ((payload >= 0) && (payload <= 4)) {
|
if ((payload >= 0) && (payload <= 4)) {
|
||||||
sysCfg.led_width = payload;
|
sysCfg.led_width = payload;
|
||||||
}
|
}
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_WIDTH "\":%d}"), sysCfg.led_width);
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_WIDTH "\":%d}"), sysCfg.led_width);
|
||||||
}
|
}
|
||||||
else if ((3 == sfl_flg) && !strcasecmp_P(type, PSTR(D_CMND_SCHEME))) {
|
else if ((11 == sfl_flg) && !strcasecmp_P(type, PSTR(D_CMND_SCHEME))) {
|
||||||
if ((payload >= 0) && (payload <= 9)) {
|
if ((payload >= 0) && (payload <= 9)) {
|
||||||
sysCfg.led_scheme = payload;
|
sysCfg.led_scheme = payload;
|
||||||
if (1 == sysCfg.led_scheme) {
|
if (1 == sysCfg.led_scheme) {
|
||||||
@ -672,7 +678,7 @@ boolean sl_command(char *type, uint16_t index, char *dataBuf, uint16_t data_len,
|
|||||||
do_cmnd_power(Maxdevice, 1);
|
do_cmnd_power(Maxdevice, 1);
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_WAKEUP "\":\"" D_STARTED "\"}"));
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_CMND_WAKEUP "\":\"" D_STARTED "\"}"));
|
||||||
}
|
}
|
||||||
else if (!strcasecmp_P(type, PSTR(D_CMND_COLORTEMPERATURE)) && ((2 == sfl_flg) || (5 == sfl_flg))) { // ColorTemp
|
else if (!strcasecmp_P(type, PSTR(D_CMND_COLORTEMPERATURE)) && ((2 == (sfl_flg &7)) || (5 == (sfl_flg &7)))) { // ColorTemp
|
||||||
if ((payload >= 153) && (payload <= 500)) { // https://developers.meethue.com/documentation/core-concepts
|
if ((payload >= 153) && (payload <= 500)) { // https://developers.meethue.com/documentation/core-concepts
|
||||||
sl_setColorTemp(payload);
|
sl_setColorTemp(payload);
|
||||||
coldim = true;
|
coldim = true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user