From 13a0cdbe4cc438d59e88f2ac863cf8133d020a79 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Wed, 17 Aug 2022 15:39:52 +0200 Subject: [PATCH] conditional build of mqtt code --- Kconfig | 63 ++++++++++++ include/SystemConfiguration.h | 7 +- src/HTTPPostSystem.c | 2 + src/HTTPPrintSystem.c | 185 ++++++++++++++++++++++++---------- src/MQTT.c | 22 ++-- src/SystemConfiguration.c | 43 ++++++-- 6 files changed, 244 insertions(+), 78 deletions(-) diff --git a/Kconfig b/Kconfig index 53463f1..e1efa0b 100644 --- a/Kconfig +++ b/Kconfig @@ -167,6 +167,22 @@ menu "WebGuiApp configuration" config WEBGUIAPP_ETHERNET_ON bool "Default Ethernet switched on" default y + + config WEBGUIAPP_ETH_IP_DEFAULT + string "Default IP address" + default "192.168.1.150" + + config WEBGUIAPP_ETH_MASK_DEFAULT + string "Default network mask" + default "255.255.255.0" + + config WEBGUIAPP_ETH_GATEWAY_DEFAULT + string "Default gateway" + default "192.168.1.150" + + config WEBGUIAPP_ETHERNET_DHCP_DEFAULT + bool "Default Ethernet DHCP client on" + default n config GPIO_RANGE_MIN int @@ -529,6 +545,53 @@ menu "WebGuiApp configuration" endif endmenu + menu "MQTT settings" + config WEBGUIAPP_MQTT_ENABLE + bool "Enabled MQTT transport" + default y + if WEBGUIAPP_MQTT_ENABLE + config MQTT_CLIENTS_NUM + int "Number of MQTT clients" + range 1 2 + default 2 + + config MQTT_ON + bool "Enable MQTT client" + default y + + config MQTT_SERVER_URL + string "MQTT server URL" + default "myfirstmqttserver.com" + + config MQTT_SERVER_PORT + int "MQTT server port" + range 1 65535 + default 1883 + + config MQTT_CLIENT_ID_1 + string "MQTT_1 client ID" + default "DEVID1" + + if MQTT_CLIENTS_NUM > 1 + config MQTT_CLIENT_ID_2 + string "MQTT_2 client ID" + default "DEVID2" + endif + + config MQTT_ROOT_TOPIC + string "MQTT root topic" + default "ROOTTOPIC" + + config MQTT_USERNAME + string "MQTT user name" + default "username" + + config MQTT_PASSWORD + string "MQTT user password" + default "password" + + endif + endmenu endmenu \ No newline at end of file diff --git a/include/SystemConfiguration.h b/include/SystemConfiguration.h index 986e6f8..707dd62 100644 --- a/include/SystemConfiguration.h +++ b/include/SystemConfiguration.h @@ -29,8 +29,6 @@ #include "esp_netif.h" #include -#define MQTT_CLIENTS_NUM 2 - #define DEFAULT_HOST_NAME "DEVICE_HOSTNAME" ///mqttStation[0].Flags1.bIsGlobalEnabled); +} +void HTTPPrint_ipcld1(char *VarData, void *arg) +{ + snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[0].ServerAddr); +} +void HTTPPrint_mport1(char *VarData, void *arg) +{ + snprintf(VarData, MAX_DYNVAR_LENGTH, "%d", GetSysConf()->mqttStation[0].ServerPort); +} +void HTTPPrint_idcld1(char *VarData, void *arg) +{ + snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[0].ClientID); +} +void HTTPPrint_topic1(char *VarData, void *arg) +{ + snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[0].RootTopic); +} +void HTTPPrint_clname1(char *VarData, void *arg) +{ + snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[0].UserName); +} +void HTTPPrint_clpass1(char *VarData, void *arg) +{ + snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", "******"); +} + +#if CONFIG_MQTT_CLIENTS_NUM == 2 +void HTTPPrint_mqtten2(char *VarData, void *arg) +{ + PrintCheckbox(VarData, arg, GetSysConf()->mqttStation[1].Flags1.bIsGlobalEnabled); +} +void HTTPPrint_ipcld2(char *VarData, void *arg) +{ + snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[1].ServerAddr); +} +void HTTPPrint_mport2(char *VarData, void *arg) +{ + snprintf(VarData, MAX_DYNVAR_LENGTH, "%d", GetSysConf()->mqttStation[1].ServerPort); +} +void HTTPPrint_idcld2(char *VarData, void *arg) +{ + snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[1].ClientID); +} +void HTTPPrint_topic2(char *VarData, void *arg) +{ + snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[1].RootTopic); +} +void HTTPPrint_clname2(char *VarData, void *arg) +{ + snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[1].UserName); +} +void HTTPPrint_clpass2(char *VarData, void *arg) +{ + snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", "******"); +} +#endif +#endif dyn_var_handler_t HANDLERS_ARRAY[] = { /*Ststem settings*/ @@ -441,67 +498,85 @@ dyn_var_handler_t HANDLERS_ARRAY[] = { { "gsmmac", sizeof("gsmmac") - 1, &HTTPPrint_gsmmac }, #endif +#if CONFIG_WEBGUIAPP_MQTT_ENABLE + /*MQTT*/ + { "mqtten1", sizeof("mqtten1") - 1, &HTTPPrint_mqtten1 }, + { "ipcld1", sizeof("ipcld1") - 1, &HTTPPrint_ipcld1 }, + { "mport1", sizeof("mport1") - 1, &HTTPPrint_mport1 }, + { "idcld1", sizeof("idcld1") - 1, &HTTPPrint_idcld1 }, + { "topic1", sizeof("topic1") - 1, &HTTPPrint_topic1 }, + { "clname1", sizeof("clname1") - 1, &HTTPPrint_clname1 }, + { "clpass1", sizeof("clpass1") - 1, &HTTPPrint_clpass1 }, + #if CONFIG_MQTT_CLIENTS_NUM == 2 + { "mqtten2", sizeof("mqtten2") - 1, &HTTPPrint_mqtten2 }, + { "ipcld2", sizeof("ipcld2") - 1, &HTTPPrint_ipcld2 }, + { "mport2", sizeof("mport2") - 1, &HTTPPrint_mport2 }, + { "idcld2", sizeof("idcld2") - 1, &HTTPPrint_idcld2 }, + { "topic2", sizeof("topic2") - 1, &HTTPPrint_topic2 }, + { "clname2", sizeof("clname2") - 1, &HTTPPrint_clname2 }, + { "clpass2", sizeof("clpass2") - 1, &HTTPPrint_clpass2 }, +#endif +#endif /*ERROR report*/ { "status_fail", sizeof("status_fail") - 1, &HTTPPrint_status_fail }, }; - -int HTTPPrint(httpd_req_t *req, char* buf, char* var) +int HTTPPrint(httpd_req_t *req, char *buf, char *var) { char VarData[MAX_DYNVAR_LENGTH]; - const char incPat[] = "inc:"; - const int incPatLen = sizeof(incPat) - 1; - if (!memcmp(var, incPat, incPatLen)) + const char incPat[] = "inc:"; + const int incPatLen = sizeof(incPat) - 1; + if (!memcmp(var, incPat, incPatLen)) + { + const char rootFS[] = "/"; + char filename[32]; + filename[0] = 0x00; + var += incPatLen; + strcat(filename, rootFS); + strcat(filename, var); + espfs_file_t *file = espfs_fopen(fs, filename); + struct espfs_stat_t stat; + if (file) { - const char rootFS[] = "/"; - char filename[32]; - filename[0] = 0x00; - var += incPatLen; - strcat(filename, rootFS); - strcat(filename, var); - espfs_file_t *file = espfs_fopen(fs, filename); - struct espfs_stat_t stat; - if (file) - { - espfs_fstat(file, &stat); - int readBytes = espfs_fread(file, buf, stat.size); - espfs_fclose(file); - return readBytes; - } + espfs_fstat(file, &stat); + int readBytes = espfs_fread(file, buf, stat.size); + espfs_fclose(file); + return readBytes; } + } - bool fnd = false; - char *p2 = var + strlen(var) - 1; //last var symbol - int arg = 0; - //searching for tag in handles array - for (int i = 0; i < (sizeof(HANDLERS_ARRAY) / sizeof(HANDLERS_ARRAY[0])); ++i) - { - if (*p2 == ')') - { //found close brace - char *p1 = p2; - while ((*p1 != '(') && (p1 > var)) - --p1; - if (*p1 == '(') - { //found open brace - *p1 = 0x00; //trim variable to name part - ++p1; //to begin of argument - *p2 = 0x00; //set end of argument - arg = atoi(p1); - } - } - if (strcmp(var, HANDLERS_ARRAY[i].tag) == 0 - && HANDLERS_ARRAY[i].HandlerRoutine != NULL) - { - HANDLERS_ARRAY[i].HandlerRoutine(VarData, (void*) &arg); - fnd = true; - break; + bool fnd = false; + char *p2 = var + strlen(var) - 1; //last var symbol + int arg = 0; + //searching for tag in handles array + for (int i = 0; i < (sizeof(HANDLERS_ARRAY) / sizeof(HANDLERS_ARRAY[0])); ++i) + { + if (*p2 == ')') + { //found close brace + char *p1 = p2; + while ((*p1 != '(') && (p1 > var)) + --p1; + if (*p1 == '(') + { //found open brace + *p1 = 0x00; //trim variable to name part + ++p1; //to begin of argument + *p2 = 0x00; //set end of argument + arg = atoi(p1); } } - if (!fnd) - HTTPPrint_DEF(VarData, NULL); - int dLen = strlen(VarData); - memcpy(buf, VarData, dLen); - return dLen; + if (strcmp(var, HANDLERS_ARRAY[i].tag) == 0 + && HANDLERS_ARRAY[i].HandlerRoutine != NULL) + { + HANDLERS_ARRAY[i].HandlerRoutine(VarData, (void*) &arg); + fnd = true; + break; + } + } + if (!fnd) + HTTPPrint_DEF(VarData, NULL); + int dLen = strlen(VarData); + memcpy(buf, VarData, dLen); + return dLen; } diff --git a/src/MQTT.c b/src/MQTT.c index 495a6a6..5d71e79 100644 --- a/src/MQTT.c +++ b/src/MQTT.c @@ -42,19 +42,16 @@ #define MAX_POST_DATA_LENTH 512 #define MQTT_RECONNECT_CHANGE_ADAPTER 3 +#if CONFIG_WEBGUIAPP_MQTT_ENABLE + static SemaphoreHandle_t xSemaphoreMQTTHandle = NULL; static StaticSemaphore_t xSemaphoreMQTTBuf; - -static const int MQTT1_WAIT_DELIVERY_BIT = BIT0; -static const int MQTT2_WAIT_DELIVERY_BIT = BIT1; - static StaticQueue_t xStaticMQTT1MessagesQueue; static StaticQueue_t xStaticMQTT2MessagesQueue; uint8_t MQTT1MessagesQueueStorageArea[CH_MESSAGE_BUFER_LENTH * sizeof(DATA_SEND_STRUCT)]; uint8_t MQTT2MessagesQueueStorageArea[CH_MESSAGE_BUFER_LENTH * sizeof(DATA_SEND_STRUCT)]; - -mqtt_client_t mqtt[MQTT_CLIENTS_NUM] = { 0 }; +mqtt_client_t mqtt[CONFIG_MQTT_CLIENTS_NUM] = { 0 }; static const char topic_tx[] = "/UPLINK/"; //subtopic for transmit static const char topic_rx[] = "/DOWNLINK/"; //subtopic to receive @@ -274,7 +271,7 @@ static void reconnect_MQTT_handler(void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data) { - for (int i = 0; i < MQTT_CLIENTS_NUM; ++i) + for (int i = 0; i < CONFIG_MQTT_CLIENTS_NUM; ++i) { if (mqtt[i].mqtt) { @@ -569,7 +566,7 @@ api_json_err: void MQTTStart(void) { - for (int i = 0; i < MQTT_CLIENTS_NUM; ++i) + for (int i = 0; i < CONFIG_MQTT_CLIENTS_NUM; ++i) { if (mqtt[i].mqtt) esp_mqtt_client_reconnect(mqtt[i].mqtt); @@ -578,7 +575,7 @@ void MQTTStart(void) void MQTTStop(void) { - for (int i = 0; i < MQTT_CLIENTS_NUM; ++i) + for (int i = 0; i < CONFIG_MQTT_CLIENTS_NUM; ++i) { if (mqtt[i].mqtt) esp_mqtt_client_disconnect(mqtt[i].mqtt); @@ -587,7 +584,7 @@ void MQTTStop(void) void MQTTReconnect(void) { - for (int i = 0; i < MQTT_CLIENTS_NUM; ++i) + for (int i = 0; i < CONFIG_MQTT_CLIENTS_NUM; ++i) { if (mqtt[i].mqtt) { @@ -677,7 +674,7 @@ static void start_mqtt() char url[40]; char tmp[40]; - for (int i = 0; i < MQTT_CLIENTS_NUM; ++i) + for (int i = 0; i < CONFIG_MQTT_CLIENTS_NUM; ++i) { if (GetSysConf()->mqttStation[i].Flags1.bIsGlobalEnabled) { @@ -729,12 +726,11 @@ void MQTTRun(void) &xStaticMQTT2MessagesQueue); mqtt[0].mqtt_queue = MQTT1MessagesQueueHandle; - mqtt[0].wait_delivery_bit = MQTT1_WAIT_DELIVERY_BIT; mqtt[1].mqtt_queue = MQTT2MessagesQueueHandle; - mqtt[1].wait_delivery_bit = MQTT2_WAIT_DELIVERY_BIT; start_mqtt(); } +#endif diff --git a/src/SystemConfiguration.c b/src/SystemConfiguration.c index da8b901..617b07b 100644 --- a/src/SystemConfiguration.c +++ b/src/SystemConfiguration.c @@ -1,4 +1,4 @@ - /*! Copyright 2022 Bogdan Pilyugin +/*! Copyright 2022 Bogdan Pilyugin * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -33,15 +33,14 @@ static SYS_CONFIG SysConfig; - static void ResetSysConfig(SYS_CONFIG *Conf) { #if CONFIG_WEBGUIAPP_WIFI_ENABLE Conf->wifiSettings.Flags1.bIsWiFiEnabled = CONFIG_WEBGUIAPP_WIFI_ON; - esp_netif_str_to_ip4(CONFIG_WEBGUIAPP_WIFI_IP_STA, (esp_ip4_addr_t*)&Conf->wifiSettings.InfIPAddr); - esp_netif_str_to_ip4(CONFIG_WEBGUIAPP_WIFI_MASK_STA, (esp_ip4_addr_t*)&Conf->wifiSettings.InfMask); - esp_netif_str_to_ip4(CONFIG_WEBGUIAPP_WIFI_GATEWAY_STA, (esp_ip4_addr_t*)&Conf->wifiSettings.InfGateway); - esp_netif_str_to_ip4(CONFIG_WEBGUIAPP_WIFI_IP_AP, (esp_ip4_addr_t*)&Conf->wifiSettings.ApIPAddr); + esp_netif_str_to_ip4(CONFIG_WEBGUIAPP_WIFI_IP_STA, (esp_ip4_addr_t*) &Conf->wifiSettings.InfIPAddr); + esp_netif_str_to_ip4(CONFIG_WEBGUIAPP_WIFI_MASK_STA, (esp_ip4_addr_t*) &Conf->wifiSettings.InfMask); + esp_netif_str_to_ip4(CONFIG_WEBGUIAPP_WIFI_GATEWAY_STA, (esp_ip4_addr_t*) &Conf->wifiSettings.InfGateway); + esp_netif_str_to_ip4(CONFIG_WEBGUIAPP_WIFI_IP_AP, (esp_ip4_addr_t*) &Conf->wifiSettings.ApIPAddr); Conf->wifiSettings.Flags1.bIsAP = true; memcpy(Conf->wifiSettings.ApSecurityKey, CONFIG_WEBGUIAPP_WIFI_KEY_AP, sizeof(CONFIG_WEBGUIAPP_WIFI_KEY_AP)); memcpy(Conf->wifiSettings.InfSSID, CONFIG_WEBGUIAPP_WIFI_SSID_STA, sizeof(CONFIG_WEBGUIAPP_WIFI_SSID_STA)); @@ -49,6 +48,38 @@ static void ResetSysConfig(SYS_CONFIG *Conf) Conf->wifiSettings.Flags1.bIsDHCPEnabled = CONFIG_WEBGUIAPP_WIFI_DHCP_ON; #endif +#if CONFIG_WEBGUIAPP_ETHERNET_ENABLE + Conf->ethSettings.Flags1.bIsETHEnabled = CONFIG_WEBGUIAPP_ETHERNET_ON; + esp_netif_str_to_ip4(CONFIG_WEBGUIAPP_ETH_IP_DEFAULT, (esp_ip4_addr_t*) &Conf->ethSettings.IPAddr); + esp_netif_str_to_ip4(CONFIG_WEBGUIAPP_ETH_MASK_DEFAULT, (esp_ip4_addr_t*) &Conf->ethSettings.Mask); + esp_netif_str_to_ip4(CONFIG_WEBGUIAPP_ETH_GATEWAY_DEFAULT, (esp_ip4_addr_t*) &Conf->ethSettings.Gateway); + Conf->ethSettings.Flags1.bIsDHCPEnabled = CONFIG_WEBGUIAPP_ETHERNET_DHCP_ON ; +#endif + +#if CONFIG_WEBGUIAPP_GPRS_ENABLE + Conf->gsmSettings.Flags1.bIsGSMEnabled = true; + +#endif + +#if CONFIG_WEBGUIAPP_MQTT_ENABLE + Conf->mqttStation[0].Flags1.bIsGlobalEnabled = CONFIG_MQTT_ON; + memcpy(Conf->mqttStation[0].ServerAddr, CONFIG_MQTT_SERVER_URL, sizeof(CONFIG_MQTT_SERVER_URL)); + Conf->mqttStation[0].ServerPort = CONFIG_MQTT_SERVER_PORT; + memcpy(Conf->mqttStation[0].ClientID, CONFIG_MQTT_CLIENT_ID_1, sizeof(CONFIG_MQTT_CLIENT_ID_1)); + memcpy(Conf->mqttStation[0].RootTopic, CONFIG_MQTT_ROOT_TOPIC, sizeof(CONFIG_MQTT_ROOT_TOPIC)); + memcpy(Conf->mqttStation[0].UserName, CONFIG_MQTT_USERNAME, sizeof(CONFIG_MQTT_USERNAME)); + memcpy(Conf->mqttStation[0].UserPass, CONFIG_MQTT_PASSWORD, sizeof(CONFIG_MQTT_PASSWORD)); +#if CONFIG_MQTT_CLIENTS_NUM == 2 + Conf->mqttStation[1].Flags1.bIsGlobalEnabled = CONFIG_MQTT_ON; + memcpy(Conf->mqttStation[1].ServerAddr, CONFIG_MQTT_SERVER_URL, sizeof(CONFIG_MQTT_SERVER_URL)); + Conf->mqttStation[1].ServerPort = CONFIG_MQTT_SERVER_PORT; + memcpy(Conf->mqttStation[1].ClientID, CONFIG_MQTT_CLIENT_ID_2, sizeof(CONFIG_MQTT_CLIENT_ID_2)); + memcpy(Conf->mqttStation[1].RootTopic, CONFIG_MQTT_ROOT_TOPIC, sizeof(CONFIG_MQTT_ROOT_TOPIC)); + memcpy(Conf->mqttStation[1].UserName, CONFIG_MQTT_USERNAME, sizeof(CONFIG_MQTT_USERNAME)); + memcpy(Conf->mqttStation[1].UserPass, CONFIG_MQTT_PASSWORD, sizeof(CONFIG_MQTT_PASSWORD)); +#endif +#endif + } esp_err_t ReadNVSSysConfig(SYS_CONFIG *SysConf)