implemented original JSON types in the payload

This commit is contained in:
Bogdan Pilyugin 2023-07-28 17:34:36 +02:00
parent 581e2a6ad5
commit e689f4a2e1
3 changed files with 56 additions and 29 deletions

View File

@ -92,8 +92,8 @@ typedef struct
int err_code; int err_code;
} data_message_t; } data_message_t;
esp_err_t GetConfVar(char* name, char* val); esp_err_t GetConfVar(char* name, char* val, rest_var_types *tp);
esp_err_t SetConfVar(char* name, char* val); esp_err_t SetConfVar(char* name, char* val, rest_var_types *tp);
esp_err_t SysServiceDataHandler(data_message_t *MSG); esp_err_t SysServiceDataHandler(data_message_t *MSG);
sys_error_code SysVarsPayloadHandler(data_message_t *MSG); sys_error_code SysVarsPayloadHandler(data_message_t *MSG);

View File

@ -24,6 +24,7 @@
#include "SystemApplication.h" #include "SystemApplication.h"
#include <SysConfiguration.h> #include <SysConfiguration.h>
#include <webguiapp.h> #include <webguiapp.h>
#include "esp_wifi.h"
extern SYS_CONFIG SysConfig; extern SYS_CONFIG SysConfig;
@ -41,18 +42,36 @@ static void funct_time(char *argres)
snprintf(argres, MAX_DYNVAR_LENGTH, "%d", (int) now); snprintf(argres, MAX_DYNVAR_LENGTH, "%d", (int) now);
} }
static void funct_wifiscan(char *argres)
{
if (atoi(argres))
WiFiScan();
}
static void funct_wifiscanres(char *argres)
{
int arg = atoi(argres);
wifi_ap_record_t *R = GetWiFiAPRecord(arg);
if (!R)
return;
snprintf(argres, MAX_DYNVAR_LENGTH, "{\"ssid\":\"%s\",\"rssi\":%i,\"ch\":%d}", R->ssid, R->rssi,
R->primary);
}
const rest_var_t ConfigVariables[] = const rest_var_t ConfigVariables[] =
{ {
{ 0, "netname", &SysConfig.NetBIOSName, VAR_STRING, 3, 31 }, { 0, "netname", &SysConfig.NetBIOSName, VAR_STRING, 3, 31 },
{ 1, "otaurl", &SysConfig.OTAURL, VAR_STRING, 3, 128 }, { 1, "otaurl", &SysConfig.OTAURL, VAR_STRING, 3, 128 },
{ 2, "ledenab", &SysConfig.Flags1.bIsLedsEnabled, VAR_BOOL, 0, 1 }, { 2, "ledenab", &SysConfig.Flags1.bIsLedsEnabled, VAR_BOOL, 0, 1 },
{ 3, "otaint", &SysConfig.OTAAutoInt, VAR_INT, 0, 65535 }, { 3, "otaint", &SysConfig.OTAAutoInt, VAR_INT, 0, 65535 },
{ 4, "time", &funct_time, VAR_FUNCT, 0, 65535 }, { 4, "time", &funct_time, VAR_FUNCT, 0, 0 },
{ 5, "addone", &funct_addone, VAR_FUNCT, 0, 65535 } { 5, "addone", &funct_addone, VAR_FUNCT, 0, 0 },
{ 6, "wifiscan", &funct_wifiscan, VAR_FUNCT, 0, 0 },
{ 7, "wifiscanres", &funct_wifiscanres, VAR_FUNCT, 0, 0 }
}; };
esp_err_t SetConfVar(char *name, char *val) esp_err_t SetConfVar(char *name, char *val, rest_var_types *tp)
{ {
rest_var_t *V = NULL; rest_var_t *V = NULL;
for (int i = 0; i < sizeof(ConfigVariables) / sizeof(rest_var_t); ++i) for (int i = 0; i < sizeof(ConfigVariables) / sizeof(rest_var_t); ++i)
@ -66,6 +85,7 @@ esp_err_t SetConfVar(char *name, char *val)
if (!V) if (!V)
return ESP_ERR_NOT_FOUND; return ESP_ERR_NOT_FOUND;
int constr; int constr;
*tp = V->vartype;
switch (V->vartype) switch (V->vartype)
{ {
case VAR_BOOL: case VAR_BOOL:
@ -96,7 +116,7 @@ esp_err_t SetConfVar(char *name, char *val)
return ESP_OK; return ESP_OK;
} }
esp_err_t GetConfVar(char *name, char *val) esp_err_t GetConfVar(char *name, char *val, rest_var_types *tp)
{ {
rest_var_t *V = NULL; rest_var_t *V = NULL;
for (int i = 0; i < sizeof(ConfigVariables) / sizeof(rest_var_t); ++i) for (int i = 0; i < sizeof(ConfigVariables) / sizeof(rest_var_t); ++i)
@ -109,6 +129,7 @@ esp_err_t GetConfVar(char *name, char *val)
} }
if (!V) if (!V)
return ESP_ERR_NOT_FOUND; return ESP_ERR_NOT_FOUND;
*tp = V->vartype;
switch (V->vartype) switch (V->vartype)
{ {
case VAR_BOOL: case VAR_BOOL:
@ -127,7 +148,7 @@ esp_err_t GetConfVar(char *name, char *val)
} }
val = V->ref; //val = V->ref;
return ESP_OK; return ESP_OK;
} }

