From 9b413cd9bb6acc3f6a07bcf70d11aa7b5661ebd0 Mon Sep 17 00:00:00 2001 From: Andrey Klimov Date: Wed, 18 Sep 2019 02:23:13 +0300 Subject: [PATCH] AC mqtt status fixed cmd update for "set Enabled & disabled --- lighthub/item.cpp | 15 +++++++++++---- lighthub/modules/out_ac.cpp | 21 +++++++++++++++++++-- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/lighthub/item.cpp b/lighthub/item.cpp index c14bf2e..e0931a0 100644 --- a/lighthub/item.cpp +++ b/lighthub/item.cpp @@ -49,6 +49,9 @@ const char DECREASE_P[] PROGMEM = "DECREASE"; const char TRUE_P[] PROGMEM = "TRUE"; const char FALSE_P[] PROGMEM = "FALSE"; +const char ENABLED_P[] PROGMEM = "ENABLED"; +const char DISABLED_P[] PROGMEM = "DISABLED"; + char HEAT_P[] PROGMEM = "HEAT"; char COOL_P[] PROGMEM = "COOL"; char AUTO_P[] PROGMEM = "AUTO"; @@ -102,6 +105,8 @@ int txt2cmd(char *payload) { else if (strcmp_P(payload, DRY_P) == 0) cmd = CMD_DRY; else if (strcmp_P(payload, TRUE_P) == 0) cmd = CMD_ON; else if (strcmp_P(payload, FALSE_P) == 0) cmd = CMD_OFF; + else if (strcmp_P(payload, ENABLED_P) == 0) cmd = CMD_ON; + else if (strcmp_P(payload, DISABLED_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 (strcmp_P(payload, HIGH_P) == 0) cmd = CMD_HIGH; @@ -500,7 +505,7 @@ int Item::Ctrl(short cmd, short n, int *Parameters, boolean send, int suffixCode case CMD_SET: // new style SET - w/o turning ON //if (/*itemType !=CH_THERMO && */send) setCmd(CMD_SET); //prevent ON thermostat by semp set ???? - + setCmd(CMD_SET); ///??? trying switch (itemType) { case CH_RGBW: //only if configured VAL array @@ -578,9 +583,7 @@ int Item::Ctrl(short cmd, short n, int *Parameters, boolean send, int suffixCode if (itemType != CH_GROUP) return -3; } case CMD_ON: - case CMD_COOL: - case CMD_AUTO: - case CMD_HEAT: + if (itemType==CH_RGBW && getCmd() == CMD_ON && send /*&& getEnableCMD(500) */) { debugSerial<0 && send) { diff --git a/lighthub/modules/out_ac.cpp b/lighthub/modules/out_ac.cpp index 3059f7b..55f81fc 100644 --- a/lighthub/modules/out_ac.cpp +++ b/lighthub/modules/out_ac.cpp @@ -238,7 +238,7 @@ return 1; }; int out_AC::Ctrl(short cmd, short n, int * Parameters, boolean send, int suffixCode, char* subItem) -{ +{char s_mode[10]; // Some additional Subitems if (strcmp_P(subItem, LOCK_P) == 0) suffixCode = S_LOCK; else if (strcmp_P(subItem, SWING_P) == 0) suffixCode = S_SWING; @@ -254,67 +254,84 @@ int out_AC::Ctrl(short cmd, short n, int * Parameters, boolean send, int suffixC if (set_tmp >= 0 && set_tmp <= 30) { data[B_SET_TMP] = set_tmp; + if (send) publishTopic(item->itemArr->name,(long)set_tmp,"/set"); } break; case S_CMD: + s_mode[0]='\0'; switch (cmd) { case CMD_ON: data[B_POWER] |= 1; SendData(on, sizeof(on)/sizeof(byte)); + if (send) publishTopic(item->itemArr->name,"ON","/cmd"); return 1; break; case CMD_OFF: case CMD_HALT: data[B_POWER] &= ~1; SendData(off, sizeof(off)/sizeof(byte)); + if (send) publishTopic(item->itemArr->name,"OFF","/cmd"); return 1; break; case CMD_AUTO: data[B_MODE] = 0; data[B_POWER] |= 1; + strcpy_P(s_mode,AUTO_P); break; case CMD_COOL: data[B_MODE] = 1; data[B_POWER] |= 1; + strcpy_P(s_mode,COOL_P); break; case CMD_HEAT: data[B_MODE] = 2; data[B_POWER] |= 1; + strcpy_P(s_mode,HEAT_P); break; case CMD_DRY: data[B_MODE] = 4; data[B_POWER] |= 1; + strcpy_P(s_mode,DRY_P); break; case CMD_FAN: data[B_MODE] = 3; data[B_POWER] |= 1; + strcpy_P(s_mode,FAN_ONLY_P); break; case CMD_UNKNOWN: return -1; break; } + if (send) publishTopic(item->itemArr->name,s_mode,"/cmd"); break; case S_FAN: + s_mode[0]='\0'; switch (cmd) { case CMD_AUTO: data[B_FAN_SPD] = 3; + strcpy_P(s_mode,AUTO_P); break; case CMD_HIGH: data[B_FAN_SPD] = 0; + strcpy_P(s_mode,HIGH_P); break; case CMD_MED: data[B_FAN_SPD] = 1; + strcpy_P(s_mode,MED_P); break; case CMD_LOW: data[B_FAN_SPD] = 2; + strcpy_P(s_mode,LOW_P); break; default: if (n) data[B_FAN_SPD] = Parameters[0]; + //TODO - mapping digits to speed } + if (send) publishTopic(item->itemArr->name,s_mode,"/fan"); break; case S_MODE: @@ -413,7 +430,7 @@ int out_AC::Ctrl(short cmd, short n, int * Parameters, boolean send, int suffixC data[10] = 77; data[11] = 95; SendData(data, sizeof(data)/sizeof(byte)); - InsertData(data, sizeof(data)/sizeof(byte)); + //InsertData(data, sizeof(data)/sizeof(byte)); return 1; }