From 33ff4fa056a2cb774291549ac2bb9594c4fdf217 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sun, 23 Jan 2022 12:29:06 +0100 Subject: [PATCH] Add undocumented JSON command --- tasmota/i18n.h | 1 + tasmota/support_command.ino | 39 +++++++++++++++++++++++++++++++++++-- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/tasmota/i18n.h b/tasmota/i18n.h index a86d180e7..423011238 100644 --- a/tasmota/i18n.h +++ b/tasmota/i18n.h @@ -240,6 +240,7 @@ // Commands tasmota.ino #define D_CMND_BACKLOG "Backlog" +#define D_CMND_JSON "Json" #define D_CMND_DELAY "Delay" #define D_CMND_NODELAY "NoDelay" #define D_CMND_STATUS "Status" diff --git a/tasmota/support_command.ino b/tasmota/support_command.ino index 92274dc55..392bdddb9 100644 --- a/tasmota/support_command.ino +++ b/tasmota/support_command.ino @@ -42,7 +42,7 @@ const char kTasmotaCommands[] PROGMEM = "|" // No prefix #endif // USE_DEVICE_GROUPS_SEND D_CMND_DEVGROUP_SHARE "|" D_CMND_DEVGROUPSTATUS "|" D_CMND_DEVGROUP_TIE "|" #endif // USE_DEVICE_GROUPS - D_CMND_SETSENSOR "|" D_CMND_SENSOR "|" D_CMND_DRIVER + D_CMND_SETSENSOR "|" D_CMND_SENSOR "|" D_CMND_DRIVER "|" D_CMND_JSON #ifdef ESP32 "|Info|" D_CMND_TOUCH_CAL "|" D_CMND_TOUCH_THRES "|" D_CMND_TOUCH_NUM "|" D_CMND_CPU_FREQUENCY #endif // ESP32 @@ -74,7 +74,7 @@ void (* const TasmotaCommand[])(void) PROGMEM = { #endif // USE_DEVICE_GROUPS_SEND &CmndDevGroupShare, &CmndDevGroupStatus, &CmndDevGroupTie, #endif // USE_DEVICE_GROUPS - &CmndSetSensor, &CmndSensor, &CmndDriver + &CmndSetSensor, &CmndSensor, &CmndDriver, &CmndJson #ifdef ESP32 , &CmndInfo, &CmndTouchCal, &CmndTouchThres, &CmndTouchNum, &CmndCpuFrequency #endif // ESP32 @@ -391,6 +391,41 @@ void CmndBacklog(void) { } } +void CmndJson(void) { + // Json {"POWER":"OFF","Dimmer":100,"Color":"FFD908","HSBColor":"51,97,100","Channel":[100,85,3]} + JsonParser parser((char*)XdrvMailbox.data); + JsonParserObject root = parser.getRootObject(); + if (root) { + String backlog; + for (auto command_key : root) { + const char *command = command_key.getStr(); + JsonParserToken parameters = command_key.getValue(); + if (parameters.isArray()) { + JsonParserArray parameter_arr = parameters.getArray(); + uint32_t index = 1; + for (auto value : parameter_arr) { + if (backlog.length()) { backlog += ";"; } + backlog += command; + backlog += index++; + backlog += " "; + backlog += value.getStr(); // Channel1 100;Channel2 85;Channel3 3 + } + } else { + if (backlog.length()) { backlog += ";"; } + backlog += command; + backlog += " "; + backlog += parameters.getStr(); // HSBColor 51,97,100 + } + } + XdrvMailbox.data = (char*)backlog.c_str(); // Backlog commands + XdrvMailbox.data_len = 1; // Any data + XdrvMailbox.index = 0; // Backlog0 - no delay + CmndBacklog(); + } else { + ResponseCmndChar(PSTR(D_JSON_EMPTY)); + } +} + void CmndDelay(void) { if ((XdrvMailbox.payload >= (MIN_BACKLOG_DELAY / 100)) && (XdrvMailbox.payload <= 3600)) {