fix menu and param save

This commit is contained in:
Shawn A
2018-02-23 12:38:34 -06:00
parent 951b39b088
commit ff636abea8
4 changed files with 72 additions and 37 deletions
+59 -27
View File
@@ -347,6 +347,7 @@ void WiFiManager::setupConfigPortal() {
server->on((String)F("/wifisave"), std::bind(&WiFiManager::handleWifiSave, this));
server->on((String)F("/info"), std::bind(&WiFiManager::handleInfo, this));
server->on((String)F("/param"), std::bind(&WiFiManager::handleParam, this));
server->on((String)F("/paramsave"), std::bind(&WiFiManager::handleParamSave, this));
server->on((String)F("/restart"), std::bind(&WiFiManager::handleReset, this));
server->on((String)F("/exit"), std::bind(&WiFiManager::handleExit, this));
server->on((String)F("/close"), std::bind(&WiFiManager::stopCaptivePortal, this));
@@ -694,12 +695,21 @@ void WiFiManager::handleWifi(boolean scan) {
if (scan) {
page += getScanItemOut();
}
String pitem = FPSTR(HTTP_FORM_START);
String pitem = "";
pitem = FPSTR(HTTP_FORM_START);
pitem.replace(FPSTR(T_v), F("wifisave"));
page += pitem;
pitem = FPSTR(HTTP_FORM_WIFI);
pitem.replace(FPSTR(T_v), WiFi_SSID());
page += pitem;
page += getStaticOut();
if(_paramsInWifi) page += getParamOut();
if(_paramsInWifi){
page += getParamOut();
page += FPSTR(HTTP_FORM_WIFI_END);
}
page += FPSTR(HTTP_FORM_END);
page += FPSTR(HTTP_SCAN_LINK);
reportStatus(page);
@@ -722,6 +732,12 @@ void WiFiManager::handleParam(){
handleRequest();
String page = getHTTPHead(FPSTR(S_titleparam)); // @token titlewifi
String pitem = "";
pitem = FPSTR(HTTP_FORM_START);
pitem.replace(FPSTR(T_v), F("paramsave"));
page += pitem;
page += getParamOut();
page += FPSTR(HTTP_FORM_END);
reportStatus(page);
@@ -890,8 +906,6 @@ String WiFiManager::getParamOut(){
bool tok_v = HTTP_PARAM_temp.indexOf(FPSTR(T_v)) > 0;
bool tok_c = HTTP_PARAM_temp.indexOf(FPSTR(T_c)) > 0;
page += FPSTR(HTTP_FORM_PARAM_START);
char parLength[5];
// add the extra parameters to the form
for (int i = 0; i < _paramsCount; i++) {
@@ -933,9 +947,6 @@ String WiFiManager::getParamOut(){
page += pitem;
}
if (_params[0] != NULL) {
page += FPSTR(HTTP_FORM_PARAM_END);
}
}
return page;
@@ -965,25 +976,7 @@ void WiFiManager::handleWifiSave() {
_ssid = server->arg(F("s")).c_str();
_pass = server->arg(F("p")).c_str();
//parameters
if(_paramsCount > 0){
DEBUG_WM(F("Parameters"));
DEBUG_WM(FPSTR(D_HR));
for (int i = 0; i < _paramsCount; i++) {
if (_params[i] == NULL) {
break;
}
//read parameter from server
String value;
if(server->arg((String)FPSTR(S_parampre)+(String)i) != NULL) value = server->arg((String)FPSTR(S_parampre)+(String)i).c_str();
else value = server->arg(_params[i]->getID()).c_str();
//store it in array
value.toCharArray(_params[i]->_value, _params[i]->_length+1); // length+1 null terminated
DEBUG_WM((String)_params[i]->getID() + ":",value);
}
DEBUG_WM(FPSTR(D_HR));
}
if(_paramsInWifi) doParamSave();
if (server->arg(FPSTR(S_ip)) != "") {
//_sta_static_ip.fromString(server->arg(FPSTR(S_ip));
@@ -1014,6 +1007,45 @@ void WiFiManager::handleWifiSave() {
connect = true; //signal ready to connect/reset
}
void WiFiManager::handleParamSave() {
DEBUG_WM(F("<- HTTP WiFi save "));
DEBUG_WM(F("Method:"),server->method() == HTTP_GET ? (String)FPSTR(S_GET) : (String)FPSTR(S_POST));
handleRequest();
doParamSave();
String page = getHTTPHead(FPSTR(S_titleparamsaved)); // @token titleparamsaved
page += FPSTR(HTTP_PARAMSAVED);
page += FPSTR(HTTP_END);
server->sendHeader(FPSTR(HTTP_HEAD_CL), String(page.length()));
server->send(200, FPSTR(HTTP_HEAD_CT), page);
DEBUG_WM(F("Sent param save page"));
}
void WiFiManager::doParamSave(){
//parameters
if(_paramsCount > 0){
DEBUG_WM(F("Parameters"));
DEBUG_WM(FPSTR(D_HR));
for (int i = 0; i < _paramsCount; i++) {
if (_params[i] == NULL) {
break;
}
//read parameter from server
String value;
if(server->arg((String)FPSTR(S_parampre)+(String)i) != NULL) value = server->arg((String)FPSTR(S_parampre)+(String)i).c_str();
else value = server->arg(_params[i]->getID()).c_str();
//store it in params array
value.toCharArray(_params[i]->_value, _params[i]->_length+1); // length+1 null terminated
DEBUG_WM((String)_params[i]->getID() + ":",value);
}
DEBUG_WM(FPSTR(D_HR));
}
}
/**
* HTTPD CALLBACK info page
*/
@@ -1703,7 +1735,7 @@ void WiFiManager::setMenu(uint8_t menu[]){
int i;
int n = sizeof(menu);
for(i=0;i<sizeof(_menuIds);i++){
if(_menuIds[i] == MENU_PARAM) _paramsInWifi = false; // param auto flag
if(menu[i] == MENU_PARAM) _paramsInWifi = false; // param auto flag
_menuIds[i] = i<n ? menu[i] : 255;
}
}
+3 -1
View File
@@ -210,7 +210,7 @@ class WiFiManager
std::unique_ptr<WM_WebServer> server;
// std:vector<uint8_t> _menuids;
uint8_t _menuIds[3] = {MENU_WIFI,MENU_INFO,MENU_EXIT};
uint8_t _menuIds[10] = {MENU_WIFI,MENU_INFO,MENU_EXIT};
// ip configs
IPAddress _ap_static_ip;
@@ -282,6 +282,8 @@ class WiFiManager
void handleParam();
void handleWiFiStatus();
void handleRequest();
void handleParamSave();
void doParamSave();
boolean captivePortal();
boolean configPortalHasTimeout();
@@ -1,7 +1,7 @@
#include <FS.h> // this needs to be first, or it all crashes and burns...
#include <WiFiManager.h> // https://github.com/tzapu/WiFiManager
#include <ArduinoJson.h> // https://github.com/bblanchon/ArduinoJson
#include <spiffs.h>
// #include <spiffs.h>
//define your default values here, if there are different values in config.json, they are overwritten.
char mqtt_server[40];
@@ -69,15 +69,15 @@ void setup() {
// id/name placeholder/prompt default length
WiFiManagerParameter custom_mqtt_server("server", "mqtt server", mqtt_server, 40);
WiFiManagerParameter custom_mqtt_port("port", "mqtt port", mqtt_port, 6);
// WiFiManagerParameter custom_blynk_token("blynk", "blynk token", "", 0);
WiFiManagerParameter custom_blynk_token("blynk", "blynk token");
custom_blynk_token.setValue("setvalue override",32);
WiFiManagerParameter custom_blynk_token("blynk", "blynk token", "", 0);
//WiFiManager
//Local intialization. Once its business is done, there is no need to keep it around
WiFiManager wifiManager;
uint8_t menu[] = {wifiManager.MENU_WIFI,wifiManager.MENU_INFO,wifiManager.MENU_PARAM,wifiManager.MENU_CLOSE};
wifiManager.setMenu(menu);
//set config save notify callback
wifiManager.setSaveConfigCallback(saveConfigCallback);
+5 -4
View File
@@ -41,16 +41,16 @@ const char HTTP_ITEM_QP[] PROGMEM = "<div class='q {h}'>{r}%</div>"; //
const char HTTP_ITEM[] PROGMEM = "<div><a href='#p' onclick='c(this)'>{v}</a>{qi}{qp}</div>"; // {q} = HTTP_ITEM_QI, {r} = HTTP_ITEM_QP
// const char HTTP_ITEM[] PROGMEM = "<div><a href='#p' onclick='c(this)'>{v}</a> {R} {r}% {q} {e}</div>"; // test all tokens
const char HTTP_FORM_START[] PROGMEM = "<form method='POST' action='wifisave'><label for='s'>SSID</label><input id='s' name='s' maxlength=32 placeholder='{v}'><br/><label for='p'>Password</label><input id='p' name='p' maxlength='64' type='password' placeholder=''><br/>";
const char HTTP_FORM_START[] PROGMEM = "<form method='POST' action='{v}'>";
const char HTTP_FORM_WIFI[] PROGMEM = "<label for='s'>SSID</label><input id='s' name='s' maxlength=32 placeholder='{v}'><br/><label for='p'>Password</label><input id='p' name='p' maxlength='64' type='password' placeholder=''>";
const char HTTP_FORM_WIFI_END[] PROGMEM = "<hr><br>";
const char HTTP_FORM_END[] PROGMEM = "<br/><button type='submit'>Save</button></form>";
const char HTTP_FORM_LABEL[] PROGMEM = "<label for='{i}'>{t}</label>";
const char HTTP_FORM_PARAM_START[] PROGMEM = "<hr>";
const char HTTP_FORM_PARAM[] PROGMEM = "<br/><input id='{i}' name='{n}' maxlength={l} placeholder='' value='{v}' {c}>";
const char HTTP_FORM_PARAM_END[] PROGMEM = "<br/>";
const char HTTP_SCAN_LINK[] PROGMEM = "<br/><form action='/wifi' method='get'><button>Refresh</button></form>";
const char HTTP_SAVED[] PROGMEM = "<div class='msg'>Saving Credentials<br/>Trying to connect ESP to network.<br />If it fails reconnect to AP to try again</div>";
const char HTTP_PARAMSAVED[] PROGMEM = "<div class='msg'>Saved<br/></div>";
const char HTTP_END[] PROGMEM = "</div></body></html>";
const char HTTP_ERASEBTN[] PROGMEM = "<br/><form action='/erase' method='get'><button class='D'>Erase WiFi Config</button></form>";
@@ -178,6 +178,7 @@ const char S_titlewifisaved[] PROGMEM = "Credentials Saved";
const char S_titlewifi[] PROGMEM = "Config ESP";
const char S_titleinfo[] PROGMEM = "Info";
const char S_titleparam[] PROGMEM = "Setup";
const char S_titleparamsaved[] PROGMEM = "Setup Saved";
const char S_titleexit[] PROGMEM = "Exit";
const char S_titlereset[] PROGMEM = "Reset";
const char S_titleerase[] PROGMEM = "Erase";