[WebUI] Add Configure MQTT and Logging (#1592)

* Configure MQTT and Loggin

* Configure MQTT speed up

* Lint
This commit is contained in:
Northern Man authored and GitHub committed 2023-04-06 19:51:14 -05:00
1 parent 6e8b463213
commit 1c367fd325
4 files changed
+95 -14

No files matched your search

+5
View File
@@ -678,6 +678,11 @@ CRGB leds2[FASTLED_IND_NUM_LEDS];
char mqtt_topic[parameters_size + 1] = Base_Topic; char mqtt_topic[parameters_size + 1] = Base_Topic;
char gateway_name[parameters_size + 1] = Gateway_Name; char gateway_name[parameters_size + 1] = Gateway_Name;
void connectMQTT();
#ifndef ESPWifiManualSetup
void saveMqttConfig();
#endif
unsigned long uptime(); unsigned long uptime();
bool cmpToMainTopic(const char*, const char*); bool cmpToMainTopic(const char*, const char*);
void pub(const char*, const char*, bool); void pub(const char*, const char*, bool);
+76 -6
View File
@@ -466,7 +466,14 @@ void handleWI() {
/** /**
* @brief /MQ - Configure MQTT Page * @brief /MQ - Configure MQTT Page
* * T: handleMQ Arg: 0, mh=192.168.1.17
* T: handleMQ Arg: 1, ml=1883
* T: handleMQ Arg: 2, mu=your_username
* T: handleMQ Arg: 3, mp=your_password
* T: handleMQ Arg: 4, sc=on
* T: handleMQ Arg: 5, msc=suds
* T: handleMQ Arg: 6, mt=home/
* T: handleMQ Arg: 7, save=
*/ */
void handleMQ() { void handleMQ() {
WEBUI_TRACE_LOG(F("handleMQ: uri: %s, args: %d, method: %d" CR), server.uri(), server.args(), server.method()); WEBUI_TRACE_LOG(F("handleMQ: uri: %s, args: %d, method: %d" CR), server.uri(), server.args(), server.method());
@@ -474,7 +481,33 @@ void handleMQ() {
for (uint8_t i = 0; i < server.args(); i++) { for (uint8_t i = 0; i < server.args(); i++) {
WEBUI_TRACE_LOG(F("handleMQ Arg: %d, %s=%s" CR), i, server.argName(i).c_str(), server.arg(i).c_str()); WEBUI_TRACE_LOG(F("handleMQ Arg: %d, %s=%s" CR), i, server.argName(i).c_str(), server.arg(i).c_str());
} }
if (server.hasArg("save")) {
if (server.hasArg("mh")) {
strncpy(mqtt_server, server.arg("mh").c_str(), parameters_size);
} }
if (server.hasArg("ml")) {
strncpy(mqtt_port, server.arg("ml").c_str(), 6);
}
if (server.hasArg("mu")) {
strncpy(mqtt_user, server.arg("mu").c_str(), parameters_size);
}
if (server.hasArg("mp")) {
strncpy(mqtt_pass, server.arg("mp").c_str(), parameters_size);
}
mqtt_secure = server.hasArg("sc");
if (server.hasArg("msc")) {
mqtt_cert = server.arg("msc"); // String
}
if (server.hasArg("mt")) {
strncpy(mqtt_topic, server.arg("mt").c_str(), parameters_size);
}
# ifndef ESPWifiManualSetup
saveMqttConfig();
connectMQTT();
# endif
}
}
char jsonChar[100]; char jsonChar[100];
serializeJson(modules, jsonChar, measureJson(modules) + 1); serializeJson(modules, jsonChar, measureJson(modules) + 1);
@@ -484,8 +517,42 @@ void handleMQ() {
String response = String(buffer); String response = String(buffer);
response += String(script); response += String(script);
response += String(style); response += String(style);
// mqtt server, mqtt port, client id, mqtt username, mqtt password, topic, Full Topic // mqtt server (mh), mqtt port (ml), mqtt username (mu), mqtt password (mp), secure connection (sc), server certificate (msc), topic (mt)
snprintf(buffer, WEB_TEMPLATE_BUFFER_MAX_SIZE, config_mqtt_body, jsonChar, gateway_name, mqtt_server, mqtt_port, gateway_name, mqtt_user, mqtt_pass, mqtt_topic, ""); snprintf(buffer, WEB_TEMPLATE_BUFFER_MAX_SIZE, config_mqtt_body, jsonChar, gateway_name, mqtt_server, mqtt_port, mqtt_user, mqtt_pass, (mqtt_secure ? "checked" : ""), mqtt_cert, mqtt_topic);
response += String(buffer);
snprintf(buffer, WEB_TEMPLATE_BUFFER_MAX_SIZE, footer, OMG_VERSION);
response += String(buffer);
server.send(200, "text/html", response);
}
/**
* @brief /LO - Configure Logging Page
* T: handleLO: uri: /lo, args: 2, method: 1
* T: handleLO Arg: 0, lo=5
* T: handleLO Arg: 1, save=
*/
void handleLO() {
WEBUI_TRACE_LOG(F("handleLO: uri: %s, args: %d, method: %d" CR), server.uri(), server.args(), server.method());
if (server.args()) {
for (uint8_t i = 0; i < server.args(); i++) {
WEBUI_TRACE_LOG(F("handleLO Arg: %d, %s=%s" CR), i, server.argName(i).c_str(), server.arg(i).c_str());
}
if (server.hasArg("save") && server.hasArg("lo")) {
Log.setLevel(server.arg("lo").toInt());
}
}
char jsonChar[100];
serializeJson(modules, jsonChar, measureJson(modules) + 1);
char buffer[WEB_TEMPLATE_BUFFER_MAX_SIZE];
snprintf(buffer, WEB_TEMPLATE_BUFFER_MAX_SIZE, header_html, (String(gateway_name) + " - Configure Logging").c_str());
String response = String(buffer);
response += String(script);
response += String(style);
int logLevel = Log.getLevel();
snprintf(buffer, WEB_TEMPLATE_BUFFER_MAX_SIZE, config_logging_body, jsonChar, gateway_name, (logLevel == 0 ? "selected" : ""), (logLevel == 1 ? "selected" : ""), (logLevel == 2 ? "selected" : ""), (logLevel == 3 ? "selected" : ""), (logLevel == 4 ? "selected" : ""), (logLevel == 5 ? "selected" : ""), (logLevel == 6 ? "selected" : ""));
response += String(buffer); response += String(buffer);
snprintf(buffer, WEB_TEMPLATE_BUFFER_MAX_SIZE, footer, OMG_VERSION); snprintf(buffer, WEB_TEMPLATE_BUFFER_MAX_SIZE, footer, OMG_VERSION);
response += String(buffer); response += String(buffer);
@@ -837,12 +904,13 @@ void WebUISetup() {
server.on("/up", handleUP); // Firmware Upgrade server.on("/up", handleUP); // Firmware Upgrade
server.on("/cn", handleCN); // Configuration server.on("/cn", handleCN); // Configuration
server.on("/wi", handleWI); // Configuration Wifi server.on("/wi", handleWI); // Configure Wifi
server.on("/mq", handleMQ); // Configuration MQTT server.on("/mq", handleMQ); // Configure MQTT
# if defined(ZgatewayCloud) # if defined(ZgatewayCloud)
server.on("/cl", handleCL); // Cloud configuration server.on("/cl", handleCL); // Configure Cloud
server.on("/tk", handleTK); // Store Device Token server.on("/tk", handleTK); // Store Device Token
# endif # endif
server.on("/lo", handleLO); // Configure Logging
server.on("/rt", handleRT); // Reset configuration ( Erase and Restart ) server.on("/rt", handleRT); // Reset configuration ( Erase and Restart )
server.begin(); server.begin();
@@ -1043,6 +1111,7 @@ void webUIPubPrint(const char* topicori, JsonObject& data) {
# ifdef ZgatewayRTL_433 # ifdef ZgatewayRTL_433
case webUIHash("RTL_433toMQTT"): { case webUIHash("RTL_433toMQTT"): {
if (!strncmp(data["model"], "status", 6) && data.containsKey("id")) {
// {"model":"Acurite-Tower","id":2043,"channel":"B","battery_ok":1,"temperature_C":5.3,"humidity":81,"mic":"CHECKSUM","protocol":"Acurite 592TXR Temp/Humidity, 5n1 Weather Station, 6045 Lightning, 3N1, Atlas","rssi":-81,"duration":121060} // {"model":"Acurite-Tower","id":2043,"channel":"B","battery_ok":1,"temperature_C":5.3,"humidity":81,"mic":"CHECKSUM","protocol":"Acurite 592TXR Temp/Humidity, 5n1 Weather Station, 6045 Lightning, 3N1, Atlas","rssi":-81,"duration":121060}
// Line 1 // Line 1
@@ -1110,6 +1179,7 @@ void webUIPubPrint(const char* topicori, JsonObject& data) {
} else { } else {
// Log.notice(F("[ WebUI ] Queued %s" CR), message->title); // Log.notice(F("[ WebUI ] Queued %s" CR), message->title);
} }
}
break; break;
} }
# endif # endif
+7 -5
View File
@@ -31,7 +31,7 @@
// TODO: Create a script to generate these from WebPack // TODO: Create a script to generate these from WebPack
#define body_footer_main_menu "<div id=but2d style=\"display: block;\"></div><p><form id=but2 style=\"display: block;\" action='.' method='get'><button>Main Menu</button></form></p>" #define body_footer_main_menu "<div id=but2d style=\"display: block;\"></div><p><form id=but2 style=\"display: block;\" action='.' method='get'><button>Main Menu</button></form></p>"
#define body_footer_config_menu "<div id=but3d style=\"display: block;\"></div><p><form id=but3 style=\"display: block;\" action='cn' method='get'><button>Configuration</button></form></p>"; #define body_footer_config_menu "<div id=but3d style=\"display: block;\"></div><p><form id=but3 style=\"display: block;\" action='cn' method='get'><button>Configuration</button></form></p>"
#define body_header "<body><div style='text-align:left;display:inline-block;min-width:340px;'><div style='text-align:center;'><noscript> To use, please enable JavaScript <br></noscript><h3>%s</h3><h2>%s</h2></div>" #define body_header "<body><div style='text-align:left;display:inline-block;min-width:340px;'><div style='text-align:center;'><noscript> To use, please enable JavaScript <br></noscript><h3>%s</h3><h2>%s</h2></div>"
#define button_upgrade "<p><form id=but5 style='display: block;' action='up' method='get'><button>Firmware Upgrade</button></form></p>" #define button_upgrade "<p><form id=but5 style='display: block;' action='up' method='get'><button>Firmware Upgrade</button></form></p>"
@@ -45,7 +45,7 @@
#else #else
# define configure_3 # define configure_3
#endif #endif
#define configure_4 #define configure_4 "<p><form action='lo' method='get'><button>Configure Logging</button></form></p>"
#define configure_5 #define configure_5
#define configure_6 #define configure_6
#define configure_7 #define configure_7
@@ -75,7 +75,7 @@ const char reset_body[] = body_header "<div style='text-align:center;'>%s</div><
const char config_cloud_body[] = body_header "<fieldset><legend><b>&nbsp;Cloud Configuration&nbsp;</b></legend><form method='get' action='cl'><p><label><input id='cl-en' type='checkbox' %s><b>Enable Cloud Connection</b></label></p><br><p><label><input id='cl-lk' type='checkbox' disabled><b>Cloud Account%s Linked</b></label></p><br><button name='save' type='submit' class='button bgrn'>Save</button></form></fieldset><p><form action='%s' method='get'><input type='hidden' name='macAddress' value='%s'/><input type='hidden' name='redirect_uri' value='%s'/><input type='hidden' name='gateway_name' value='%s'/><input type='hidden' name='uptime' value='%d'/><input type='hidden' name='RT' value='%d'/><button>Link Cloud Account</button></form></p>" body_footer_config_menu; const char config_cloud_body[] = body_header "<fieldset><legend><b>&nbsp;Cloud Configuration&nbsp;</b></legend><form method='get' action='cl'><p><label><input id='cl-en' type='checkbox' %s><b>Enable Cloud Connection</b></label></p><br><p><label><input id='cl-lk' type='checkbox' disabled><b>Cloud Account%s Linked</b></label></p><br><button name='save' type='submit' class='button bgrn'>Save</button></form></fieldset><p><form action='%s' method='get'><input type='hidden' name='macAddress' value='%s'/><input type='hidden' name='redirect_uri' value='%s'/><input type='hidden' name='gateway_name' value='%s'/><input type='hidden' name='uptime' value='%d'/><input type='hidden' name='RT' value='%d'/><button>Link Cloud Account</button></form></p>" body_footer_config_menu;
const char token_body[] = body_header "div style='text-align:center;'>Link Cloud Account</div><br><div style='text-align:center;'>Cloud was successfully linked</div><br><div id=but2d style=\"display: block;\"></div><p><form id=but2 style=\"display: block;\" action='cn' method='get'><button>Configuration</button></form></p>"; const char token_body[] = body_header "<div style='text-align:center;'>Link Cloud Account</div><br><div style='text-align:center;'>Cloud was successfully linked</div><br><div id=but2d style=\"display: block;\"></div><p><form id=but2 style=\"display: block;\" action='cn' method='get'><button>Configuration</button></form></p>";
const char console_body[] = body_header "<br><textarea readonly id='t1' cols='340' wrap='off'></textarea><br><br><form method='get' onsubmit='return l(1);'><input id='c1' placeholder='Enter topic and command' autofocus><br></form>" body_footer_main_menu; const char console_body[] = body_header "<br><textarea readonly id='t1' cols='340' wrap='off'></textarea><br><br><form method='get' onsubmit='return l(1);'><input id='c1' placeholder='Enter topic and command' autofocus><br></form>" body_footer_main_menu;
@@ -85,9 +85,11 @@ const char upgrade_body[] = body_header " <div id='f1' style='display:block;'><f
const char config_wifi_body[] = body_header "<div title='-43 dBm (100%)'><a href='#p' onclick='c(this)'>%s</a><span class='q'><div class='si'><i class='b0'></i><i class='b1'></i><i class='b2'></i><i class='b3'></i></span></div></div><div title='-84 dBm (32%)'><a href='#p' onclick='c(this)'>BELL634</a><span class='q'><div class='si'><i class='b0'></i><i class='b1'></i><i class='b2 o30'></i><i class='b3 o30'></i></span></div></div><div title='-86 dBm (28%)'><a href='#p' onclick='c(this)'>MRC</a><span class='q'><div class='si'><i class='b0'></i><i class='b1'></i><i class='b2 o30'></i><i class='b3 o30'></i></span></div></div><br><div><a href='/wi?scan='>Scan for all WiFi Networks</a></div><br><fieldset><legend><b>&nbsp;Wifi parameters&nbsp;</b></legend><form method='get' action='wi'><p><b>WiFi Network</b> () <br><input id='s1' placeholder=\"Type or Select your WiFi Network\" value=\"%s\"></p><p><label><b>WiFi Password</b><input type='checkbox' onclick='sp(\"p1\")'></label><br><input id='p1' type='password' placeholder=\"Enter your WiFi Password\" value=\"****\"></p><p><b>WiFi Network 2</b> () <br><input id='s2' placeholder=\"Type your Alternative WiFi Network\" value=\"\"></p><p><label><b>WiFi Password</b><input type='checkbox' onclick='sp(\"p2\")'></label><br><input id='p2' type='password' placeholder=\"Enter your WiFi Password\" value=\"****\"></p><p><b>Hostname</b>%s<br><input id='h' placeholder=\"%s\" value=\"%s\"></p><p><b>CORS Domain</b><input id='c' placeholder=\"\" value=\"%s\"></p><br><button name='save' type='submit' class='button bgrn'>Save</button></form></fieldset>" body_footer_config_menu; const char config_wifi_body[] = body_header "<div title='-43 dBm (100%)'><a href='#p' onclick='c(this)'>%s</a><span class='q'><div class='si'><i class='b0'></i><i class='b1'></i><i class='b2'></i><i class='b3'></i></span></div></div><div title='-84 dBm (32%)'><a href='#p' onclick='c(this)'>BELL634</a><span class='q'><div class='si'><i class='b0'></i><i class='b1'></i><i class='b2 o30'></i><i class='b3 o30'></i></span></div></div><div title='-86 dBm (28%)'><a href='#p' onclick='c(this)'>MRC</a><span class='q'><div class='si'><i class='b0'></i><i class='b1'></i><i class='b2 o30'></i><i class='b3 o30'></i></span></div></div><br><div><a href='/wi?scan='>Scan for all WiFi Networks</a></div><br><fieldset><legend><b>&nbsp;Wifi parameters&nbsp;</b></legend><form method='get' action='wi'><p><b>WiFi Network</b> () <br><input id='s1' placeholder=\"Type or Select your WiFi Network\" value=\"%s\"></p><p><label><b>WiFi Password</b><input type='checkbox' onclick='sp(\"p1\")'></label><br><input id='p1' type='password' placeholder=\"Enter your WiFi Password\" value=\"****\"></p><p><b>WiFi Network 2</b> () <br><input id='s2' placeholder=\"Type your Alternative WiFi Network\" value=\"\"></p><p><label><b>WiFi Password</b><input type='checkbox' onclick='sp(\"p2\")'></label><br><input id='p2' type='password' placeholder=\"Enter your WiFi Password\" value=\"****\"></p><p><b>Hostname</b>%s<br><input id='h' placeholder=\"%s\" value=\"%s\"></p><p><b>CORS Domain</b><input id='c' placeholder=\"\" value=\"%s\"></p><br><button name='save' type='submit' class='button bgrn'>Save</button></form></fieldset>" body_footer_config_menu;
// mqtt server, mqtt port, client id, mqtt username, mqtt password, topic, Full Topic // mqtt server (mh), mqtt port (ml), mqtt username (mu), mqtt password (mp), secure connection (sc), server certificate (msc), topic (mt)
const char config_mqtt_body[] = body_header "<fieldset><legend><b>&nbsp;MQTT parameters&nbsp;</b></legend><form method='get' action='mq'><p><b>Host</b> () <br><input id='mh' placeholder=" MQTT_SERVER " value='%s'></p><p><b>Port</b> (1883) <br><input id='ml' placeholder=" MQTT_PORT " value='%s'></p><p><b>Client</b> <br><input id='mc' placeholder='' value='%s'></p><p><b>User</b> " MQTT_USER " <br><input id='mu' placeholder=" MQTT_USER " value='%s'></p><p><label><b>Password</b><input type='checkbox' onclick='sp(\"mp\")'></label><br><input id='mp' type='password' placeholder=\"Password\" value='%s'></p><p><b>Topic</b> <br><input id='mt' placeholder='' value='%s'></p><p><b>Full Topic</b> <br><input id='mf' placeholder=\"\" value='%s'></p><br><button name='save' type='submit' class='button bgrn'>Save</button></form></fieldset>" body_footer_config_menu; const char config_mqtt_body[] = body_header "<fieldset><legend><b>&nbsp;MQTT parameters&nbsp;</b></legend><form method='get' action='mq'><p><b>MQTT Server</b><br><input id='mh' placeholder=" MQTT_SERVER " value='%s'></p><p><b>MQTT Port</b><br><input id='ml' placeholder=" MQTT_PORT " value='%s'></p><p><b>MQTT Username</b><br><input id='mu' placeholder=" MQTT_USER " value='%s'></p><p><label><b>MQTT Password</b><input type='checkbox' onclick='sp(\"mp\")'></label><br><input id='mp' type='password' placeholder=\"Password\" value='%s'></p><p><b>MQTT Secure Connection</b><br><input id='sc' type='checkbox' %s></p><p><b>MQTT Server Certificate</b><br><textarea class='form-control' name='msc' id='field_msc' rows='10' cols='64'>%s</textarea></p><p><b>MQTT Base Topic</b><br><input id='mt' placeholder='' value='%s'></p><br><button name='save' type='submit' class='button bgrn'>Save</button></form></fieldset>" body_footer_config_menu;
const char config_logging_body[] = body_header "<fieldset><legend><b>OpenMQTTGateway Logging</b></legend><form method='get' action='lo'><p><b>log level</b><br><select id='lo'><option %s value='0'>Silent</option><option %s value='1'>Fatal</option><option %s value='2'>Error</option><option %s value='3'>Warning</option><option %s value='4'>Notice</option><option %s value='5'>Trace</option><option %s value='6'>Verbose</option></select></p><br><button name='save' type='submit' class='button bgrn'>Save</button></form></fieldset>" body_footer_config_menu;
const char footer[] = "<div style='text-align:right;font-size:11px;'><hr/><a href='https://community.openmqttgateway.com' target='_blank' style='color:#aaa;'>%s</a></div></div></body></html>"; const char footer[] = "<div style='text-align:right;font-size:11px;'><hr/><a href='https://community.openmqttgateway.com' target='_blank' style='color:#aaa;'>%s</a></div></div></body></html>";
+7 -3
View File
@@ -585,6 +585,9 @@ void delayWithOTA(long waitMillis) {
# endif # endif
# endif # endif
ArduinoOTA.handle(); ArduinoOTA.handle();
# if defined(ZwebUI) && defined(ESP32)
WebUILoop();
# endif
delay(waitStep); delay(waitStep);
} }
#else #else
@@ -1589,6 +1592,9 @@ void loop() {
if ((Ethernet.hardwareStatus() != EthernetW5100 && Ethernet.linkStatus() == LinkON) || (Ethernet.hardwareStatus() == EthernetW5100)) { //we are able to detect disconnection only on w5200 and w5500 if ((Ethernet.hardwareStatus() != EthernetW5100 && Ethernet.linkStatus() == LinkON) || (Ethernet.hardwareStatus() == EthernetW5100)) { //we are able to detect disconnection only on w5200 and w5500
#endif #endif
failure_number_ntwk = 0; failure_number_ntwk = 0;
#if defined(ZwebUI) && defined(ESP32)
WebUILoop();
#endif
if (client.loop()) { // MQTT client is still connected if (client.loop()) { // MQTT client is still connected
InfoIndicatorON(); InfoIndicatorON();
failure_number_ntwk = 0; failure_number_ntwk = 0;
@@ -1744,9 +1750,7 @@ void loop() {
launchRTL_433Discovery(publishDiscovery); launchRTL_433Discovery(publishDiscovery);
# endif # endif
#endif #endif
#if defined(ZwebUI) && defined(ESP32)
WebUILoop();
#endif
} else { } else {
// MQTT disconnected // MQTT disconnected
connected = false; connected = false;