Use esp_mqtt client #174

This commit is contained in:
fvanroie 2022-07-26 23:11:44 +02:00
parent b91efeaac3
commit 74092ce5be
12 changed files with 140 additions and 134 deletions

View File

@ -276,8 +276,8 @@ static WiFiSpiClass WiFi;
#if defined(WINDOWS) || defined(POSIX)
#define USE_PAHO
#else
#define USE_ESP_MQTT
//#define USE_PUBSUBCLIENT
#define HASP_USE_ESP_MQTT
//#define HASP_USE_PUBSUBCLIENT
#endif
#endif

View File

@ -180,8 +180,8 @@
#define D_INFO_SERVER "Server"
#define D_INFO_USERNAME "Username"
#define D_INFO_CLIENTID "Client ID"
#define D_INFO_CONNECTED "Connected"
#define D_INFO_DISCONNECTED "Disconnected"
// #define D_INFO_CONNECTED "Connected"
// #define D_INFO_DISCONNECTED "Disconnected"
#define D_INFO_RECEIVED "Received"
#define D_INFO_PUBLISHED "Published"
#define D_INFO_FAILED "Failed"

View File

@ -181,8 +181,8 @@
#define D_INFO_SERVER "Servidor"
#define D_INFO_USERNAME "Nombre de usuario"
#define D_INFO_CLIENTID "ID de Cliente"
#define D_INFO_CONNECTED "Connectado"
#define D_INFO_DISCONNECTED "Desconectado"
// #define D_INFO_CONNECTED "Connectado"
// #define D_INFO_DISCONNECTED "Desconectado"
#define D_INFO_RECEIVED "Recivido"
#define D_INFO_PUBLISHED "Publicado"
#define D_INFO_FAILED "Fallado"

View File

@ -181,8 +181,8 @@
#define D_INFO_SERVER "Serveur"
#define D_INFO_USERNAME "Nom d'utilisateur"
#define D_INFO_CLIENTID "ID client"
#define D_INFO_CONNECTED "Connecté"
#define D_INFO_DISCONNECTED "Déconnecté"
// #define D_INFO_CONNECTED "Connecté"
// #define D_INFO_DISCONNECTED "Déconnecté"
#define D_INFO_RECEIVED "Reçu"
#define D_INFO_PUBLISHED "Publié"
#define D_INFO_FAILED "Échec"

View File

@ -180,8 +180,8 @@
#define D_INFO_SERVER "Szerver"
#define D_INFO_USERNAME "Felhasználónév"
#define D_INFO_CLIENTID "Kliens ID"
#define D_INFO_CONNECTED "Csatlakoztatva"
#define D_INFO_DISCONNECTED "Szétkapcsolva"
// #define D_INFO_CONNECTED "Csatlakoztatva"
// #define D_INFO_DISCONNECTED "Szétkapcsolva"
#define D_INFO_RECEIVED "Fogadott"
#define D_INFO_PUBLISHED "Küldött"
#define D_INFO_FAILED "Sikertelen"

View File

@ -180,8 +180,8 @@
#define D_INFO_SERVER "Server"
#define D_INFO_USERNAME "Gerbuiker"
#define D_INFO_CLIENTID "Client ID"
#define D_INFO_CONNECTED "Verbonden"
#define D_INFO_DISCONNECTED "Verbroken"
// #define D_INFO_CONNECTED "Verbonden"
// #define D_INFO_DISCONNECTED "Verbroken"
#define D_INFO_RECEIVED "Ontvangen"
#define D_INFO_PUBLISHED "Gepubliceerd"
#define D_INFO_FAILED "Mislukt"

View File

@ -181,8 +181,8 @@
#define D_INFO_SERVER "Servidor"
#define D_INFO_USERNAME "Nome do utilizador"
#define D_INFO_CLIENTID "ID do Cliente"
#define D_INFO_CONNECTED "Ligado"
#define D_INFO_DISCONNECTED "Desligado"
// #define D_INFO_CONNECTED "Ligado"
// #define D_INFO_DISCONNECTED "Desligado"
#define D_INFO_RECEIVED "Recebido"
#define D_INFO_PUBLISHED "Publicado"
#define D_INFO_FAILED "Em falha"

