From 48c6a35caeb7f7c94babbcf578e4ede5db9a466d Mon Sep 17 00:00:00 2001
From: Ricardo Bartels <ricardo@bitchbrothers.com>
Date: Wed, 30 Dec 2020 03:28:41 +0100
Subject: [PATCH] adds modal to reset button
refs: #94
---
data/settings.htm | 26 ++++++++-
esp8266-fastled-iot-webserver.ino | 93 ++++++++++++++++++++-----------
2 files changed, 84 insertions(+), 35 deletions(-)
diff --git a/data/settings.htm b/data/settings.htm
index f80b1ba..43137a9 100644
--- a/data/settings.htm
+++ b/data/settings.htm
@@ -160,7 +160,7 @@
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default">Update</button>
- <a role="button" href='/reset' class="pull-right btn btn-danger" style="margin-left: 10px;" title="Reset">RESET</a>
+ <a role="button" data-toggle="modal" data-target="#reset_modal" data-action="add" class="pull-right btn btn-danger" style="margin-left: 10px;" title="Reset">RESET</a>
<a role="button" href='/reboot' class="pull-right btn btn-info" style="margin-left: 10px;" title="Reboot">Reboot</a>
<a id="alexaSupportEntry" role="button" href='/alexa' target="_blank" class="pull-right btn btn-success" style="margin-left: 10px;" title="Alexa">Alexa Pairing</a>
<a id="otaSupportEntry" role="button" href="/ota" target="_blank" class="pull-right btn btn-success" title="OTA">OTA Update</a>
@@ -172,6 +172,30 @@
</div>
+ <div class="modal fade" id="reset_modal" tabindex="-1" role="dialog" aria-labelledby="Reset_Modal" aria-hidden="true">
+ <form action="/reset" method="post">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
+ <h4 class="modal-title" id="edit_room_lable">Reset settings</h4>
+ </div>
+ <div class="modal-body">
+ <div class="form-group form-group-lg row">
+ <div class="col-sm-offset-3 col-sm-6">
+ <a role="button" href='/reset?type=wifi' class="btn btn-warning btn-lg btn-block">Delete WIFI settings</a>
+ <a role="button" href='/reset?type=all' class="btn btn-danger btn-lg btn-block">Delete ALL settings</a>
+ </div>
+ </div>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
+ </div>
+ </div>
+ </div>
+ </form>
+ </div>
+
<!-- request js from the ESP8266 web server -->
<script src="js/jquery-3.1.1.min.js"></script>
<script src="js/bootstrap.min.js"></script>
diff --git a/esp8266-fastled-iot-webserver.ino b/esp8266-fastled-iot-webserver.ino
index 11b9ff1..7869f16 100644
--- a/esp8266-fastled-iot-webserver.ino
+++ b/esp8266-fastled-iot-webserver.ino
@@ -708,7 +708,40 @@ void addRebootPage(int webServerNr)
#endif // ENABLE_ALEXA_SUPPORT
}
+// we can't assing wifiManager.resetSettings(); to reset, somewhow it gets called straight away.
+void setWiFiConf(String ssid, String password)
+{
+#ifdef ESP8266
+ struct station_config conf;
+
+ wifi_station_get_config(&conf);
+
+ memset(conf.ssid, 0, sizeof(conf.ssid));
+ for (int i = 0; i < ssid.length() && i < sizeof(conf.ssid); i++)
+ conf.ssid[i] = ssid.charAt(i);
+
+ memset(conf.password, 0, sizeof(conf.password));
+ for (int i = 0; i < password.length() && i < sizeof(conf.password); i++)
+ conf.password[i] = password.charAt(i);
+
+ wifi_station_set_config(&conf);
+
+// untested due to lack of ESP32
+#elif defined(ESP32)
+ if(WiFiGenericClass::getMode() != WIFI_MODE_NULL){
+
+ wifi_config_t conf;
+ esp_wifi_get_config(WIFI_IF_STA, &conf);
+ memset(conf.sta.ssid, 0, sizeof(conf.sta.ssid));
+ ssid.toCharArray(conf.sta.ssid, sizeof(conf.sta.ssid));
+ memset(conf.sta.password, 0, sizeof(conf.sta.password));
+ password.toCharArray(conf.sta.password, sizeof(conf.sta.password));
+
+ esp_wifi_set_config(WIFI_IF_STA, &conf);
+ }
+#endif
+}
void setup() {
WiFi.setSleepMode(WIFI_NONE_SLEEP);
Serial.begin(115200);
@@ -779,10 +812,6 @@ void setup() {
char nameChar[nameString.length() + 1];
nameString.toCharArray(nameChar, sizeof(nameChar));
- //reset settings - wipe credentials for testing
- // wifiManager.resetSettings();
-
- wifiManager.setConfigPortalBlocking(false);
wifiManager.setHostname(cfg.hostname);
//automatically connect using saved credentials if they exist
@@ -1018,36 +1047,7 @@ void setup() {
String password = webServer.arg("password");
if (ssid.length() != 0 && password.length() != 0) {
-#ifdef ESP8266
- struct station_config conf;
-
- wifi_station_get_config(&conf);
-
- memset(conf.ssid, 0, sizeof(conf.ssid));
- for (int i = 0; i < ssid.length() && i < sizeof(conf.ssid); i++)
- conf.ssid[i] = ssid.charAt(i);
-
- memset(conf.password, 0, sizeof(conf.password));
- for (int i = 0; i < password.length() && i < sizeof(conf.password); i++)
- conf.password[i] = password.charAt(i);
-
- wifi_station_set_config(&conf);
-
-// untested due to lack of ESP32
-#elif defined(ESP32)
- if(WiFiGenericClass::getMode() != WIFI_MODE_NULL){
-
- wifi_config_t conf;
- esp_wifi_get_config(WIFI_IF_STA, &conf);
-
- memset(conf.sta.ssid, 0, sizeof(conf.sta.ssid));
- ssid.toCharArray(conf.sta.ssid, sizeof(conf.sta.ssid));
- memset(conf.sta.password, 0, sizeof(conf.sta.password));
- password.toCharArray(conf.sta.password, sizeof(conf.sta.password));
-
- esp_wifi_set_config(WIFI_IF_STA, &conf);
- }
-#endif
+ setWiFiConf(ssid, password);
force_restart = true;
}
@@ -1104,6 +1104,29 @@ void setup() {
}
});
+ webServer.on("/reset", HTTP_GET, []() {
+
+ // delete EEPROM settings
+ if (webServer.arg("type") == String("all")) {
+ // delete EEPROM config
+ EEPROM.begin(4095);
+ for (int i = 0 ; i < sizeof(cfg) ; i++) {
+ EEPROM.write(i, 0);
+ }
+ delay(200);
+ EEPROM.commit();
+ EEPROM.end();
+ }
+
+ // delete wireless config
+ if (webServer.arg("type") == String("wifi") || webServer.arg("type") == String("all")) {
+ setWiFiConf(String(""), String(""));
+ }
+ webServer.send(200, "text/html", "<html><head></head><body><font face='arial'><b><h2>Config reset finished. Device is rebooting now and you need to connect to the wireless again.</h2></b></font></body></html>");
+ delay(500);
+ ESP.restart();
+ });
+
webServer.on("/fieldValue", HTTP_GET, []() {
String name = webServer.arg("name");
String value = getFieldValue(name, fields, fieldCount);
@@ -1479,6 +1502,7 @@ void loadConfig()
save_config = true;
}
+#ifdef ENABLE_MQTT_SUPPORT
// fall back to default settings if hostname is invalid
if (!isValidHostname(cfg.MQTTHost, sizeof(cfg.MQTTHost))) {
cfg.MQTTEnabled = MQTT_ENABLED;
@@ -1490,6 +1514,7 @@ void loadConfig()
strncpy(cfg.MQTTDeviceName, MQTT_DEVICE_NAME, sizeof(cfg.MQTTDeviceName));
save_config = true;
}
+#endif
}
bool isValidHostname(char *hostname_to_check, long size)
--
GitLab