mqtt test message is wrapped into generic protocol

This commit is contained in:
bogd 2024-08-28 16:13:47 +02:00
parent dcd659e5ea
commit 479b8968e1

View File

@ -161,6 +161,7 @@ esp_err_t ExternalServiceMQTTSend(char *servname, char *data, int len, int idx)
} }
#define MAX_ERROR_JSON 256 #define MAX_ERROR_JSON 256
/*
mqtt_app_err_t PublicTestMQTT(int idx) mqtt_app_err_t PublicTestMQTT(int idx)
{ {
char tmp[10]; char tmp[10];
@ -189,6 +190,70 @@ mqtt_app_err_t PublicTestMQTT(int idx)
merr = API_INTERNAL_ERR; merr = API_INTERNAL_ERR;
return merr; return merr;
} }
*/
mqtt_app_err_t PublicTestMQTT(int idx)
{
char tmp[10];
char resp[256];
char JSONMess[1024];
struct jWriteControl jwc;
jwOpen(&jwc, JSONMess, 1024 - 64, JW_OBJECT, JW_COMPACT);
jwObj_object(&jwc, "data");
time_t now;
time(&now);
jwObj_int(&jwc, "msgid", (unsigned int) now);
jwObj_string(&jwc, "srcid", GetSysConf()->ID);
jwObj_string(&jwc, "dstid", "FFFFFFFF");
char time[ISO8601_TIMESTAMP_LENGTH];
GetISO8601Time(time);
jwObj_string(&jwc, "time", time);
jwObj_int(&jwc, "msgtype", DATA_MESSAGE_TYPE_COMMAND);
jwObj_int(&jwc, "payloadtype", 1);
jwObj_object(&jwc, "payload");
jwObj_int(&jwc, "applytype", 0);
jwObj_object(&jwc, "variables");
jwObj_string(&jwc, "event", "MQTT_TEST_MESSAGE)");
strcpy(resp, "mqtt://");
strcat(resp, GetSysConf()->mqttStation[idx].ServerAddr);
itoa(GetSysConf()->mqttStation[idx].ServerPort, tmp, 10);
strcat(resp, ":");
strcat(resp, tmp);
jwObj_string(&jwc, "url", resp);
ComposeTopic(resp, idx, SERVICE_NAME, UPLINK_SUBTOPIC);
jwObj_string(&jwc, "tx_topic", resp);
ComposeTopic(resp, idx, SERVICE_NAME, DOWNLINK_SUBTOPIC);
jwObj_string(&jwc, "rx_topic", resp);
jwEnd(&jwc); //close variables
jwEnd(&jwc); //close payload
jwEnd(&jwc); //close data
//calculate sha from 'data' object
char *datap = strstr(JSONMess, "\"data\":");
if (datap)
{
datap += sizeof("\"data\":") - 1;
unsigned char sha[32 + 1];
unsigned char sha_print[32 * 2 + 1];
SHA256hmacHash((unsigned char*) datap, strlen(datap), (unsigned char*) "mykey", sizeof("mykey"), sha);
BytesToStr(sha, sha_print, 32);
sha_print[32 * 2] = 0x00;
#if REAST_API_DEBUG_MODE
ESP_LOGI(TAG, "SHA256 of DATA object is %s", sha_print);
#endif
jwObj_string(&jwc, "signature", (char*) sha_print);
}
else
return ESP_ERR_NOT_FOUND;
jwClose(&jwc);
mqtt_app_err_t merr = API_OK;
if (SysServiceMQTTSend(JSONMess, strlen(JSONMess), idx) != ESP_OK)
merr = API_INTERNAL_ERR;
return merr;
}
static void mqtt_system_event_handler(int idx, void *handler_args, esp_event_base_t base, int32_t event_id, static void mqtt_system_event_handler(int idx, void *handler_args, esp_event_base_t base, int32_t event_id,
void *event_data) void *event_data)