View File

@ -180,8 +180,8 @@
#define D_INFO_SERVER "Server"
#define D_INFO_USERNAME "Utilizatur"
#define D_INFO_CLIENTID "ID Client"
#define D_INFO_CONNECTED "Conectat"
#define D_INFO_DISCONNECTED "Deconectat"
// #define D_INFO_CONNECTED "Conectat"
// #define D_INFO_DISCONNECTED "Deconectat"
#define D_INFO_RECEIVED "Primite"
#define D_INFO_PUBLISHED "Trimise"
#define D_INFO_FAILED "Eșuate"

View File

@ -4,7 +4,7 @@
#include "hasp_conf.h"
#if HASP_USE_MQTT > 0
#ifdef USE_ESP_MQTT
#ifdef HASP_USE_ESP_MQTT
#include "mqtt_client.h"
#include "esp_crt_bundle.h"
@ -21,6 +21,7 @@
char mqttLwtTopic[28];
char mqttNodeTopic[24];
char mqttClientId[64];
char mqttGroupTopic[24];
bool mqttEnabled = false;
bool mqttClientConnected = false;
@ -189,52 +190,9 @@ static void mqttSubscribeTo(const char* topic)
}
}
void mqttStart()
{
char buffer[64];
char mqttClientId[64];
char lastWillPayload[8];
// static uint8_t mqttReconnectCount = 0;
// bool mqttFirstConnect = true;
/* Construct unique Client ID*/
{
String mac = halGetMacAddress(3, "");
mac.toLowerCase();
memset(mqttClientId, 0, sizeof(mqttClientId));
snprintf_P(mqttClientId, sizeof(mqttClientId), PSTR(D_MQTT_DEFAULT_NAME), mac.c_str());
LOG_INFO(TAG_MQTT, mqttClientId);
}
// Attempt to connect and set LWT and Clean Session
snprintf_P(buffer, sizeof(buffer), PSTR("%s" MQTT_TOPIC_LWT), mqttNodeTopic); // lastWillTopic
snprintf_P(lastWillPayload, sizeof(lastWillPayload), PSTR("offline")); // lastWillPayload
// haspProgressMsg(F(D_MQTT_CONNECTING));
// haspProgressVal(mqttReconnectCount * 5);
if(esp_mqtt_client_start(mqttClient) != ESP_OK) {
LOG_WARNING(TAG_MQTT, F(D_SERVICE_START_FAILED));
// Retry until we give up and restart after connectTimeout seconds
// mqttReconnectCount++;
// switch(0) {
// default:
// LOG_WARNING(TAG_MQTT, F("Unknown failure"));
// }
// if(mqttReconnectCount > 20) {
// LOG_ERROR(TAG_MQTT, F("Retry count exceeded, rebooting..."));
// dispatch_reboot(false);
// }
return;
} else {
LOG_INFO(TAG_MQTT, F(D_SERVICE_STARTING));
}
}
void onMqttConnect(esp_mqtt_client_handle_t client)
{
LOG_INFO(TAG_MQTT, F(D_MQTT_CONNECTED), mqttServer, "mqttClientId");
LOG_INFO(TAG_MQTT, F(D_MQTT_CONNECTED), mqttServer, mqttClientId);
// Subscribe to our incoming topics
char topic[64];
@ -367,43 +325,7 @@ static esp_err_t mqtt_event_handler(esp_mqtt_event_handle_t event)
void mqttSetup()
{
esp_crt_bundle_set(rootca_crt_bundle_start);
strncpy(mqttLwtTopic, mqttNodeTopic, sizeof(mqttLwtTopic));
strncat_P(mqttLwtTopic, PSTR(MQTT_TOPIC_LWT), sizeof(mqttLwtTopic));
LOG_WARNING(TAG_MQTT, mqttLwtTopic);
mqttEnabled = strlen(mqttServer) > 0 && mqttPort > 0;
if(mqttEnabled) {
mqtt_cfg.event_handle = mqtt_event_handler;
mqtt_cfg.buffer_size = MQTT_MAX_PACKET_SIZE;
mqtt_cfg.out_buffer_size = 512;
mqtt_cfg.reconnect_timeout_ms = 5000;
mqtt_cfg.keepalive = 15; /* seconds */
mqtt_cfg.protocol_ver = MQTT_PROTOCOL_V_3_1_1;
mqtt_cfg.transport = MQTT_TRANSPORT_OVER_TCP;
mqtt_cfg.host = mqttServer;
mqtt_cfg.port = mqttPort;
mqtt_cfg.username = mqttUsername;
mqtt_cfg.password = mqttPassword;
mqtt_cfg.client_id = "TestClient";
mqtt_cfg.lwt_msg = "offline";
mqtt_cfg.lwt_retain = true;
mqtt_cfg.lwt_topic = mqttLwtTopic;
mqtt_cfg.lwt_qos = 1;
// mqtt_cfg.crt_bundle_attach = esp_crt_bundle_attach;
// test Mosquitto doesn't need a user/pwd
// // mqtt_cfg.username=(const char *)mqtt_user;
// // mqtt_cfg.password=(const char *)mqtt_pwd;
mqttClient = esp_mqtt_client_init(&mqtt_cfg);
mqttStart();
} else {
LOG_WARNING(TAG_MQTT, F(D_MQTT_NOT_CONFIGURED));
}
mqttStart();
}
IRAM_ATTR void mqttLoop(void)
@ -419,13 +341,101 @@ void mqttEvery5Seconds(bool networkIsConnected)
// }
}
void mqttStart()
{
char buffer[64];
char lastWillPayload[8];
// static uint8_t mqttReconnectCount = 0;
// bool mqttFirstConnect = true;
if(mqttClient) {
LOG_INFO(TAG_MQTT, F(D_SERVICE_STARTED));
return;
}
/* Construct unique Client ID*/
{
String mac = halGetMacAddress(3, "");
mac.toLowerCase();
memset(mqttClientId, 0, sizeof(mqttClientId));
snprintf_P(mqttClientId, sizeof(mqttClientId), haspDevice.get_hostname());
size_t len = strlen(mqttClientId);
snprintf_P(mqttClientId + len, sizeof(mqttClientId) - len, PSTR("_%s"), mac.c_str());
LOG_INFO(TAG_MQTT, mqttClientId);
}
strncpy(mqttLwtTopic, mqttNodeTopic, sizeof(mqttLwtTopic));
strncat_P(mqttLwtTopic, PSTR(MQTT_TOPIC_LWT), sizeof(mqttLwtTopic));
LOG_WARNING(TAG_MQTT, mqttLwtTopic);
if(mqttEnabled) {
mqtt_cfg.event_handle = mqtt_event_handler;
mqtt_cfg.buffer_size = MQTT_MAX_PACKET_SIZE;
mqtt_cfg.out_buffer_size = 512;
mqtt_cfg.reconnect_timeout_ms = 5000;
mqtt_cfg.keepalive = 15; /* seconds */
mqtt_cfg.protocol_ver = MQTT_PROTOCOL_V_3_1_1;
mqtt_cfg.transport = MQTT_TRANSPORT_OVER_TCP;
mqtt_cfg.host = mqttServer;
mqtt_cfg.port = mqttPort;
mqtt_cfg.username = mqttUsername;
mqtt_cfg.password = mqttPassword;
mqtt_cfg.client_id = mqttClientId;
mqtt_cfg.lwt_msg = "offline";
mqtt_cfg.lwt_retain = true;
mqtt_cfg.lwt_topic = mqttLwtTopic;
mqtt_cfg.lwt_qos = 1;
// mqtt_cfg.crt_bundle_attach = esp_crt_bundle_attach;
// test Mosquitto doesn't need a user/pwd
// // mqtt_cfg.username=(const char *)mqtt_user;
// // mqtt_cfg.password=(const char *)mqtt_pwd;
mqttClient = esp_mqtt_client_init(&mqtt_cfg);
// mqttStart();
} else {
LOG_WARNING(TAG_MQTT, F(D_MQTT_NOT_CONFIGURED));
}
// haspProgressMsg(F(D_MQTT_CONNECTING));
// haspProgressVal(mqttReconnectCount * 5);
if(esp_mqtt_client_start(mqttClient) != ESP_OK) {
LOG_WARNING(TAG_MQTT, F(D_SERVICE_START_FAILED));
// Retry until we give up and restart after connectTimeout seconds
// mqttReconnectCount++;
// switch(0) {
// default:
// LOG_WARNING(TAG_MQTT, F("Unknown failure"));
// }
// if(mqttReconnectCount > 20) {
// LOG_ERROR(TAG_MQTT, F("Retry count exceeded, rebooting..."));
// dispatch_reboot(false);
// }
return;
} else {
LOG_INFO(TAG_MQTT, F(D_SERVICE_STARTING));
}
}
void mqttStop()
{
if(mqttEnabled && mqttClientConnected) {
if(!mqttEnabled) {
LOG_WARNING(TAG_MQTT, F(D_SERVICE_DISABLED));
} else if(!mqttClientConnected) {
LOG_WARNING(TAG_MQTT, F(D_SERVICE_DISCONNECTED));
} else {
LOG_TRACE(TAG_MQTT, F(D_MQTT_DISCONNECTING));
mqtt_send_lwt(false);
esp_mqtt_client_stop(mqttClient);
LOG_INFO(TAG_MQTT, F(D_MQTT_DISCONNECTED));
mqttClient = NULL;
mqttClientConnected = false;
}
}
@ -438,11 +448,7 @@ void mqtt_get_info(JsonDocument& doc)
JsonObject info = doc.createNestedObject(F("MQTT"));
info[F(D_INFO_SERVER)] = mqttServer;
info[F(D_INFO_USERNAME)] = mqttUsername;
mac = halGetMacAddress(3, "");
mac.toLowerCase();
snprintf_P(buffer, sizeof(buffer), PSTR("%s-%s"), haspDevice.get_hostname(), mac.c_str());
info[F(D_INFO_CLIENTID)] = buffer;
info[F(D_INFO_CLIENTID)] = mqttClientId;
// switch(mqttClient.state()) {
// case MQTT_CONNECT_UNAUTHORIZED:
@ -452,10 +458,10 @@ void mqtt_get_info(JsonDocument& doc)
// snprintf_P(buffer, sizeof(buffer), PSTR(D_NETWORK_CONNECTION_FAILED));
// break;
// case MQTT_DISCONNECTED:
// snprintf_P(buffer, sizeof(buffer), PSTR(D_INFO_DISCONNECTED));
// snprintf_P(buffer, sizeof(buffer), PSTR(D_SERVICE_DISCONNECTED));
// break;
// case MQTT_CONNECTED:
// snprintf_P(buffer, sizeof(buffer), PSTR(D_INFO_CONNECTED));
// snprintf_P(buffer, sizeof(buffer), PSTR(D_SERVICE_CONNECTED));
// break;
// case MQTT_CONNECTION_TIMEOUT:
// case MQTT_CONNECTION_LOST:
@ -464,11 +470,14 @@ void mqtt_get_info(JsonDocument& doc)
// case MQTT_CONNECT_UNAVAILABLE:
// case MQTT_CONNECT_BAD_CREDENTIALS:
// default:
// snprintf_P(buffer, sizeof(buffer), PSTR(D_INFO_DISCONNECTED " (%d)"), mqttClient.state());
// snprintf_P(buffer, sizeof(buffer), PSTR(D_SERVICE_DISCONNECTED " (%d)"), mqttClient.state());
// break;
// }
// info[F(D_INFO_STATUS)] = buffer;
info[F(D_INFO_STATUS)] = mqttClientConnected ? D_INFO_CONNECTED : D_INFO_DISCONNECTED;
info[F(D_INFO_STATUS)] = !mqttEnabled ? D_SERVICE_DISABLED
: !mqttClient ? D_SERVICE_STOPPED
: mqttClientConnected ? D_SERVICE_CONNECTED
: D_SERVICE_DISCONNECTED;
info[F(D_INFO_RECEIVED)] = mqttReceiveCount;
info[F(D_INFO_PUBLISHED)] = mqttPublishCount;
@ -561,6 +570,7 @@ bool mqttSetConfig(const JsonObject& settings)
snprintf_P(mqttNodeTopic, sizeof(mqttNodeTopic), PSTR(MQTT_PREFIX "/%s/"), haspDevice.get_hostname());
snprintf_P(mqttGroupTopic, sizeof(mqttGroupTopic), PSTR(MQTT_PREFIX "/%s/"), mqttGroupName);
mqttEnabled = strlen(mqttServer) > 0 && mqttPort > 0;
return changed;
}
#endif // HASP_USE_CONFIG

