reworked topic structure with added GROUP subtopic

This commit is contained in:
Bogdan Pilyugin 2022-09-29 14:01:56 +02:00
parent f9576486d1
commit a813d33168
8 changed files with 197 additions and 193 deletions

20
Kconfig
View File

@ -578,7 +578,7 @@ menu "webguiapp configuration"
config WEBGUIAPP_MQTT_MAX_TOPIC_LENGTH config WEBGUIAPP_MQTT_MAX_TOPIC_LENGTH
int "Max topic length" int "Max topic length"
range 32 512 range 32 512
default 64 default 128
config WEBGUIAPP_MQTT_SERVER_URL config WEBGUIAPP_MQTT_SERVER_URL
string "MQTT server URL" string "MQTT server URL"
@ -590,18 +590,22 @@ menu "webguiapp configuration"
default 1883 default 1883
config WEBGUIAPP_MQTT_CLIENT_ID_1 config WEBGUIAPP_MQTT_CLIENT_ID_1
string "MQTT_1 client ID" string "MQTT_1 client ID prefix"
default "DEVID1" default "DEV1"
if WEBGUIAPP_MQTT_CLIENTS_NUM > 1 if WEBGUIAPP_MQTT_CLIENTS_NUM > 1
config WEBGUIAPP_MQTT_CLIENT_ID_2 config WEBGUIAPP_MQTT_CLIENT_ID_2
string "MQTT_2 client ID" string "MQTT_2 client ID prefix"
default "DEVID2" default "DEV2"
endif endif
config WEBGUIAPP_MQTT_ROOT_TOPIC config WEBGUIAPP_MQTT_SYSTEM_NAME
string "MQTT root topic" string "MQTT global system name"
default "ROOTTOPIC" default "SYSTEMNAME"
config WEBGUIAPP_MQTT_GROUP_NAME
string "MQTT group name"
default "GROUPNAME"
config WEBGUIAPP_MQTT_USERNAME config WEBGUIAPP_MQTT_USERNAME
string "MQTT user name" string "MQTT user name"

View File

@ -69,7 +69,7 @@ typedef struct
mqtt_client_t* GetMQTTHandlesPool(int idx); mqtt_client_t* GetMQTTHandlesPool(int idx);
QueueHandle_t GetMQTTSendQueue(int idx); QueueHandle_t GetMQTTSendQueue(int idx);
void ComposeTopic(char *topic, char *system_name, char *direct, char *client_name, char *service_name); void ComposeTopic(char *topic, int idx, char *service_name, char *direct);
void regUserEventHandler(void (*event_handler)(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data)); void regUserEventHandler(void (*event_handler)(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data));
void SystemDataHandler(char *data, uint32_t len, int idx); void SystemDataHandler(char *data, uint32_t len, int idx);

View File

