Add WiFi HTTP and UART configuration parity

This commit is contained in:
2026-06-04 13:17:07 -06:00
parent a90d01aa0d
commit edfd6021e1
2 changed files with 170 additions and 0 deletions
@@ -606,6 +606,80 @@ void handleUartMessage(const String& line) {
return;
}
if (strcmp(type, "wifi_request") == 0) {
DynamicJsonDocument response(1024);
response["type"] = "wifi_config_response";
response["ok"] = true;
JsonObject wifi = response.createNestedObject("wifi");
wifi["ap_enabled"] = true;
wifi["sta_enabled"] = staSsid.length() > 0;
wifi["ssid"] = staSsid;
wifi["password_set"] = staPassword.length() > 0;
wifi["sta_connected"] = WiFi.status() == WL_CONNECTED;
wifi["ap_ip"] = WiFi.softAPIP().toString();
if (WiFi.status() == WL_CONNECTED) {
wifi["sta_ip"] = WiFi.localIP().toString();
} else {
wifi["sta_ip"] = "";
}
serializeJson(response, DashboardSerial);
DashboardSerial.println();
return;
}
if (strcmp(type, "config_wifi") == 0) {
if (doc["ssid"].is<String>()) {
staSsid = doc["ssid"].as<String>();
}
if (doc["password"].is<String>()) {
staPassword = doc["password"].as<String>();
}
saveWifiConfig();
DynamicJsonDocument response(512);
response["type"] = "wifi_config_response";
response["ok"] = true;
response["ssid"] = staSsid;
response["password_set"] = staPassword.length() > 0;
serializeJson(response, DashboardSerial);
DashboardSerial.println();
return;
}
if (strcmp(type, "wifi_connect") == 0) {
connectStaWifi();
DynamicJsonDocument response(512);
response["type"] = "wifi_config_response";
response["ok"] = true;
response["sta_connected"] = WiFi.status() == WL_CONNECTED;
response["sta_ip"] = WiFi.status() == WL_CONNECTED ? WiFi.localIP().toString() : "";
serializeJson(response, DashboardSerial);
DashboardSerial.println();
return;
}
if (strcmp(type, "wifi_clear") == 0) {
clearWifiConfig();
DynamicJsonDocument response(512);
response["type"] = "wifi_config_response";
response["ok"] = true;
response["ssid"] = "";
response["password_set"] = false;
serializeJson(response, DashboardSerial);
DashboardSerial.println();
return;
}
if (strcmp(type, "save_config") == 0) {
saveConfig();
sendConfigResponse(DashboardSerial);
@@ -1038,6 +1112,67 @@ void handleFactoryResetConfig() {
}
void sendWifiConfigJson() {
DynamicJsonDocument doc(1024);
doc["type"] = "wifi_config_response";
doc["ok"] = true;
JsonObject wifi = doc.createNestedObject("wifi");
wifi["ap_enabled"] = true;
wifi["sta_enabled"] = staSsid.length() > 0;
wifi["ssid"] = staSsid;
wifi["password_set"] = staPassword.length() > 0;
wifi["sta_connected"] = WiFi.status() == WL_CONNECTED;
wifi["ap_ip"] = WiFi.softAPIP().toString();
if (WiFi.status() == WL_CONNECTED) {
wifi["sta_ip"] = WiFi.localIP().toString();
} else {
wifi["sta_ip"] = "";
}
String output;
serializeJson(doc, output);
server.send(200, "application/json", output);
}
void handleGetWifiConfig() {
sendWifiConfigJson();
}
void handleUpdateWifiConfig() {
DynamicJsonDocument doc(1024);
DeserializationError error = deserializeJson(doc, server.arg("plain"));
if (error) {
server.send(400, "application/json", "{\"ok\":false,\"error\":\"invalid_json\"}");
return;
}
if (doc["ssid"].is<String>()) {
staSsid = doc["ssid"].as<String>();
}
if (doc["password"].is<String>()) {
staPassword = doc["password"].as<String>();
}
saveWifiConfig();
sendWifiConfigJson();
}
void handleWifiConnect() {
connectStaWifi();
sendWifiConfigJson();
}
void handleWifiClear() {
clearWifiConfig();
sendWifiConfigJson();
}
void handleSaveConfig() {
saveConfig();
sendConfigJson();
@@ -1264,6 +1399,11 @@ void setup() {
server.on("/relay/relay_2/off", HTTP_GET, handleGenericRelayRoute);
server.on("/config", HTTP_GET, handleGetConfig);
server.on("/config/wifi", HTTP_GET, handleGetWifiConfig);
server.on("/config/wifi", HTTP_POST, handleUpdateWifiConfig);
server.on("/wifi/connect", HTTP_POST, handleWifiConnect);
server.on("/wifi/clear", HTTP_POST, handleWifiClear);
server.on("/config/device", HTTP_POST, handleUpdateDeviceConfig);
server.on("/config/relay", HTTP_POST, handleUpdateRelayConfig);
server.on("/config/bms", HTTP_POST, handleUpdateBmsConfig);