View File

@ -421,9 +421,9 @@ void mqtt_get_info(JsonDocument& doc)
info[F(D_INFO_CLIENTID)] = haspDevice.get_hostname();
if(mqttIsConnected()) { // Check MQTT connection
info[F(D_INFO_STATUS)] = F(D_INFO_CONNECTED);
info[F(D_INFO_STATUS)] = F(D_SERVICE_CONNECTED);
} else {
info[F(D_INFO_STATUS)] = F("<font color='red'><b>" D_INFO_DISCONNECTED "</b></font>, return code: ");
info[F(D_INFO_STATUS)] = F("<font color='red'><b>" D_SERVICE_DISCONNECTED "</b></font>, return code: ");
// +String(mqttClient.returnCode());
}

View File

@ -4,7 +4,7 @@
#include "hasp_conf.h"
#if HASP_USE_MQTT > 0
#ifdef USE_PUBSUBCLIENT
#ifdef HASP_USE_PUBSUBCLIENT
#include "PubSubClient.h"
@ -398,11 +398,6 @@ void mqtt_get_info(JsonDocument& doc)
info[F(D_INFO_USERNAME)] = mqttUsername;
info[F(D_INFO_CLIENTID)] = mqttClientId;
// mac = halGetMacAddress(3, "");
// mac.toLowerCase();
// snprintf_P(buffer, sizeof(buffer), PSTR("%s-%s"), haspDevice.get_hostname(), mac.c_str());
// info[F(D_INFO_CLIENTID)] = buffer;
switch(mqttClient.state()) {
case MQTT_CONNECT_UNAUTHORIZED:
snprintf_P(buffer, sizeof(buffer), PSTR(D_NETWORK_CONNECTION_UNAUTHORIZED));
@ -411,10 +406,10 @@ void mqtt_get_info(JsonDocument& doc)
snprintf_P(buffer, sizeof(buffer), PSTR(D_NETWORK_CONNECTION_FAILED));
break;
case MQTT_DISCONNECTED:
snprintf_P(buffer, sizeof(buffer), PSTR(D_INFO_DISCONNECTED));
snprintf_P(buffer, sizeof(buffer), PSTR(D_SERVICE_DISCONNECTED));
break;
case MQTT_CONNECTED:
snprintf_P(buffer, sizeof(buffer), PSTR(D_INFO_CONNECTED));
snprintf_P(buffer, sizeof(buffer), PSTR(D_SERVICE_CONNECTED));
break;
case MQTT_CONNECTION_TIMEOUT:
case MQTT_CONNECTION_LOST:
@ -423,7 +418,7 @@ void mqtt_get_info(JsonDocument& doc)
case MQTT_CONNECT_UNAVAILABLE:
case MQTT_CONNECT_BAD_CREDENTIALS:
default:
snprintf_P(buffer, sizeof(buffer), PSTR(D_INFO_DISCONNECTED " (%d)"), mqttClient.state());
snprintf_P(buffer, sizeof(buffer), PSTR(D_SERVICE_DISCONNECTED " (%d)"), mqttClient.state());
break;
}
info[F(D_INFO_STATUS)] = buffer;