@ -136,8 +136,9 @@
{ {
char ServerAddr[32]; char ServerAddr[32];
uint16_t ServerPort; uint16_t ServerPort;
char SystemName[32];
char GroupName[32];
char ClientID[32]; char ClientID[32];
char RootTopic[32];
char UserName[32]; char UserName[32];
char UserPass[32]; char UserPass[32];
struct struct

View File

@ -261,62 +261,66 @@ static HTTP_IO_RESULT HTTPPostServicesSettings(httpd_req_t *req, char *PostData)
char tmp[33]; char tmp[33];
#if CONFIG_WEBGUIAPP_MQTT_ENABLE #if CONFIG_WEBGUIAPP_MQTT_ENABLE
bool TempIsMQTT1Enabled = false; bool TempIsMQTT1Enabled = false;
#if CONFIG_MQTT_CLIENTS_NUM == 2 #if CONFIG_WEBGUIAPP_MQTT_CLIENTS_NUM == 2
bool TempIsMQTT2Enabled = false; bool TempIsMQTT2Enabled = false;
#endif #endif
httpd_query_key_value(PostData, "cld1", GetSysConf()->mqttStation[0].ServerAddr, httpd_query_key_value(PostData, "mqurl1", GetSysConf()->mqttStation[0].ServerAddr,
sizeof(GetSysConf()->mqttStation[0].ServerAddr)); sizeof(GetSysConf()->mqttStation[0].ServerAddr));
httpd_query_key_value(PostData, "idd1", GetSysConf()->mqttStation[0].ClientID, httpd_query_key_value(PostData, "mqid1", GetSysConf()->mqttStation[0].ClientID,
sizeof(GetSysConf()->mqttStation[0].ClientID)); sizeof(GetSysConf()->mqttStation[0].ClientID));
httpd_query_key_value(PostData, "top1", GetSysConf()->mqttStation[0].RootTopic, httpd_query_key_value(PostData, "mqsys1", GetSysConf()->mqttStation[0].SystemName,
sizeof(GetSysConf()->mqttStation[0].RootTopic)); sizeof(GetSysConf()->mqttStation[0].SystemName));
httpd_query_key_value(PostData, "clnm1", GetSysConf()->mqttStation[0].UserName, httpd_query_key_value(PostData, "mqgrp1", GetSysConf()->mqttStation[0].GroupName,
sizeof(GetSysConf()->mqttStation[0].GroupName));
httpd_query_key_value(PostData, "mqname1", GetSysConf()->mqttStation[0].UserName,
sizeof(GetSysConf()->mqttStation[0].UserName)); sizeof(GetSysConf()->mqttStation[0].UserName));
if (httpd_query_key_value(PostData, "mqttenb1", tmp, sizeof(tmp)) == ESP_OK) if (httpd_query_key_value(PostData, "mqen1", tmp, sizeof(tmp)) == ESP_OK)
{ {
if (!strcmp((const char*) tmp, (const char*) "1")) if (!strcmp((const char*) tmp, (const char*) "1"))
TempIsMQTT1Enabled = true; TempIsMQTT1Enabled = true;
} }
if (httpd_query_key_value(PostData, "mprt1", tmp, sizeof(tmp)) == ESP_OK) if (httpd_query_key_value(PostData, "mqport1", tmp, sizeof(tmp)) == ESP_OK)
if (httpd_query_key_value(PostData, "mprt1", tmp, sizeof(tmp)) == ESP_OK) if (httpd_query_key_value(PostData, "mqport1", tmp, sizeof(tmp)) == ESP_OK)
{ {
uint16_t tp = atoi((const char*) tmp); uint16_t tp = atoi((const char*) tmp);
if (tp < 65535 && tp >= 1000) if (tp < 65535 && tp >= 1000)
GetSysConf()->mqttStation[0].ServerPort = tp; GetSysConf()->mqttStation[0].ServerPort = tp;
} }
if (httpd_query_key_value(PostData, "clps1", tmp, sizeof(tmp)) == ESP_OK && if (httpd_query_key_value(PostData, "mqpass1", tmp, sizeof(tmp)) == ESP_OK &&
strcmp(tmp, (const char*) "******")) strcmp(tmp, (const char*) "******"))
{ {
strcpy(GetSysConf()->mqttStation[0].UserPass, tmp); strcpy(GetSysConf()->mqttStation[0].UserPass, tmp);
} }
#if CONFIG_MQTT_CLIENTS_NUM == 2 #if CONFIG_WEBGUIAPP_MQTT_CLIENTS_NUM == 2
httpd_query_key_value(PostData, "cld2", GetSysConf()->mqttStation[1].ServerAddr, httpd_query_key_value(PostData, "mqurl2", GetSysConf()->mqttStation[1].ServerAddr,
sizeof(GetSysConf()->mqttStation[1].ServerAddr)); sizeof(GetSysConf()->mqttStation[1].ServerAddr));
httpd_query_key_value(PostData, "idd2", GetSysConf()->mqttStation[1].ClientID, httpd_query_key_value(PostData, "mqid2", GetSysConf()->mqttStation[1].ClientID,
sizeof(GetSysConf()->mqttStation[1].ClientID)); sizeof(GetSysConf()->mqttStation[1].ClientID));
httpd_query_key_value(PostData, "top2", GetSysConf()->mqttStation[1].RootTopic, httpd_query_key_value(PostData, "mqsys2", GetSysConf()->mqttStation[1].SystemName,
sizeof(GetSysConf()->mqttStation[1].RootTopic)); sizeof(GetSysConf()->mqttStation[1].SystemName));
httpd_query_key_value(PostData, "clnm2", GetSysConf()->mqttStation[1].UserName, httpd_query_key_value(PostData, "mqgrp2", GetSysConf()->mqttStation[1].GroupName,
sizeof(GetSysConf()->mqttStation[1].GroupName));
httpd_query_key_value(PostData, "mqname2", GetSysConf()->mqttStation[1].UserName,
sizeof(GetSysConf()->mqttStation[1].UserName)); sizeof(GetSysConf()->mqttStation[1].UserName));
if (httpd_query_key_value(PostData, "mqttenb2", tmp, sizeof(tmp)) == ESP_OK) if (httpd_query_key_value(PostData, "mqen2", tmp, sizeof(tmp)) == ESP_OK)
{ {
if (!strcmp((const char*) tmp, (const char*) "1")) if (!strcmp((const char*) tmp, (const char*) "1"))
TempIsMQTT2Enabled = true; TempIsMQTT2Enabled = true;
} }
if (httpd_query_key_value(PostData, "mprt2", tmp, sizeof(tmp)) == ESP_OK) if (httpd_query_key_value(PostData, "mqport2", tmp, sizeof(tmp)) == ESP_OK)
if (httpd_query_key_value(PostData, "mprt2", tmp, sizeof(tmp)) == ESP_OK) if (httpd_query_key_value(PostData, "mqport2", tmp, sizeof(tmp)) == ESP_OK)
{ {
uint16_t tp = atoi((const char*) tmp); uint16_t tp = atoi((const char*) tmp);
if (tp < 65535 && tp >= 1000) if (tp < 65535 && tp >= 1000)
GetSysConf()->mqttStation[1].ServerPort = tp; GetSysConf()->mqttStation[1].ServerPort = tp;
} }
if (httpd_query_key_value(PostData, "clps2", tmp, sizeof(tmp)) == ESP_OK && if (httpd_query_key_value(PostData, "mqpass2", tmp, sizeof(tmp)) == ESP_OK &&
strcmp(tmp, (const char*) "******")) strcmp(tmp, (const char*) "******"))
{ {
strcpy(GetSysConf()->mqttStation[1].UserPass, tmp); strcpy(GetSysConf()->mqttStation[1].UserPass, tmp);
@ -340,7 +344,7 @@ static HTTP_IO_RESULT HTTPPostServicesSettings(httpd_req_t *req, char *PostData)
if (!strcmp(tmp, (const char*) "mqtt")) if (!strcmp(tmp, (const char*) "mqtt"))
{ {
GetSysConf()->mqttStation[0].Flags1.bIsGlobalEnabled = TempIsMQTT1Enabled; GetSysConf()->mqttStation[0].Flags1.bIsGlobalEnabled = TempIsMQTT1Enabled;
#if CONFIG_MQTT_CLIENTS_NUM == 2 #if CONFIG_WEBGUIAPP_MQTT_CLIENTS_NUM == 2
GetSysConf()->mqttStation[1].Flags1.bIsGlobalEnabled = TempIsMQTT2Enabled; GetSysConf()->mqttStation[1].Flags1.bIsGlobalEnabled = TempIsMQTT2Enabled;
#endif #endif
} }

View File

@ -457,61 +457,69 @@ void HTTPPrint_gsmmac(char *VarData, void *arg)
#endif #endif
#if CONFIG_WEBGUIAPP_MQTT_ENABLE #if CONFIG_WEBGUIAPP_MQTT_ENABLE
void HTTPPrint_mqtten1(char *VarData, void *arg) void HTTPPrint_mqen1(char *VarData, void *arg)
{ {
PrintCheckbox(VarData, arg, GetSysConf()->mqttStation[0].Flags1.bIsGlobalEnabled); PrintCheckbox(VarData, arg, GetSysConf()->mqttStation[0].Flags1.bIsGlobalEnabled);
} }
void HTTPPrint_ipcld1(char *VarData, void *arg) void HTTPPrint_mqurl1(char *VarData, void *arg)
{ {
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[0].ServerAddr); snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[0].ServerAddr);
} }
void HTTPPrint_mport1(char *VarData, void *arg) void HTTPPrint_mqport1(char *VarData, void *arg)
{ {
snprintf(VarData, MAX_DYNVAR_LENGTH, "%d", GetSysConf()->mqttStation[0].ServerPort); snprintf(VarData, MAX_DYNVAR_LENGTH, "%d", GetSysConf()->mqttStation[0].ServerPort);
} }
void HTTPPrint_idcld1(char *VarData, void *arg) void HTTPPrint_mqid1(char *VarData, void *arg)
{ {
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[0].ClientID); snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[0].ClientID);
} }
void HTTPPrint_topic1(char *VarData, void *arg) void HTTPPrint_mqsys1(char *VarData, void *arg)
{ {
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[0].RootTopic); snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[0].SystemName);
} }
void HTTPPrint_clname1(char *VarData, void *arg) void HTTPPrint_mqgrp1(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[0].GroupName);
}
void HTTPPrint_mqname1(char *VarData, void *arg)
{ {
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[0].UserName); snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[0].UserName);
} }
void HTTPPrint_clpass1(char *VarData, void *arg) void HTTPPrint_mqpass1(char *VarData, void *arg)
{ {
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", "******"); snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", "******");
} }
#if CONFIG_MQTT_CLIENTS_NUM == 2 #if CONFIG_WEBGUIAPP_MQTT_CLIENTS_NUM == 2
void HTTPPrint_mqtten2(char *VarData, void *arg) void HTTPPrint_mqen2(char *VarData, void *arg)
{ {
PrintCheckbox(VarData, arg, GetSysConf()->mqttStation[1].Flags1.bIsGlobalEnabled); PrintCheckbox(VarData, arg, GetSysConf()->mqttStation[1].Flags1.bIsGlobalEnabled);
} }
void HTTPPrint_ipcld2(char *VarData, void *arg) void HTTPPrint_mqurl2(char *VarData, void *arg)
{ {
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[1].ServerAddr); snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[1].ServerAddr);
} }
void HTTPPrint_mport2(char *VarData, void *arg) void HTTPPrint_mqport2(char *VarData, void *arg)
{ {
snprintf(VarData, MAX_DYNVAR_LENGTH, "%d", GetSysConf()->mqttStation[1].ServerPort); snprintf(VarData, MAX_DYNVAR_LENGTH, "%d", GetSysConf()->mqttStation[1].ServerPort);
} }
void HTTPPrint_idcld2(char *VarData, void *arg) void HTTPPrint_mqid2(char *VarData, void *arg)
{ {
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[1].ClientID); snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[1].ClientID);
} }
void HTTPPrint_topic2(char *VarData, void *arg) void HTTPPrint_mqsys2(char *VarData, void *arg)
{ {
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[1].RootTopic); snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[1].SystemName);
} }
void HTTPPrint_clname2(char *VarData, void *arg) void HTTPPrint_mqgrp2(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[1].GroupName);
}
void HTTPPrint_mqname2(char *VarData, void *arg)
{ {
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[1].UserName); snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[1].UserName);
} }
void HTTPPrint_clpass2(char *VarData, void *arg) void HTTPPrint_mqpass2(char *VarData, void *arg)
{ {
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", "******"); snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", "******");
} }
@ -564,7 +572,7 @@ static void HTTPPrint_ifc_gprs(char *VarData, void *arg)
static void HTTPPrint_ifc_mq2(char *VarData, void *arg) static void HTTPPrint_ifc_mq2(char *VarData, void *arg)
{ {
#if CONFIG_MQTT_CLIENTS_NUM == 2 #if CONFIG_WEBGUIAPP_MQTT_CLIENTS_NUM == 2
snprintf(VarData, MAX_DYNVAR_LENGTH, "1"); snprintf(VarData, MAX_DYNVAR_LENGTH, "1");
#else #else
snprintf(VarData, MAX_DYNVAR_LENGTH, "0"); snprintf(VarData, MAX_DYNVAR_LENGTH, "0");
@ -656,21 +664,23 @@ dyn_var_handler_t HANDLERS_ARRAY[] = {
#if CONFIG_WEBGUIAPP_MQTT_ENABLE #if CONFIG_WEBGUIAPP_MQTT_ENABLE
/*MQTT*/ /*MQTT*/
{ "mqtten1", sizeof("mqtten1") - 1, &HTTPPrint_mqtten1 }, { "mqen1", sizeof("mqen1") - 1, &HTTPPrint_mqen1 },
{ "ipcld1", sizeof("ipcld1") - 1, &HTTPPrint_ipcld1 }, { "mqurl1", sizeof("mqurl1") - 1, &HTTPPrint_mqurl1 },
{ "mport1", sizeof("mport1") - 1, &HTTPPrint_mport1 }, { "mqport1", sizeof("mqport1") - 1, &HTTPPrint_mqport1 },
{ "idcld1", sizeof("idcld1") - 1, &HTTPPrint_idcld1 }, { "mqsys1", sizeof("mqsys1") - 1, &HTTPPrint_mqsys1 },
{ "topic1", sizeof("topic1") - 1, &HTTPPrint_topic1 }, { "mqgrp1", sizeof("mqgrp1") - 1, &HTTPPrint_mqgrp1 },
{ "clname1", sizeof("clname1") - 1, &HTTPPrint_clname1 }, { "mqid1", sizeof("mqid1") - 1, &HTTPPrint_mqid1 },
{ "clpass1", sizeof("clpass1") - 1, &HTTPPrint_clpass1 }, { "mqname1", sizeof("mqname1") - 1, &HTTPPrint_mqname1 },
#if CONFIG_MQTT_CLIENTS_NUM == 2 { "mqpass1", sizeof("mqpass1") - 1, &HTTPPrint_mqpass1 },
{ "mqtten2", sizeof("mqtten2") - 1, &HTTPPrint_mqtten2 }, #if CONFIG_WEBGUIAPP_MQTT_CLIENTS_NUM == 2
{ "ipcld2", sizeof("ipcld2") - 1, &HTTPPrint_ipcld2 }, { "mqen2", sizeof("mqen2") - 1, &HTTPPrint_mqen2 },
{ "mport2", sizeof("mport2") - 1, &HTTPPrint_mport2 }, { "mqurl2", sizeof("mqurl2") - 1, &HTTPPrint_mqurl2 },
{ "idcld2", sizeof("idcld2") - 1, &HTTPPrint_idcld2 }, { "mqport2", sizeof("mqport2") - 1, &HTTPPrint_mqport2 },
{ "topic2", sizeof("topic2") - 1, &HTTPPrint_topic2 }, { "mqid2", sizeof("mqid2") - 1, &HTTPPrint_mqid2 },
{ "clname2", sizeof("clname2") - 1, &HTTPPrint_clname2 }, { "mqsys2", sizeof("mqsys2") - 1, &HTTPPrint_mqsys2 },
{ "clpass2", sizeof("clpass2") - 1, &HTTPPrint_clpass2 }, { "mqgrp2", sizeof("mqgrp2") - 1, &HTTPPrint_mqgrp2 },
{ "mqname2", sizeof("mqname2") - 1, &HTTPPrint_mqname2 },
{ "mqpass2", sizeof("mqpass2") - 1, &HTTPPrint_mqpass2 },
#endif #endif
#endif #endif
/*SNTP*/ /*SNTP*/

View File

@ -44,7 +44,8 @@ mqtt_client_t mqtt[CONFIG_WEBGUIAPP_MQTT_CLIENTS_NUM] = { 0 };
static void mqtt_system_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data); static void mqtt_system_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data);
void (*UserEventHandler)(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data); void (*UserEventHandler)(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data);
void regUserEventHandler(void (*event_handler)(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data)) void regUserEventHandler(
void (*event_handler)(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data))
{ {
UserEventHandler = event_handler; UserEventHandler = event_handler;
} }
@ -77,25 +78,21 @@ static void log_error_if_nonzero(const char *message, int error_code)
} }
} }
void ComposeTopic(char *topic, char *system_name, char *direct, char *client_name, char *service_name) void ComposeTopic(char *topic, int idx, char *service_name, char *direct)
{ {
char tmp[4]; strcpy((char*) topic, GetSysConf()->mqttStation[idx].SystemName); // Global system name
char dev_rom_id[8];
GetChipId((uint8_t*) tmp);
BytesToStr((unsigned char*) tmp, (unsigned char*) dev_rom_id, 4);
strcpy((char*) topic, system_name); // Global system name
strcat((char*) topic, "/"); strcat((char*) topic, "/");
strcat((char*) topic, (const char*) dev_rom_id); // Unique device ID (based on ROM chip id) strcat((char*) topic, GetSysConf()->mqttStation[idx].GroupName); // Global system name
strcat((char*) topic, "/"); strcat((char*) topic, "/");
strcat((char*) topic, client_name); // Device client name (for multiclient devices) strcat((char*) topic, GetSysConf()->mqttStation[idx].ClientID); // Device client name (for multiclient devices)
strcat((char*) topic, "-");
strcat((char*) topic, GetSysConf()->ID); //
strcat((char*) topic, "/"); strcat((char*) topic, "/");
strcat((char*) topic, (const char*) service_name); // Device service name strcat((char*) topic, (const char*) service_name); // Device service name
strcat((char*) topic, "/"); strcat((char*) topic, "/");
strcat((char*) topic, direct); // Data direction UPLINK or DOWNLINK strcat((char*) topic, direct); // Data direction UPLINK or DOWNLINK
} }
static void mqtt_system_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data) static void mqtt_system_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data)
{ {
xSemaphoreTake(xSemaphoreMQTTHandle, pdMS_TO_TICKS(1000)); xSemaphoreTake(xSemaphoreMQTTHandle, pdMS_TO_TICKS(1000));
@ -113,12 +110,9 @@ static void mqtt_system_event_handler(void *handler_args, esp_event_base_t base,
ctx->is_connected = true; ctx->is_connected = true;
MQTTReconnectCounter = 0; MQTTReconnectCounter = 0;
ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED client %d", ctx->mqtt_index); ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED client %d", ctx->mqtt_index);
ComposeTopic(topic, ComposeTopic(topic, ctx->mqtt_index, "SYSTEM", "DWLINK");
GetSysConf()->mqttStation[ctx->mqtt_index].RootTopic,
"DWLINK",
GetSysConf()->mqttStation[ctx->mqtt_index].ClientID,
"SYSTEM");
msg_id = esp_mqtt_client_subscribe(client, (const char*) topic, 0); msg_id = esp_mqtt_client_subscribe(client, (const char*) topic, 0);
ESP_LOGI(TAG, "Subscribe to %s", topic);
ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id); ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id);
break; break;
case MQTT_EVENT_DISCONNECTED: case MQTT_EVENT_DISCONNECTED:
@ -142,11 +136,7 @@ static void mqtt_system_event_handler(void *handler_args, esp_event_base_t base,
case MQTT_EVENT_DATA: case MQTT_EVENT_DATA:
ESP_LOGI(TAG, "MQTT_EVENT_DATA, client %d", ctx->mqtt_index); ESP_LOGI(TAG, "MQTT_EVENT_DATA, client %d", ctx->mqtt_index);
//Check if topic is SYSTEM and pass data to handler //Check if topic is SYSTEM and pass data to handler
ComposeTopic(topic, ComposeTopic(topic, ctx->mqtt_index, "SYSTEM", "DWLINK");
GetSysConf()->mqttStation[ctx->mqtt_index].RootTopic,
"DWLINK",
GetSysConf()->mqttStation[ctx->mqtt_index].ClientID,
"SYSTEM");
if (!memcmp(topic, event->topic, event->topic_len)) if (!memcmp(topic, event->topic, event->topic_len))
{ {
SystemDataHandler(event->data, event->data_len, ctx->mqtt_index); SystemDataHandler(event->data, event->data_len, ctx->mqtt_index);
@ -231,7 +221,8 @@ void MQTTTaskTransmit(void *pvParameter)
esp_mqtt_client_publish(mqtt[idx].mqtt, esp_mqtt_client_publish(mqtt[idx].mqtt,
(const char*) DSS.topic, (const char*) DSS.topic,
(const char*) DSS.raw_data_ptr, (const char*) DSS.raw_data_ptr,
DSS.data_length, 0, 0); DSS.data_length,
0, 0);
} }
else else
ESP_LOGE(TAG, "MQTT client not initialized"); ESP_LOGE(TAG, "MQTT client not initialized");
@ -268,7 +259,7 @@ static void start_mqtt()
mqtt_cfg.username = GetSysConf()->mqttStation[i].UserName; mqtt_cfg.username = GetSysConf()->mqttStation[i].UserName;
mqtt_cfg.password = GetSysConf()->mqttStation[i].UserPass; mqtt_cfg.password = GetSysConf()->mqttStation[i].UserPass;
strcpy(tmp, GetSysConf()->mqttStation[i].ClientID); strcpy(tmp, GetSysConf()->mqttStation[i].ClientID);
strcat(tmp, "_"); strcat(tmp, "-");
strcat(tmp, GetSysConf()->ID); strcat(tmp, GetSysConf()->ID);
mqtt_cfg.client_id = tmp; mqtt_cfg.client_id = tmp;
mqtt[i].is_connected = false; mqtt[i].is_connected = false;
@ -298,7 +289,6 @@ void MQTTRun(void)
&xStaticMQTT1MessagesQueue); &xStaticMQTT1MessagesQueue);
mqtt[0].mqtt_queue = MQTT1MessagesQueueHandle; mqtt[0].mqtt_queue = MQTT1MessagesQueueHandle;
#if CONFIG_WEBGUIAPP_MQTT_CLIENTS_NUM == 2 #if CONFIG_WEBGUIAPP_MQTT_CLIENTS_NUM == 2
if (GetSysConf()->mqttStation[1].Flags1.bIsGlobalEnabled) if (GetSysConf()->mqttStation[1].Flags1.bIsGlobalEnabled)
MQTT2MessagesQueueHandle = xQueueCreateStatic(CH_MESSAGE_BUFER_LENTH, MQTT2MessagesQueueHandle = xQueueCreateStatic(CH_MESSAGE_BUFER_LENTH,

View File

@ -131,11 +131,7 @@ static mqtt_app_err_t ResponceWithError(int idx,
{ {
memcpy(buf, JSONErrorMess, strlen(JSONErrorMess)); memcpy(buf, JSONErrorMess, strlen(JSONErrorMess));
DATA_SEND_STRUCT DSS; DATA_SEND_STRUCT DSS;
ComposeTopic(DSS.topic, ComposeTopic(DSS.topic, idx, "SYSTEM", "UPLINK");
GetSysConf()->mqttStation[idx].RootTopic,
"UPLINK",
GetSysConf()->mqttStation[idx].ClientID,
"SYSTEM");
DSS.raw_data_ptr = buf; DSS.raw_data_ptr = buf;
DSS.data_length = strlen(JSONErrorMess); DSS.data_length = strlen(JSONErrorMess);
if (xQueueSend(GetMQTTHandlesPool(idx)->mqtt_queue, &DSS, pdMS_TO_TICKS(1000)) == pdPASS) if (xQueueSend(GetMQTTHandlesPool(idx)->mqtt_queue, &DSS, pdMS_TO_TICKS(1000)) == pdPASS)
@ -222,11 +218,7 @@ static mqtt_app_err_t ResponceWithFile(int idx, espfs_file_t *file,
strcat((fdata + readBytes), tail); strcat((fdata + readBytes), tail);
free(filebuf); free(filebuf);
DATA_SEND_STRUCT DSS; DATA_SEND_STRUCT DSS;
ComposeTopic(DSS.topic, ComposeTopic(DSS.topic, idx, "SYSTEM", "UPLINK");
GetSysConf()->mqttStation[idx].RootTopic,
"UPLINK",
GetSysConf()->mqttStation[idx].ClientID,
"SYSTEM");
DSS.raw_data_ptr = outbuf; DSS.raw_data_ptr = outbuf;
DSS.data_length = (fdata - outbuf) + readBytes + strlen(tail); DSS.data_length = (fdata - outbuf) + readBytes + strlen(tail);
if (xQueueSend(GetMQTTHandlesPool(idx)->mqtt_queue, &DSS, pdMS_TO_TICKS(1000)) == pdPASS) if (xQueueSend(GetMQTTHandlesPool(idx)->mqtt_queue, &DSS, pdMS_TO_TICKS(1000)) == pdPASS)

View File

@ -304,16 +304,19 @@ static void ResetSysConfig(SYS_CONFIG *Conf)
Conf->mqttStation[0].Flags1.bIsGlobalEnabled = CONFIG_WEBGUIAPP_MQTT_ON; Conf->mqttStation[0].Flags1.bIsGlobalEnabled = CONFIG_WEBGUIAPP_MQTT_ON;
memcpy(Conf->mqttStation[0].ServerAddr, CONFIG_WEBGUIAPP_MQTT_SERVER_URL, sizeof(CONFIG_WEBGUIAPP_MQTT_SERVER_URL)); memcpy(Conf->mqttStation[0].ServerAddr, CONFIG_WEBGUIAPP_MQTT_SERVER_URL, sizeof(CONFIG_WEBGUIAPP_MQTT_SERVER_URL));
Conf->mqttStation[0].ServerPort = CONFIG_WEBGUIAPP_MQTT_SERVER_PORT; Conf->mqttStation[0].ServerPort = CONFIG_WEBGUIAPP_MQTT_SERVER_PORT;
memcpy(Conf->mqttStation[0].SystemName, CONFIG_WEBGUIAPP_MQTT_SYSTEM_NAME, sizeof(CONFIG_WEBGUIAPP_MQTT_SYSTEM_NAME));
memcpy(Conf->mqttStation[0].GroupName, CONFIG_WEBGUIAPP_MQTT_GROUP_NAME, sizeof(CONFIG_WEBGUIAPP_MQTT_GROUP_NAME));
memcpy(Conf->mqttStation[0].ClientID, CONFIG_WEBGUIAPP_MQTT_CLIENT_ID_1, sizeof(CONFIG_WEBGUIAPP_MQTT_CLIENT_ID_1)); memcpy(Conf->mqttStation[0].ClientID, CONFIG_WEBGUIAPP_MQTT_CLIENT_ID_1, sizeof(CONFIG_WEBGUIAPP_MQTT_CLIENT_ID_1));
memcpy(Conf->mqttStation[0].RootTopic, CONFIG_WEBGUIAPP_MQTT_ROOT_TOPIC, sizeof(CONFIG_WEBGUIAPP_MQTT_ROOT_TOPIC));
memcpy(Conf->mqttStation[0].UserName, CONFIG_WEBGUIAPP_MQTT_USERNAME, sizeof(CONFIG_WEBGUIAPP_MQTT_USERNAME)); memcpy(Conf->mqttStation[0].UserName, CONFIG_WEBGUIAPP_MQTT_USERNAME, sizeof(CONFIG_WEBGUIAPP_MQTT_USERNAME));
memcpy(Conf->mqttStation[0].UserPass, CONFIG_WEBGUIAPP_MQTT_PASSWORD, sizeof(CONFIG_WEBGUIAPP_MQTT_PASSWORD)); memcpy(Conf->mqttStation[0].UserPass, CONFIG_WEBGUIAPP_MQTT_PASSWORD, sizeof(CONFIG_WEBGUIAPP_MQTT_PASSWORD));
#if CONFIG_MQTT_CLIENTS_NUM == 2 #if CONFIG_WEBGUIAPP_MQTT_CLIENTS_NUM == 2
Conf->mqttStation[1].Flags1.bIsGlobalEnabled = CONFIG_WEBGUIAPP_MQTT_ON; Conf->mqttStation[1].Flags1.bIsGlobalEnabled = CONFIG_WEBGUIAPP_MQTT_ON;
memcpy(Conf->mqttStation[1].ServerAddr, CONFIG_WEBGUIAPP_MQTT_SERVER_URL, sizeof(CONFIG_WEBGUIAPP_MQTT_SERVER_URL)); memcpy(Conf->mqttStation[1].ServerAddr, CONFIG_WEBGUIAPP_MQTT_SERVER_URL, sizeof(CONFIG_WEBGUIAPP_MQTT_SERVER_URL));
Conf->mqttStation[1].ServerPort = CONFIG_WEBGUIAPP_MQTT_SERVER_PORT; Conf->mqttStation[1].ServerPort = CONFIG_WEBGUIAPP_MQTT_SERVER_PORT;
memcpy(Conf->mqttStation[1].SystemName, CONFIG_WEBGUIAPP_MQTT_SYSTEM_NAME, sizeof(CONFIG_WEBGUIAPP_MQTT_SYSTEM_NAME));
memcpy(Conf->mqttStation[1].GroupName, CONFIG_WEBGUIAPP_MQTT_GROUP_NAME, sizeof(CONFIG_WEBGUIAPP_MQTT_GROUP_NAME));
memcpy(Conf->mqttStation[1].ClientID, CONFIG_WEBGUIAPP_MQTT_CLIENT_ID_2, sizeof(CONFIG_WEBGUIAPP_MQTT_CLIENT_ID_2)); memcpy(Conf->mqttStation[1].ClientID, CONFIG_WEBGUIAPP_MQTT_CLIENT_ID_2, sizeof(CONFIG_WEBGUIAPP_MQTT_CLIENT_ID_2));
memcpy(Conf->mqttStation[1].RootTopic, CONFIG_WEBGUIAPP_MQTT_ROOT_TOPIC, sizeof(CONFIG_WEBGUIAPP_MQTT_ROOT_TOPIC));
memcpy(Conf->mqttStation[1].UserName, CONFIG_WEBGUIAPP_MQTT_USERNAME, sizeof(CONFIG_WEBGUIAPP_MQTT_USERNAME)); memcpy(Conf->mqttStation[1].UserName, CONFIG_WEBGUIAPP_MQTT_USERNAME, sizeof(CONFIG_WEBGUIAPP_MQTT_USERNAME));
memcpy(Conf->mqttStation[1].UserPass, CONFIG_WEBGUIAPP_MQTT_PASSWORD, sizeof(CONFIG_WEBGUIAPP_MQTT_PASSWORD)); memcpy(Conf->mqttStation[1].UserPass, CONFIG_WEBGUIAPP_MQTT_PASSWORD, sizeof(CONFIG_WEBGUIAPP_MQTT_PASSWORD));
#endif #endif