NodeRed Dashbord color picker compatible parser now

(tolerant to MQTT payload arrays like here):
[myhome/in/kuh/set] hsv(65, 100%, 86%)
Item=kuh Sub=1 Cmd=0 Par= <65> <100> <86>
This commit is contained in:
2019-04-09 00:48:20 +03:00
parent 8166e55fca
commit 03ea4dddd1
4 changed files with 36 additions and 14 deletions

View File

@@ -52,7 +52,7 @@ const char SETPOINT_P[] PROGMEM = "setpoint";
const char POWER_P[] PROGMEM = "power";
const char VOL_P[] PROGMEM = "vol";
const char HEAT_P[] PROGMEM = "heat";
const char CSV_P[] PROGMEM = "csv";
const char HSV_P[] PROGMEM = "hsv";
const char RGB_P[] PROGMEM = "rgb";
const char RPM_P[] PROGMEM = "rpm";
@@ -85,10 +85,11 @@ int txt2cmd(char *payload) {
else if (strcmp_P(payload, FALSE_P) == 0) cmd = CMD_OFF;
else if (strcmp_P(payload, INCREASE_P) == 0) cmd = CMD_UP;
else if (strcmp_P(payload, DECREASE_P) == 0) cmd = CMD_DN;
else if (*payload == '-' || (*payload >= '0' && *payload <= '9')) cmd = 0;
else if (*payload == '{') cmd = -2;
else if (*payload == '#') cmd = -3;
else if (*payload == '-' || (*payload >= '0' && *payload <= '9')) cmd = CMD_NUM; //0
else if (*payload == '{') cmd = CMD_JSON;
else if (*payload == '#') cmd = CMD_RGB;
else if (strncmp_P(payload, HSV_P, 3) == 0) cmd = CMD_HSV;
else if (strncmp_P(payload, RGB_P, strlen (RGB_P)) == 0) cmd = CMD_RGB;
return cmd;
}
@@ -104,7 +105,7 @@ int txt2subItem(char *payload) {
else if (strcmp_P(payload, POWER_P) == 0) cmd = S_POWER;
else if (strcmp_P(payload, VOL_P) == 0) cmd = S_VOL;
else if (strcmp_P(payload, HEAT_P) == 0) cmd = S_HEAT;
else if (strcmp_P(payload, CSV_P) == 0) cmd = S_CSV;
else if (strcmp_P(payload, HSV_P) == 0) cmd = S_HSV;
else if (strcmp_P(payload, RGB_P) == 0) cmd = S_RGB;
return cmd;
}
@@ -263,8 +264,11 @@ if (subsubItem = strchr(subItem, '/'))
if (isSet)
{
int cmd = txt2cmd(payload);
debugSerial<<F("Txt2Cmd:")<<cmd<<endl;
switch (cmd) {
case 0: {
case CMD_NUM:
case CMD_HSV:
{
short i = 0;
int Par[3];

View File

@@ -26,7 +26,7 @@ e-mail anklimov@gmail.com
#define S_POWER 5
#define S_VOL 6
#define S_HEAT 7
#define S_CSV 8
#define S_HSV 8
#define S_RGB 9
#define S_RPM 10
@@ -43,6 +43,12 @@ e-mail anklimov@gmail.com
#define CH_AC_HAIER 10 //AC Haier
#define CH_WHITE 127//
#define CMD_NUM 0
#define CMD_UNKNOWN -1
#define CMD_JSON -2
#define CMD_RGB -3
#define CMD_HSV -4
#define CMD_ON 1
#define CMD_OFF 2
#define CMD_RESTORE 3 //on only if was turned off by CMD_HALT
@@ -50,8 +56,8 @@ e-mail anklimov@gmail.com
#define CMD_HALT 5 //just Off
#define CMD_XON 6 //just on
#define CMD_XOFF 7 //off only if was previously turned on by CMD_XON
#define CMD_UP 8 //just on
#define CMD_DN 9 //off only if was previously turned on by CMD_XON
#define CMD_UP 8 //increase
#define CMD_DN 9 //decrease
#define CMD_SET 0xe
#define CMD_MASK 0xf

View File

@@ -18,6 +18,11 @@
#define SCL_HIGH() (GPEC = (1 << twi_scl))
#endif
#if defined(ARDUINO_ARCH_AVR)
#define WAK_PIN 3 // for LightHub UEXT SCS Pin
#endif
class Input;
class in_ccs811 : public abstractIn {
public:

View File

@@ -78,15 +78,22 @@ void SetAddr(char *out, uint8_t *addr) {
}
}
// chan is pointer to pointer to string
// Function return first retrived integer and move pointer to position next after ','
int getInt(char **chan) {
if (chan && *chan && **chan)
{
//Skip non-numeric values
while (**chan && !(**chan == '-' || (**chan >= '0' && **chan<='9'))) *chan += 1;
int ch = atoi(*chan);
*chan = strchr(*chan, ',');
//Move pointer to next element (after ,)
*chan = strchr(*chan, ',');
if (*chan) *chan += 1;
//Serial.print(F("Par:")); Serial.println(ch);
return ch;
}
return 0;
}