View File

@ -85,7 +85,8 @@ HTTPUpload* upload;
const char MAIN_MENU_BUTTON[] PROGMEM = "<a href='/'>" D_HTTP_MAIN_MENU "</a>";
const char HTTP_DOCTYPE[] PROGMEM = "<!DOCTYPE html><html lang=\"en\"><head><meta charset='utf-8'><meta "
"name=\"viewport\" content=\"width=device-width,initial-scale=1\"/>";
"name=\"viewport\" content=\"width=device-width,initial-scale=1\"/>"
"<meta http-equiv=\"Content-Security-Policy\" content=\"default-src 'self';img-src 'self' data:;style-src 'self' data:;\">";
const char HTTP_META_GO_BACK[] PROGMEM = "<meta http-equiv='refresh' content='%d;url=/'/>";
const char HTTP_STYLESHEET[] PROGMEM = "<link rel=\"stylesheet\" href=\"/%s.css\">";
const char HTTP_HEADER[] PROGMEM = "<title>%s</title>";
@ -1106,7 +1107,7 @@ static void webHandleMqttConfig()
httpMessage += F("<h2>" D_HTTP_MQTT_SETTINGS "</h2>");
// Form
httpMessage += F("<div class='container'><form method='POST' action='/config'>");
httpMessage += F("<div class='container'><form method='POST' action='/config' id='mqtt'>");
// Node Name
httpMessage +=
@ -1150,7 +1151,7 @@ static void webHandleMqttConfig()
httpMessage += F("</form></div>");
add_form_button(httpMessage, F(D_BACK_ICON D_HTTP_CONFIGURATION), F("/config"));
httpMessage += "<script>filler(\"GET\", \"/api/config/mqtt/\")</script>";
// httpMessage += "<script>filler(\"GET\", \"/api/config/mqtt/\")</script>";
webSendHeader(haspDevice.get_hostname(), httpMessage.length(), 0);
webServer.sendContent(httpMessage);
@ -1173,7 +1174,7 @@ static void webHandleGuiConfig()
httpMessage += F("<h2>" D_HTTP_GUI_SETTINGS "</h2>");
// Form
httpMessage += F("<div class='container'><form method='POST' action='/config'>");
httpMessage += F("<div class='container'><form method='POST' action='/config' id='gui'>");
// Short Idle
httpMessage += F("<div class='row'><div class='col-25'><label for='idle1'>Short Idle</label></div>");
@ -1246,7 +1247,7 @@ static void webHandleGuiConfig()
add_form_button(httpMessage, F(D_HTTP_ANTIBURN), F("/config/gui?brn=1"));
add_form_button(httpMessage, F(D_BACK_ICON D_HTTP_CONFIGURATION), F("/config"));
httpMessage += F("<script>filler(\"GET\",\"/api/config/gui/\")</script>");
// httpMessage += F("<script>filler(\"GET\",\"/api/config/gui/\")</script>");
webSendHeader(haspDevice.get_hostname(), httpMessage.length(), 0);
webServer.sendContent(httpMessage);
@ -1274,7 +1275,7 @@ static void webHandleWifiConfig()
httpMessage += F("<h2>" D_HTTP_WIFI_SETTINGS "</h2>");
// Form
httpMessage += F("<div class='container'><form method='POST' action='/config'>");
httpMessage += F("<div class='container'><form method='POST' action='/config' id='wifi'>");
// Wifi SSID
httpMessage += F("<div class='row'><div class='col-25 required'><label for='ssid'>SSID</label></div>");
@ -1304,7 +1305,7 @@ static void webHandleWifiConfig()
}
#endif // HASP_USE_WIFI
httpMessage += F("<script>filler(\"GET\",\"/api/config/wifi/\")</script>");
// httpMessage += F("<script>filler(\"GET\",\"/api/config/wifi/\")</script>");
webSendHeader(haspDevice.get_hostname(), httpMessage.length(), 0);
webServer.sendContent(httpMessage);
@ -1328,7 +1329,7 @@ static void webHandleHttpConfig()
httpMessage += F("<h2>" D_HTTP_HTTP_SETTINGS "</h2>");
// Form
httpMessage += F("<div class='container'><form method='POST' action='/config'>");
httpMessage += F("<div class='container'><form method='POST' action='/config' id='http'>");
// Username
httpMessage += F("<div class='row'><div class='col-25'><label for='user'>Username</label></div>");
@ -1347,7 +1348,7 @@ static void webHandleHttpConfig()
httpMessage += F("</form></div>");
httpMessage += F("<a href='/config'>" D_HTTP_CONFIGURATION "</a>");
httpMessage += F("<script>filler(\"GET\",\"/api/config/http/\")</script>");
// httpMessage += F("<script>filler(\"GET\",\"/api/config/http/\")</script>");
webSendHeader(haspDevice.get_hostname(), httpMessage.length(), 0);
webServer.sendContent(httpMessage);
@ -1725,7 +1726,7 @@ static void webHandleDebugConfig()
httpMessage += F("<h2>" D_HTTP_DEBUG_SETTINGS "</h2>");
// Form
httpMessage += F("<div class='container'><form method='POST' action='/config'>");
httpMessage += F("<div class='container'><form method='POST' action='/config' id='debug'>");
// Baudrate
httpMessage += F("<div class='row'><div class='col-25'><label for='baud'>Serial Port</label></div>");
@ -1791,7 +1792,7 @@ static void webHandleDebugConfig()
// *******************************************************************
add_form_button(httpMessage, F(D_BACK_ICON D_HTTP_CONFIGURATION), F("/config"));
httpMessage += F("<script>filler(\"GET\",\"/api/config/debug/\")</script>");
// httpMessage += F("<script>filler(\"GET\",\"/api/config/debug/\")</script>");
webSendHeader(haspDevice.get_hostname(), httpMessage.length(), 0);
webServer.sendContent(httpMessage);
@ -1834,7 +1835,7 @@ static void webHandleHaspConfig()
#endif
// Form
httpMessage += F("<div class='container'><form method='POST' action='/'>");
httpMessage += F("<div class='container'><form method='POST' action='/' id='hasp'>");
// Theme
httpMessage += F("<div class='row'><div class='col-25'><label for='theme'>UI Theme</label></div>");
@ -1908,7 +1909,7 @@ static void webHandleHaspConfig()
httpMessage += F("</form></div>");
httpMessage += FPSTR(MAIN_MENU_BUTTON);
httpMessage += F("<script>filler(\"GET\",\"/api/config/hasp/\")</script>");
// httpMessage += F("<script>filler(\"GET\",\"/api/config/hasp/\")</script>");
webSendHeader(haspDevice.get_hostname(), httpMessage.length(), 0);
webServer.sendContent(httpMessage);
@ -1999,7 +2000,7 @@ static void webHandleFirmware()
httpMessage += F("<h2>" D_HTTP_FIRMWARE_UPGRADE "</h2>");
// Form
httpMessage += F("<div class='container'><form method='POST' action='/update' enctype='multipart/form-data'>");
httpMessage += F("<div class='container'><form method='POST' action='/update' enctype='multipart/form-data' id='ota'>");
// File
httpMessage +=
@ -2038,7 +2039,7 @@ static void webHandleFirmware()
httpMessage += F("</form></div>");
httpMessage += FPSTR(MAIN_MENU_BUTTON);
httpMessage += "<script>filler(\"GET\", \"/api/config/ota/\")</script>";
// httpMessage += "<script>filler(\"GET\", \"/api/config/ota/\")</script>";
webSendHeader(haspDevice.get_hostname(), httpMessage.length(), 0);
webServer.sendContent(httpMessage);