View File

@ -32,9 +32,9 @@
"payload":{ "payload":{
"applytype":1, "applytype":1,
"variables":[{"name":"netname","val":"DEVICE_HOSTNAME"}, "variables":[{"name":"netname","val":"DEVICE_HOSTNAME"},
{"name":"otaurl","val":"https://iotronic.cloud/firmware/firmware.bin"}, {"name":"otaurl","val":"https://iotronic.cloud/firmware/firmware.bin"},
{"name":"ledenab","val":"0"}, {"name":"ledenab","val":"0"},
{"name":"otaint","val":"3600"}] {"name":"otaint","val":"3600"}]
}}, }},
"signature":"6a11b872e8f766673eb82e127b6918a0dc96a42c5c9d184604f9787f3d27bcef"} "signature":"6a11b872e8f766673eb82e127b6918a0dc96a42c5c9d184604f9787f3d27bcef"}
@ -47,9 +47,9 @@
"payloadtype":1, "payloadtype":1,
"payload":{ "payload":{
"variables":[{"name":"netname","val":""}, "variables":[{"name":"netname","val":""},
{"name":"otaurl","val":""}, {"name":"otaurl","val":""},
{"name":"ledenab","val":""}, {"name":"ledenab","val":""},
{"name":"otaint","val":""}] {"name":"otaint","val":""}]
}}, }},
"signature":"3c1254d5b0e7ecc7e662dd6397554f02622ef50edba18d0b30ecb5d53e409bcb"} "signature":"3c1254d5b0e7ecc7e662dd6397554f02622ef50edba18d0b30ecb5d53e409bcb"}
@ -63,9 +63,9 @@
"payloadtype":1, "payloadtype":1,
"payload":{ "payload":{
"variables":[{"name":"netname","val":"DEVICE_HOSTNAME"}, "variables":[{"name":"netname","val":"DEVICE_HOSTNAME"},
{"name":"otaurl","val":"https://iotronic.cloud/firmware/firmware.bin"}, {"name":"otaurl","val":"https://iotronic.cloud/firmware/firmware.bin"},
{"name":"ledenab","val":"0"}, {"name":"ledenab","val":"0"},
{"name":"otaint","val":"3600"}] {"name":"otaint","val":"3600"}]
}, },
"error":"SYS_OK", "error":"SYS_OK",
"error_descr":"Result successful"}, "error_descr":"Result successful"},
@ -142,21 +142,29 @@ static sys_error_code SysPayloadTypeVarsHandler(data_message_t *MSG)
jwArr_object(); jwArr_object();
if (MSG->parsedData.msgType == DATA_MESSAGE_TYPE_COMMAND) if (MSG->parsedData.msgType == DATA_MESSAGE_TYPE_COMMAND)
{ //Write variables { //Write variables
esp_err_t res = SetConfVar(VarName, VarValue); rest_var_types tp;
esp_err_t res = SetConfVar(VarName, VarValue, &tp);
if (res == ESP_OK) if (res == ESP_OK)
GetConfVar(VarName, VarValue); GetConfVar(VarName, VarValue, &tp);
else else
strcpy(VarValue, esp_err_to_name(res)); strcpy(VarValue, esp_err_to_name(res));
jwObj_string("name", VarName); jwObj_string("name", VarName);
jwObj_string("val", VarValue); if (tp == VAR_STRING)
jwObj_string("val", VarValue);
else
jwObj_raw("val", VarValue);
} }
else else
{ //Read variables { //Read variables
esp_err_t res = GetConfVar(VarName, VarValue); rest_var_types tp;
esp_err_t res = GetConfVar(VarName, VarValue, &tp);
if (res != ESP_OK) if (res != ESP_OK)
strcpy(VarValue, esp_err_to_name(res)); strcpy(VarValue, esp_err_to_name(res));
jwObj_string("name", VarName); jwObj_string("name", VarName);
jwObj_string("val", VarValue); if (tp == VAR_STRING)
jwObj_string("val", VarValue);
else
jwObj_raw("val", VarValue);
} }
jwEnd(); jwEnd();
} }
@ -171,25 +179,23 @@ static sys_error_code SysPayloadTypeVarsHandler(data_message_t *MSG)
jwObj_string("error_descr", (char*) err_desc); jwObj_string("error_descr", (char*) err_desc);
jwEnd(); jwEnd();
char *datap = strstr(MSG->outputDataBuffer, "\"data\":");
char* datap = strstr(MSG->outputDataBuffer, "\"data\":"); if (datap)
if(datap)
{ {
datap += sizeof("\"data\":") - 1; datap += sizeof("\"data\":") - 1;
SHA256hmacHash((unsigned char*) datap , strlen(datap), (unsigned char*) "mykey", sizeof("mykey"), SHA256hmacHash((unsigned char*) datap, strlen(datap), (unsigned char*) "mykey", sizeof("mykey"),
MSG->parsedData.sha256); MSG->parsedData.sha256);
unsigned char sha_print[32 * 2 + 1]; unsigned char sha_print[32 * 2 + 1];
BytesToStr(MSG->parsedData.sha256, sha_print, 32); BytesToStr(MSG->parsedData.sha256, sha_print, 32);
sha_print[32 * 2] = 0x00; sha_print[32 * 2] = 0x00;
ESP_LOGI(TAG, "SHA256 of DATA object is %s", sha_print); ESP_LOGI(TAG, "SHA256 of DATA object is %s", sha_print);
jwObj_string("signature", (char*)sha_print); jwObj_string("signature", (char*) sha_print);
} }
else else
return SYS_ERROR_SHA256_DATA; return SYS_ERROR_SHA256_DATA;
jwEnd(); jwEnd();
jwClose(); jwClose();
jRead(MSG->inputDataBuffer, "{'data'{'payload'{'applytype'", &result); jRead(MSG->inputDataBuffer, "{'data'{'payload'{'applytype'", &result);
if (result.elements == 1) if (result.elements == 1)
{ {
@ -200,11 +206,11 @@ static sys_error_code SysPayloadTypeVarsHandler(data_message_t *MSG)
break; break;
case 1: case 1:
WriteNVSSysConfig(GetSysConf()); WriteNVSSysConfig(GetSysConf());
break; break;
case 2: case 2:
WriteNVSSysConfig(GetSysConf()); WriteNVSSysConfig(GetSysConf());
DelayedRestart(); DelayedRestart();
break; break;
default: default:
return SYS_ERROR_PARSE_APPLYTYPE; return SYS_ERROR_PARSE_APPLYTYPE;
} }