diff --git a/data/webui/index.html b/data/webui/index.html
index 2e17a04..27030f8 100644
--- a/data/webui/index.html
+++ b/data/webui/index.html
@@ -46,6 +46,7 @@
+
@@ -57,6 +58,11 @@
+
diff --git a/data/webui/script.js b/data/webui/script.js
index 7584b9a..f664b66 100644
--- a/data/webui/script.js
+++ b/data/webui/script.js
@@ -169,6 +169,20 @@ function bindEvents() {
}
});
+ document.getElementById("wifiReconnectBtn").addEventListener("click", async () => {
+ try {
+ const result = await requestJson("/api/network/wifi/reconnect", {
+ method: "POST",
+ headers: jsonHeaders(),
+ body: "{}",
+ });
+ setJson("actionResult", result);
+ await Promise.all([refreshStatus(), refreshNetwork()]);
+ } catch (error) {
+ setJson("actionResult", { error: error.message });
+ }
+ });
+
document.getElementById("wifiScanBtn").addEventListener("click", async () => {
try {
const result = await requestJson("/api/network/wifi/scan", {
@@ -211,9 +225,32 @@ function bindEvents() {
}
});
+ document.getElementById("mqttPublishForm").addEventListener("submit", async (event) => {
+ event.preventDefault();
+ const topic = document.getElementById("mqttTopic").value.trim();
+ const payload = document.getElementById("mqttPayload").value;
+ try {
+ const result = await requestJson("/api/network/mqtt/publish", {
+ method: "POST",
+ headers: jsonHeaders(),
+ body: JSON.stringify({ topic, payload }),
+ });
+ setJson("actionResult", result);
+ await Promise.all([refreshStatus(), refreshNetwork()]);
+ } catch (error) {
+ setJson("actionResult", { error: error.message });
+ }
+ });
+
document.getElementById("espnowOnBtn").addEventListener("click", async () => {
try {
- await sendControl("ESPNOW_ON");
+ const result = await requestJson("/api/network/espnow/on", {
+ method: "POST",
+ headers: jsonHeaders(),
+ body: "{}",
+ });
+ setJson("actionResult", result);
+ await Promise.all([refreshStatus(), refreshNetwork()]);
} catch (error) {
setJson("actionResult", { error: error.message });
}
@@ -221,7 +258,13 @@ function bindEvents() {
document.getElementById("espnowOffBtn").addEventListener("click", async () => {
try {
- await sendControl("ESPNOW_OFF");
+ const result = await requestJson("/api/network/espnow/off", {
+ method: "POST",
+ headers: jsonHeaders(),
+ body: "{}",
+ });
+ setJson("actionResult", result);
+ await Promise.all([refreshStatus(), refreshNetwork()]);
} catch (error) {
setJson("actionResult", { error: error.message });
}
diff --git a/src/web/WebServerManager.cpp b/src/web/WebServerManager.cpp
index db0e0eb..191cb99 100644
--- a/src/web/WebServerManager.cpp
+++ b/src/web/WebServerManager.cpp
@@ -148,6 +148,8 @@ void WebServerManager::registerRoutes() {
});
server_.on("/api/network/wifi/disconnect", HTTP_POST,
[this](AsyncWebServerRequest* request) { handleDispatch(request, "WIFI_DISCONNECT"); });
+ server_.on("/api/network/wifi/reconnect", HTTP_POST,
+ [this](AsyncWebServerRequest* request) { handleDispatch(request, "WIFI_RECONNECT"); });
server_.on("/api/network/wifi/scan", HTTP_POST,
[this](AsyncWebServerRequest* request) { handleDispatch(request, "WIFI_SCAN"); });
@@ -176,6 +178,10 @@ void WebServerManager::registerRoutes() {
// ESP-NOW.
server_.on("/api/network/espnow", HTTP_GET,
[this](AsyncWebServerRequest* request) { handleDispatch(request, "ESPNOW_STATUS"); });
+ server_.on("/api/network/espnow/on", HTTP_POST,
+ [this](AsyncWebServerRequest* request) { handleDispatch(request, "ESPNOW_ON"); });
+ server_.on("/api/network/espnow/off", HTTP_POST,
+ [this](AsyncWebServerRequest* request) { handleDispatch(request, "ESPNOW_OFF"); });
server_.on("/api/network/espnow/peer", HTTP_GET,
[this](AsyncWebServerRequest* request) { handleDispatch(request, "ESPNOW_PEER_LIST"); });
server_.on("/api/network/espnow/peer", HTTP_POST, [this](AsyncWebServerRequest* request) {