From 1068d59a635ae8f7e786ffe4c99e6494f6c60625 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Wed, 24 Jul 2019 11:10:15 +0200 Subject: [PATCH] Extent commands Var and Mem with option to show all parameters at once Extent commands Var and Mem with option to show all parameters at once (#6107) --- sonoff/settings.h | 2 +- sonoff/sonoff.ino | 7 ++++--- sonoff/xdrv_10_rules.ino | 36 ++++++++++++++++++++++++++---------- 3 files changed, 31 insertions(+), 14 deletions(-) diff --git a/sonoff/settings.h b/sonoff/settings.h index 6b9cdd314..f5882cffd 100644 --- a/sonoff/settings.h +++ b/sonoff/settings.h @@ -398,7 +398,7 @@ struct XDRVMAILBOX { uint16_t payload16; int16_t payload; bool grpflg; - uint8_t notused; + bool usridx; char *topic; char *data; } XdrvMailbox; diff --git a/sonoff/sonoff.ino b/sonoff/sonoff.ino index e03f22ea4..03b44f2eb 100755 --- a/sonoff/sonoff.ino +++ b/sonoff/sonoff.ino @@ -478,7 +478,7 @@ void MqttDataHandler(char* topic, uint8_t* data, unsigned int data_len) uint8_t lines = 1; bool jsflg = false; bool grpflg = false; -// bool user_append_index = false; + bool user_index = false; uint32_t i = 0; uint32_t index; uint32_t address; @@ -520,7 +520,7 @@ void MqttDataHandler(char* topic, uint8_t* data, unsigned int data_len) } if (i < strlen(type)) { index = atoi(type +i); -// user_append_index = true; + user_index = true; } type[i] = '\0'; } @@ -556,6 +556,7 @@ void MqttDataHandler(char* topic, uint8_t* data, unsigned int data_len) XdrvMailbox.payload16 = payload16; XdrvMailbox.payload = payload; XdrvMailbox.grpflg = grpflg; + XdrvMailbox.usridx = user_index; XdrvMailbox.topic = type; XdrvMailbox.data = dataBuf; if (!XdrvCall(FUNC_COMMAND)) { @@ -604,7 +605,7 @@ void MqttDataHandler(char* topic, uint8_t* data, unsigned int data_len) } else if ((CMND_POWER == command_code) && (index > 0) && (index <= devices_present)) { if ((payload < 0) || (payload > 4)) { payload = 9; } -// Settings.flag.device_index_enable = user_append_index; +// Settings.flag.device_index_enable = user_index; ExecuteCommandPower(index, payload, SRC_IGNORE); fallback_topic_flag = false; return; diff --git a/sonoff/xdrv_10_rules.ino b/sonoff/xdrv_10_rules.ino index e4da6939b..53d4254f8 100644 --- a/sonoff/xdrv_10_rules.ino +++ b/sonoff/xdrv_10_rules.ino @@ -1173,26 +1173,42 @@ bool RulesCommand(void) Response_P(S_JSON_COMMAND_SVALUE, command, D_JSON_DONE); } else if ((CMND_VAR == command_code) && (index > 0) && (index <= MAX_RULE_VARS)) { - if (XdrvMailbox.data_len > 0) { + if (!XdrvMailbox.usridx) { + mqtt_data[0] = '\0'; + for (uint32_t i = 0; i < MAX_RULE_VARS; i++) { + ResponseAppend_P(PSTR("%c\"Var%d\":\"%s\""), (i) ? ',' : '{', i +1, vars[i]); + } + ResponseJsonEnd(); + } else { + if (XdrvMailbox.data_len > 0) { #ifdef USE_EXPRESSION - dtostrfd(evaluateExpression(XdrvMailbox.data, XdrvMailbox.data_len), Settings.flag2.calc_resolution, vars[index -1]); + dtostrfd(evaluateExpression(XdrvMailbox.data, XdrvMailbox.data_len), Settings.flag2.calc_resolution, vars[index -1]); #else - strlcpy(vars[index -1], ('"' == XdrvMailbox.data[0]) ? "" : XdrvMailbox.data, sizeof(vars[index -1])); + strlcpy(vars[index -1], ('"' == XdrvMailbox.data[0]) ? "" : XdrvMailbox.data, sizeof(vars[index -1])); #endif //USE_EXPRESSION - bitSet(vars_event, index -1); + bitSet(vars_event, index -1); + } + Response_P(S_JSON_COMMAND_INDEX_SVALUE, command, index, vars[index -1]); } - Response_P(S_JSON_COMMAND_INDEX_SVALUE, command, index, vars[index -1]); } else if ((CMND_MEM == command_code) && (index > 0) && (index <= MAX_RULE_MEMS)) { - if (XdrvMailbox.data_len > 0) { + if (!XdrvMailbox.usridx) { + mqtt_data[0] = '\0'; + for (uint32_t i = 0; i < MAX_RULE_MEMS; i++) { + ResponseAppend_P(PSTR("%c\"Mem%d\":\"%s\""), (i) ? ',' : '{', i +1, Settings.mems[i]); + } + ResponseJsonEnd(); + } else { + if (XdrvMailbox.data_len > 0) { #ifdef USE_EXPRESSION - dtostrfd(evaluateExpression(XdrvMailbox.data, XdrvMailbox.data_len), Settings.flag2.calc_resolution, Settings.mems[index -1]); + dtostrfd(evaluateExpression(XdrvMailbox.data, XdrvMailbox.data_len), Settings.flag2.calc_resolution, Settings.mems[index -1]); #else - strlcpy(Settings.mems[index -1], ('"' == XdrvMailbox.data[0]) ? "" : XdrvMailbox.data, sizeof(Settings.mems[index -1])); + strlcpy(Settings.mems[index -1], ('"' == XdrvMailbox.data[0]) ? "" : XdrvMailbox.data, sizeof(Settings.mems[index -1])); #endif //USE_EXPRESSION - bitSet(mems_event, index -1); + bitSet(mems_event, index -1); + } + Response_P(S_JSON_COMMAND_INDEX_SVALUE, command, index, Settings.mems[index -1]); } - Response_P(S_JSON_COMMAND_INDEX_SVALUE, command, index, Settings.mems[index -1]); } else if (CMND_CALC_RESOLUTION == command_code) { if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 7)) {