diff --git a/Kconfig b/Kconfig index f3f2c7f..b5193dd 100644 --- a/Kconfig +++ b/Kconfig @@ -739,7 +739,16 @@ menu "WebGUIApp" config WEBGUIAPP_MQTT_PASSWORD string "MQTT user password" - default "password" + default "password" + + config WEBGUIAPP_MQTT_AUTOTEST_ON + bool "Enable MQTT autotest" + default n + + config WEBGUIAPP_MQTT_AUTOTEST_PERIOD + int "MQTT autotest period" + range 1 65535 + default 60 endif endmenu diff --git a/include/WebGUIAppMain.h b/include/WebGUIAppMain.h index 1de696e..b9dd5d4 100644 --- a/include/WebGUIAppMain.h +++ b/include/WebGUIAppMain.h @@ -89,6 +89,7 @@ char ClientID[32]; char UserName[32]; char UserPass[32]; + uint16_t AutotestInterval; struct { char b0 :1; @@ -97,7 +98,7 @@ char b3 :1; char b4 :1; char b5 :1; - char b6 :1; + char bIsAutotestEnabled :1; char bIsGlobalEnabled :1; } Flags1; } mqttStation[CONFIG_WEBGUIAPP_MQTT_CLIENTS_NUM]; diff --git a/src/HTTPPostSystem.c b/src/HTTPPostSystem.c index a9aa73e..ad512ae 100644 --- a/src/HTTPPostSystem.c +++ b/src/HTTPPostSystem.c @@ -150,7 +150,7 @@ static HTTP_IO_RESULT HTTPPostAdaptersSettings(httpd_req_t *req, char *PostData) if (httpd_query_key_value(PostData, "wifipwr", tmp, sizeof(tmp)) == ESP_OK) { uint8_t pwr = atoi((const char*) tmp); - if (pwr >=8 && pwr <= 84) + if (pwr >= 8 && pwr <= 84) GetSysConf()->wifiSettings.MaxPower = pwr * 4; } @@ -320,8 +320,11 @@ static HTTP_IO_RESULT HTTPPostServicesSettings(httpd_req_t *req, char *PostData) char tmp[64]; #if CONFIG_WEBGUIAPP_MQTT_ENABLE bool TempIsMQTT1Enabled = false; + bool TempIsMQTT1AutotestEnabled = false; + #if CONFIG_WEBGUIAPP_MQTT_CLIENTS_NUM == 2 bool TempIsMQTT2Enabled = false; + bool TempIsMQTT2AutotestEnabled = false; #endif httpd_query_key_value(PostData, "mqurl1", GetSysConf()->mqttStation[0].ServerAddr, sizeof(GetSysConf()->mqttStation[0].ServerAddr)); @@ -340,12 +343,11 @@ static HTTP_IO_RESULT HTTPPostServicesSettings(httpd_req_t *req, char *PostData) TempIsMQTT1Enabled = true; } if (httpd_query_key_value(PostData, "mqport1", tmp, sizeof(tmp)) == ESP_OK) - if (httpd_query_key_value(PostData, "mqport1", tmp, sizeof(tmp)) == ESP_OK) - { - uint16_t tp = atoi((const char*) tmp); - if (tp < 65535 && tp >= 1000) - GetSysConf()->mqttStation[0].ServerPort = tp; - } + { + uint16_t tp = atoi((const char*) tmp); + if (tp < 65535 && tp >= 1000) + GetSysConf()->mqttStation[0].ServerPort = tp; + } if (httpd_query_key_value(PostData, "mqpass1", tmp, sizeof(tmp)) == ESP_OK && strcmp(tmp, (const char*) "******")) @@ -353,6 +355,18 @@ static HTTP_IO_RESULT HTTPPostServicesSettings(httpd_req_t *req, char *PostData) strcpy(GetSysConf()->mqttStation[0].UserPass, tmp); } + if (httpd_query_key_value(PostData, "mqtestpr1", tmp, sizeof(tmp)) == ESP_OK) + { + uint16_t prd = atoi((const char*) tmp); + if (prd < 65535) + GetSysConf()->mqttStation[0].AutotestInterval = prd; + } + if (httpd_query_key_value(PostData, "mqtesten1", tmp, sizeof(tmp)) == ESP_OK) + { + if (!strcmp((const char*) tmp, (const char*) "1")) + TempIsMQTT1AutotestEnabled = true; + } + #if CONFIG_WEBGUIAPP_MQTT_CLIENTS_NUM == 2 httpd_query_key_value(PostData, "mqurl2", GetSysConf()->mqttStation[1].ServerAddr, sizeof(GetSysConf()->mqttStation[1].ServerAddr)); @@ -372,18 +386,28 @@ static HTTP_IO_RESULT HTTPPostServicesSettings(httpd_req_t *req, char *PostData) } if (httpd_query_key_value(PostData, "mqport2", tmp, sizeof(tmp)) == ESP_OK) - if (httpd_query_key_value(PostData, "mqport2", tmp, sizeof(tmp)) == ESP_OK) - { - uint16_t tp = atoi((const char*) tmp); - if (tp < 65535 && tp >= 1000) - GetSysConf()->mqttStation[1].ServerPort = tp; - } + { + uint16_t tp = atoi((const char*) tmp); + if (tp < 65535 && tp >= 1000) + GetSysConf()->mqttStation[1].ServerPort = tp; + } if (httpd_query_key_value(PostData, "mqpass2", tmp, sizeof(tmp)) == ESP_OK && strcmp(tmp, (const char*) "******")) { strcpy(GetSysConf()->mqttStation[1].UserPass, tmp); } + if (httpd_query_key_value(PostData, "mqtestpr2", tmp, sizeof(tmp)) == ESP_OK) + { + uint16_t prd = atoi((const char*) tmp); + if (prd < 65535) + GetSysConf()->mqttStation[1].AutotestInterval = prd; + } + if (httpd_query_key_value(PostData, "mqtesten2", tmp, sizeof(tmp)) == ESP_OK) + { + if (!strcmp((const char*) tmp, (const char*) "1")) + TempIsMQTT2AutotestEnabled = true; + } #endif @@ -403,12 +427,14 @@ static HTTP_IO_RESULT HTTPPostServicesSettings(httpd_req_t *req, char *PostData) if (!strcmp(tmp, (const char*) "mqtt1")) { GetSysConf()->mqttStation[0].Flags1.bIsGlobalEnabled = TempIsMQTT1Enabled; + GetSysConf()->mqttStation[0].Flags1.bIsAutotestEnabled = TempIsMQTT1AutotestEnabled; } else if (!strcmp(tmp, (const char*) "mqtt2")) { #if CONFIG_WEBGUIAPP_MQTT_CLIENTS_NUM == 2 GetSysConf()->mqttStation[1].Flags1.bIsGlobalEnabled = TempIsMQTT2Enabled; + GetSysConf()->mqttStation[1].Flags1.bIsAutotestEnabled = TempIsMQTT2AutotestEnabled; #endif } diff --git a/src/HTTPPrintSystem.c b/src/HTTPPrintSystem.c index 5c2a4b4..dceea84 100644 --- a/src/HTTPPrintSystem.c +++ b/src/HTTPPrintSystem.c @@ -570,6 +570,17 @@ void HTTPPrint_mqpass1(char *VarData, void *arg) { snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", "******"); } +void HTTPPrint_mqtesten1(char *VarData, void *arg) +{ + PrintCheckbox(VarData, arg, GetSysConf()->mqttStation[0].Flags1.bIsAutotestEnabled); +} +void HTTPPrint_mqtestpr1(char *VarData, void *arg) +{ + snprintf(VarData, MAX_DYNVAR_LENGTH, "%d", GetSysConf()->mqttStation[0].AutotestInterval); +} + + + #if CONFIG_WEBGUIAPP_MQTT_CLIENTS_NUM == 2 void HTTPPrint_mqen2(char *VarData, void *arg) @@ -604,6 +615,15 @@ void HTTPPrint_mqpass2(char *VarData, void *arg) { snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", "******"); } +void HTTPPrint_mqtesten2(char *VarData, void *arg) +{ + PrintCheckbox(VarData, arg, GetSysConf()->mqttStation[1].Flags1.bIsAutotestEnabled); +} +void HTTPPrint_mqtestpr2(char *VarData, void *arg) +{ + snprintf(VarData, MAX_DYNVAR_LENGTH, "%d", GetSysConf()->mqttStation[1].AutotestInterval); +} + #endif #endif @@ -804,6 +824,10 @@ dyn_var_handler_t HANDLERS_ARRAY[] = { { "mqid1", sizeof("mqid1") - 1, &HTTPPrint_mqid1 }, { "mqname1", sizeof("mqname1") - 1, &HTTPPrint_mqname1 }, { "mqpass1", sizeof("mqpass1") - 1, &HTTPPrint_mqpass1 }, + + { "mqtesten1", sizeof("mqtesten1") - 1, &HTTPPrint_mqtesten1 }, + { "mqtestpr1", sizeof("mqtestpr1") - 1, &HTTPPrint_mqtestpr1 }, + #if CONFIG_WEBGUIAPP_MQTT_CLIENTS_NUM == 2 { "mqen2", sizeof("mqen2") - 1, &HTTPPrint_mqen2 }, { "mqurl2", sizeof("mqurl2") - 1, &HTTPPrint_mqurl2 }, @@ -813,6 +837,10 @@ dyn_var_handler_t HANDLERS_ARRAY[] = { { "mqgrp2", sizeof("mqgrp2") - 1, &HTTPPrint_mqgrp2 }, { "mqname2", sizeof("mqname2") - 1, &HTTPPrint_mqname2 }, { "mqpass2", sizeof("mqpass2") - 1, &HTTPPrint_mqpass2 }, + + { "mqtesten2", sizeof("mqtesten2") - 1, &HTTPPrint_mqtesten2 }, + { "mqtestpr2", sizeof("mqtestpr2") - 1, &HTTPPrint_mqtestpr2 }, + #endif #endif /*SNTP*/ diff --git a/src/WebGUIAppMain.c b/src/WebGUIAppMain.c index c874fe5..76270b1 100644 --- a/src/WebGUIAppMain.c +++ b/src/WebGUIAppMain.c @@ -339,6 +339,11 @@ esp_netif_str_to_ip4(CONFIG_WEBGUIAPP_DNS3_ADDRESS_DEFAULT, (esp_ip4_addr_t*) &C sizeof(CONFIG_WEBGUIAPP_MQTT_USERNAME)); memcpy(Conf->mqttStation[0].UserPass, CONFIG_WEBGUIAPP_MQTT_PASSWORD, sizeof(CONFIG_WEBGUIAPP_MQTT_PASSWORD)); + Conf->mqttStation[0].Flags1.bIsAutotestEnabled = false; +#if CONFIG_WEBGUIAPP_MQTT_AUTOTEST_ON + Conf->mqttStation[0].Flags1.bIsAutotestEnabled = true; +#endif + Conf->mqttStation[0].AutotestInterval = CONFIG_WEBGUIAPP_MQTT_AUTOTEST_PERIOD; #if CONFIG_WEBGUIAPP_MQTT_CLIENTS_NUM == 2 Conf->mqttStation[1].Flags1.bIsGlobalEnabled = false; #if CONFIG_WEBGUIAPP_MQTT_ON @@ -352,6 +357,11 @@ esp_netif_str_to_ip4(CONFIG_WEBGUIAPP_DNS3_ADDRESS_DEFAULT, (esp_ip4_addr_t*) &C memcpy(Conf->mqttStation[1].ClientID, CONFIG_WEBGUIAPP_MQTT_CLIENT_ID_2, sizeof(CONFIG_WEBGUIAPP_MQTT_CLIENT_ID_2)); 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)); + Conf->mqttStation[1].Flags1.bIsAutotestEnabled = false; +#if CONFIG_WEBGUIAPP_MQTT_AUTOTEST_ON + Conf->mqttStation[1].Flags1.bIsAutotestEnabled = true; +#endif + Conf->mqttStation[1].AutotestInterval = CONFIG_WEBGUIAPP_MQTT_AUTOTEST_PERIOD; #endif #endif memcpy(Conf->sntpClient.SntpServerAdr, CONFIG_WEBGUIAPP_SNTP_HOST,