Files
GrowController/Firmware/Web_APConfig.cpp
2021-10-04 13:45:39 +00:00

254 lines
8.4 KiB
C++

#include <ESP8266WiFi.h>
#include "ProjGlobals.h"
#include "Web_APConfig.h"
static String EncType_str(uint8_t encType) {
switch (encType) {
case ENC_TYPE_NONE:
return "open";
break;
case ENC_TYPE_WEP:
return "wep";
break;
case ENC_TYPE_TKIP:
return "wpa psk";
break;
case ENC_TYPE_CCMP:
return "wpa2 psk";
break;
case ENC_TYPE_AUTO:
return "wpa wpa2 psk";
break;
default:
return "unknown";
break;
}
}
void HandleAPScan() {
// WiFi.scanNetworks will return the number of networks found
Serial.println("Scan ...");
int n = WiFi.scanNetworks(false, true); // blocking call and show hidden.
Serial.println("scan done.");
if (n == 0) {
Serial.println("no networks found");
} else {
Serial.print(n);
Serial.println(" networks found");
server.sendContent_P("HTTP/1.1 200 OK\r\n");
server.sendContent_P("Content-Type: text/html\r\n");
server.sendContent_P("\r\n");
server.sendContent_P(
"<!DOCTYPE html>\n"
"<html>\n"
"<head><title>Grow Controller - Scan</title></head>\n"
"<body>\n"
"<h1>Grow Controller - Scan</h1>"
);
server.sendContent_P(
" <form action=\"/config\">\n"
" <blockquote>\n"
" <table width='800' border='0'>\n"
" <tr bgcolor='#E0E0E0'><td colspan='2'>Net</td><td>RSSI</td><td>SSID</td><td>BSSID</td><td>Encryption</td><td>Channel</td><td>Hidden</td></tr>\n"
);
for (int i = 0; i < n; ++i) {
// Select, Network #, RSSI, SSID, BSSID, Channel, Hidden
String bgcolor = (i & 1) ? "#E0E0E0" : "#FFFFFF";
String record =
" <tr bgcolor='" + bgcolor + "'><td><input type='radio' name='ssid' value='" + WiFi.SSID(i) + "'></td>\n"
+ " <td>" + (i + 1) + "</td>\n"
+ " <td>" + WiFi.RSSI(i) + "</td>\n"
+ " <td>" + WiFi.SSID(i) + "<br/>"
+ " <img src='/green1x1.png' width='" + String(5 * (100 + WiFi.RSSI(i))) + "' height='3'></td>\n"
+ " <td>" + WiFi.BSSIDstr(i) + "</td>\n";
record += " <td>" + EncType_str(WiFi.encryptionType(i)) + "</td>\n";
record += " <td>" + String(WiFi.channel(i));
record += "</td>\n";
record += WiFi.isHidden(i)
? " <td>Yes</td>\n"
: " <td>No</td>\n";
record += " </tr>\n";
server.sendContent(record);
//
Serial.print(i + 1);
Serial.print(": ");
Serial.print(WiFi.SSID(i));
Serial.print(" (");
Serial.print(WiFi.RSSI(i));
Serial.print(")");
Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE) ? " " : "*");
}
server.sendContent_P(
" <tr><td>&nbsp;</td>\n"
" <td colspan='7'>\n"
" <input type=\"submit\" value=\"Select\" />\n"
" <input type=\"reset\"/>\n"
" </td>\n"
" </tr>\n"
" </table>\n"
" </blockquote>\n"
" </form>\n"
"NAV:&nbsp;&nbsp;"
" <a href='/'>Home</a> | "
" <a href='/config'>Config</a> | "
" <a href='/scan'>Scan</a> | "
" <a href='/rssi'>RSSI</a> | "
" <a href='/curr'>Current</a> | "
" <a href='/config?ssid=reset&pass=reset' onclick=\"return confirm('Are you sure?')\">Factory Reset</a> | "
" <a href='/about'>About</a>\n"
" <br/>\n"
"</body>\n"
"</html>\n"
);
}
}
void FactoryReset(bool forceRestart) {
Serial.println("Factory Reset Configuration...\n");
wifiConfig.factoryReset();
wifiConfig.save();
if (forceRestart) {
Serial.println("Restart in 3 sec ...");
delay(3000);
ESP.restart();
}
}
void HandleAPConfigPage() {
String name = wifiConfig.getName();
String ssid = wifiConfig.getSSID();
String pass = wifiConfig.getPassword();
String url = wifiConfig.getURL();
//String ntp = wifiConfig.getNTPServerName();
char _onref[6], _offref[6], _autoOff[6];
snprintf(_onref, sizeof(_onref), "%d", wifiConfig.getOnRef());
snprintf(_offref, sizeof(_offref), "%d", wifiConfig.getOffRef());
snprintf(_autoOff, sizeof(_autoOff), "%d", wifiConfig.getAutoOff());
String onref = String(_onref);
String offref = String(_offref);
String autooff = String(_autoOff);
if (server.hasArg("ssid") && server.hasArg("pass")) {
String _ssid = server.hasArg("_ssid") ? server.arg("_ssid") : "";
String _pass = server.hasArg("_pass") ? server.arg("_pass") : "";
name = server.arg("name");
ssid = server.arg("ssid");
pass = server.arg("pass");
url = server.hasArg("url") ? server.arg("url") : "";
onref = server.hasArg("onref") ? server.arg("onref") : "";
offref = server.hasArg("offref") ? server.arg("offref") : "";
autooff = server.hasArg("autooff") ? server.arg("autooff") : "";
//ntp = server.hasArg("ntp") ? server.arg("ntp") : "";
if (ssid == "reset" && pass == "reset") {
FactoryReset(true);
}
wifiConfig.setName(name);
wifiConfig.setSSID(ssid);
wifiConfig.setPassword(pass);
wifiConfig.setURL(url);
wifiConfig.setOnRef(onref.toInt());
wifiConfig.setOffRef(offref.toInt());
wifiConfig.setAutoOff(autooff.toInt());
//wifiConfig.setNTPServerName(ntp);
wifiConfig.save();
Serial.println("Settings saved.");
if (ssid != _ssid || pass != _pass) {
// They changed stuff that requires a restart.
server.send(200, "text/html", "Configuration Saved! Restarting in 3 sec...");
Serial.printf("Config saved. Restarting in 3 sec . . .");
delay(3000);
ESP.restart();
return;
}
}
String modeText = (isStationMode) ? "Station mode<br/>" : "Access Point mode<br/>";
if (server.hasArg("ssid") && !server.hasArg("pass")) {
ssid = server.arg("ssid");
pass = "";
Serial.println("ssid: " + ssid + ", pass: " + pass);
}
if (server.hasArg("url"))
url = server.arg("url");
//if (server.hasArg("ntp"))
// ntp = server.arg("ntp");
server.send(200, "text/html",
"<!DOCTYPE html>\n"
"<html>\n"
"<head><title>Grow Controller - Config</title></head>\n"
"<body>\n"
"<h1>Grow Controller - Configuration</h1>"
" <form action=\"\">\n"
" <blockquote>\n"
" <table border='0'>\n"
" <tr>\n"
" <td>Node Name</td>\n"
" <td><input type=\"text\" size=\"32\" name=\"name\" value=\"" + name + "\" /></td>\n"
" </tr>\n"
" <tr>\n"
" <td>SSID</td>\n"
" <td><input type=\"text\" size=\"32\" name=\"ssid\" value=\"" + ssid + "\" />&nbsp;**\n"
" <input type=\"hidden\" name=\"_ssid\" value=\"" + ssid + "\" /></td>\n"
" </tr>\n"
" <tr nowrap='nowrap'>\n"
" <td>Password</td>\n"
" <td nowrap='nowrap'><input type=\"password\" size=\"64\" name=\"pass\" value=\"" + pass + "\" />&nbsp;**\n"
" <input type=\"hidden\" name=\"_pass\" value=\"" + pass + "\" /></td>\n"
" </tr>\n"
" <tr>\n"
" <td>Update URL</td>\n"
" <td><input type=\"text\" size=\"64\" name=\"url\" value=\"" + url + "\" /></td>\n"
" </tr>\n"
// " <tr>\n"
// " <td>NTP Server</td>\n"
// " <td><input type=\"text\" size=\"64\" name=\"ntp\" value=\"" + ntp + "\" /></td>\n"
// " </tr>\n"
" <tr>\n"
" <td>Auto-Off</td>\n"
" <td><input type=\"text\" size=\"10\" name=\"autooff\" value=\"" + autooff + "\" /> (time in seconds when non-zero)</td>\n"
" </tr>\n"
" <tr>\n"
" <td>On Reference</td>\n"
" <td><input type=\"text\" size=\"10\" name=\"onref\" value=\"" + onref + "\" /> (sense above this indicates power is on)</td>\n"
" </tr>\n"
" <tr>\n"
" <td>Off Reference</td>\n"
" <td><input type=\"text\" size=\"10\" name=\"offref\" value=\"" + offref + "\" /> (sense below this indicates power is off)</td>\n"
" </tr>\n"
" <tr>\n"
" <td>&nbsp;</td>\n"
" <td>\n"
" <input type=\"submit\" value=\"Save\" />\n"
" <input type=\"reset\"/> ** Changes to these will trigger a module restart.\n"
" </td>\n"
" </tr>\n"
" <tr>\n"
" <td colspan='2'><hr/></td>\n"
" </tr>\n"
" <tr>\n"
" <td>&nbsp;</td>\n"
" <td><a href='/swupdatecheck'>Check for SW update (module will restart if updated)</a></td/>\n"
" </tr>\n"
" </table>\n"
" </blockquote>\n"
" </form>\n"
"NAV:&nbsp;&nbsp;"
" <a href='/'>Home</a> | "
" <a href='/config'>Config</a> | "
" <a href='/scan'>Scan</a> | "
" <a href='/rssi'>RSSI</a> | "
" <a href='/curr'>Current</a> | "
" <a href='/config?ssid=reset&pass=reset' onclick=\"return confirm('Are you sure?')\">Factory Reset</a> | "
" <a href='/about'>About</a>\n"
" <br/>\n"
"</body>\n"
"</html>\n"
);
}