Add optional parameter <startcolor> to command `Scheme`

Add optional parameter <startcolor> to command ``Scheme <scheme>, <startcolor>`` to control initial start color
This commit is contained in:
Theo Arends 2020-01-22 11:55:48 +01:00
parent 38b344fcea
commit fb485dabd3
7 changed files with 29 additions and 30 deletions

View File

@ -82,3 +82,4 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
- Add web page sliders when ``SetOption37 128`` is active allowing control of white(s) - Add web page sliders when ``SetOption37 128`` is active allowing control of white(s)
- Add most SetOptions as defines to my_user_config.h - Add most SetOptions as defines to my_user_config.h
- Add SoftwareSerial to CSE7766 driver allowing different GPIOs (#7563) - Add SoftwareSerial to CSE7766 driver allowing different GPIOs (#7563)
- Add optional parameter <startcolor> to command ``Scheme <scheme>, <startcolor>`` to control initial start color

View File

@ -8,6 +8,7 @@
- Add Zigbee persistence and friendly names - Add Zigbee persistence and friendly names
- Add most SetOptions as defines to my_user_config.h - Add most SetOptions as defines to my_user_config.h
- Add SoftwareSerial to CSE7766 driver allowing different GPIOs (#7563) - Add SoftwareSerial to CSE7766 driver allowing different GPIOs (#7563)
- Add optional parameter <startcolor> to command ``Scheme <scheme>, <startcolor>`` to control initial start color
### 8.1.0.3 20200106 ### 8.1.0.3 20200106

View File

@ -493,6 +493,17 @@ bool ParseIp(uint32_t* addr, const char* str)
return (3 == i); return (3 == i);
} }
uint32_t ParseParameters(uint32_t count, uint32_t *params)
{
char *p;
uint32_t i = 0;
for (char *str = strtok_r(XdrvMailbox.data, ", ", &p); str && i < count; str = strtok_r(nullptr, ", ", &p)) {
params[i] = strtoul(str, nullptr, 0);
i++;
}
return i;
}
// Function to parse & check if version_str is newer than our currently installed version. // Function to parse & check if version_str is newer than our currently installed version.
bool NewerVersion(char* version_str) bool NewerVersion(char* version_str)
{ {

View File

@ -169,7 +169,7 @@ enum UserSelectablePins {
GPIO_SM16716_SEL, // SM16716 SELECT GPIO_SM16716_SEL, // SM16716 SELECT
GPIO_DI, // my92x1 PWM input GPIO_DI, // my92x1 PWM input
GPIO_DCKI, // my92x1 CLK input GPIO_DCKI, // my92x1 CLK input
GPIO_CSE7766_TX, // CSE7766 Serial interface (S31 and Pow R2) GPIO_CSE7766_TX, // CSE7766 Serial interface (S31 and Pow R2) - Not used anymore 20200121
GPIO_CSE7766_RX, // CSE7766 Serial interface (S31 and Pow R2) GPIO_CSE7766_RX, // CSE7766 Serial interface (S31 and Pow R2)
GPIO_ARIRFRCV, // AriLux RF Receive input GPIO_ARIRFRCV, // AriLux RF Receive input
GPIO_TXD, // Serial interface GPIO_TXD, // Serial interface

View File

@ -522,26 +522,19 @@ void CmndEnergyReset(void)
} }
} }
else if ((XdrvMailbox.index > 3) && (XdrvMailbox.index <= 5)) { else if ((XdrvMailbox.index > 3) && (XdrvMailbox.index <= 5)) {
char *p; uint32_t values[2] = { 0 };
char *str = strtok_r(XdrvMailbox.data, ", ", &p); uint32_t position = ParseParameters(2, values);
int32_t position = -1; values[0] *= 100;
uint32_t values[2]; values[1] *= 100;
while ((str != nullptr) && (position < 1)) {
uint32_t value = strtoul(str, nullptr, 10);
position++;
values[position] = value *100;
str = strtok_r(nullptr, ", ", &p);
}
switch (XdrvMailbox.index) switch (XdrvMailbox.index)
{ {
case 4: case 4:
// Reset energy_usage.usage totals // Reset energy_usage.usage totals
if (position > -1) { if (position > 0) {
RtcSettings.energy_usage.usage1_kWhtotal = values[0]; RtcSettings.energy_usage.usage1_kWhtotal = values[0];
} }
if (position > 0) { if (position > 1) {
RtcSettings.energy_usage.usage2_kWhtotal = values[1]; RtcSettings.energy_usage.usage2_kWhtotal = values[1];
} }
Settings.energy_usage.usage1_kWhtotal = RtcSettings.energy_usage.usage1_kWhtotal; Settings.energy_usage.usage1_kWhtotal = RtcSettings.energy_usage.usage1_kWhtotal;
@ -549,10 +542,10 @@ void CmndEnergyReset(void)
break; break;
case 5: case 5:
// Reset energy_usage.return totals // Reset energy_usage.return totals
if (position > -1) { if (position > 0) {
RtcSettings.energy_usage.return1_kWhtotal = values[0]; RtcSettings.energy_usage.return1_kWhtotal = values[0];
} }
if (position > 0) { if (position > 1) {
RtcSettings.energy_usage.return2_kWhtotal = values[1]; RtcSettings.energy_usage.return2_kWhtotal = values[1];
} }
Settings.energy_usage.return1_kWhtotal = RtcSettings.energy_usage.return1_kWhtotal; Settings.energy_usage.return1_kWhtotal = RtcSettings.energy_usage.return1_kWhtotal;

View File

@ -2311,6 +2311,10 @@ void CmndScheme(void)
} }
} }
if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= max_scheme)) { if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= max_scheme)) {
uint32_t parm[2];
if (ParseParameters(2, parm) > 1) {
Light.wheel = parm[1];
}
Settings.light_scheme = XdrvMailbox.payload; Settings.light_scheme = XdrvMailbox.payload;
if (LS_WAKEUP == Settings.light_scheme) { if (LS_WAKEUP == Settings.light_scheme) {
Light.wakeup_active = 3; Light.wakeup_active = 3;
@ -2403,16 +2407,10 @@ void CmndDimmer(void)
void CmndDimmerRange(void) void CmndDimmerRange(void)
{ {
if (XdrvMailbox.data_len > 0) { if (XdrvMailbox.data_len > 0) {
char *p; uint32_t parm[2];
uint8_t i = 0;
uint16_t parm[2];
parm[0] = Settings.dimmer_hw_min; parm[0] = Settings.dimmer_hw_min;
parm[1] = Settings.dimmer_hw_max; parm[1] = Settings.dimmer_hw_max;
for (char *str = strtok_r(XdrvMailbox.data, ", ", &p); str && i < 2; str = strtok_r(nullptr, ", ", &p)) { ParseParameters(2, parm);
parm[i] = strtoul(str, nullptr, 0);
i++;
}
if (parm[0] < parm[1]) { if (parm[0] < parm[1]) {
Settings.dimmer_hw_min = parm[0]; Settings.dimmer_hw_min = parm[0];
Settings.dimmer_hw_max = parm[1]; Settings.dimmer_hw_max = parm[1];

View File

@ -155,13 +155,8 @@ void CmndBuzzer(void)
if (XdrvMailbox.data_len > 0) { if (XdrvMailbox.data_len > 0) {
if (XdrvMailbox.payload > 0) { if (XdrvMailbox.payload > 0) {
char *p;
uint32_t i = 0;
uint32_t parm[4] = { 0 }; uint32_t parm[4] = { 0 };
for (char *str = strtok_r(XdrvMailbox.data, ", ", &p); str && i < 4; str = strtok_r(nullptr, ", ", &p)) { ParseParameters(4, parm);
parm[i] = strtoul(str, nullptr, 0);
i++;
}
for (uint32_t i = 0; i < 3; i++) { for (uint32_t i = 0; i < 3; i++) {
if (parm[i] < 1) { parm[i] = 1; } // Default Count, On time, Off time if (parm[i] < 1) { parm[i] = 1; } // Default Count, On time, Off time
} }