add button to restart to wifi configuration
This commit is contained in:
@@ -23,6 +23,7 @@ file(GLOB SRCFILES
|
|||||||
WebCfgServer.cpp
|
WebCfgServer.cpp
|
||||||
PresenceDetection.cpp
|
PresenceDetection.cpp
|
||||||
PreferencesKeys.h
|
PreferencesKeys.h
|
||||||
|
SpiffsCookie.cpp
|
||||||
Version.h
|
Version.h
|
||||||
lib/ESP32_BLE_Arduino-1.0.1/src/*.cpp
|
lib/ESP32_BLE_Arduino-1.0.1/src/*.cpp
|
||||||
lib/ESP32_BLE_Arduino-1.0.1/src/*.h
|
lib/ESP32_BLE_Arduino-1.0.1/src/*.h
|
||||||
@@ -59,9 +60,9 @@ target_link_arduino_libraries(${PROJECT_NAME}
|
|||||||
WebServer
|
WebServer
|
||||||
DNSServer
|
DNSServer
|
||||||
Preferences
|
Preferences
|
||||||
|
SPIFFS
|
||||||
# esp32
|
# esp32
|
||||||
# Wire
|
# Wire
|
||||||
# SPIFFS
|
|
||||||
# FS
|
# FS
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
20
Network.cpp
20
Network.cpp
@@ -26,7 +26,18 @@ void Network::initialize()
|
|||||||
// these are stored by the esp library
|
// these are stored by the esp library
|
||||||
//wm.resetSettings();
|
//wm.resetSettings();
|
||||||
|
|
||||||
bool res = wm.autoConnect(); // password protected ap
|
bool res = false;
|
||||||
|
|
||||||
|
if(_cookie.isSet())
|
||||||
|
{
|
||||||
|
Serial.println(F("Opening WiFi configuration portal."));
|
||||||
|
res = wm.startConfigPortal();
|
||||||
|
_cookie.clear();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
res = wm.autoConnect(); // password protected ap
|
||||||
|
}
|
||||||
|
|
||||||
if(!res) {
|
if(!res) {
|
||||||
Serial.println(F("Failed to connect. Wait for ESP restart."));
|
Serial.println(F("Failed to connect. Wait for ESP restart."));
|
||||||
@@ -318,3 +329,10 @@ void Network::buildMqttPath(const char* path, char* outPath)
|
|||||||
}
|
}
|
||||||
outPath[i+1] = 0x00;
|
outPath[i+1] = 0x00;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Network::restartAndConfigureWifi()
|
||||||
|
{
|
||||||
|
_cookie.set();
|
||||||
|
delay(200);
|
||||||
|
ESP.restart();
|
||||||
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
#include <WiFiClient.h>
|
#include <WiFiClient.h>
|
||||||
#include <Preferences.h>
|
#include <Preferences.h>
|
||||||
#include "NukiConstants.h"
|
#include "NukiConstants.h"
|
||||||
|
#include "SpiffsCookie.h"
|
||||||
|
|
||||||
class Network
|
class Network
|
||||||
{
|
{
|
||||||
@@ -22,6 +23,8 @@ public:
|
|||||||
|
|
||||||
void setLockActionReceived(void (*lockActionReceivedCallback)(const char* value));
|
void setLockActionReceived(void (*lockActionReceivedCallback)(const char* value));
|
||||||
|
|
||||||
|
void restartAndConfigureWifi();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static void onMqttDataReceivedCallback(char* topic, byte* payload, unsigned int length);
|
static void onMqttDataReceivedCallback(char* topic, byte* payload, unsigned int length);
|
||||||
void onMqttDataReceived(char*& topic, byte*& payload, unsigned int& length);
|
void onMqttDataReceived(char*& topic, byte*& payload, unsigned int& length);
|
||||||
@@ -38,6 +41,7 @@ private:
|
|||||||
PubSubClient _mqttClient;
|
PubSubClient _mqttClient;
|
||||||
WiFiClient _wifiClient;
|
WiFiClient _wifiClient;
|
||||||
Preferences* _preferences;
|
Preferences* _preferences;
|
||||||
|
SpiffsCookie _cookie;
|
||||||
|
|
||||||
bool _mqttConnected = false;
|
bool _mqttConnected = false;
|
||||||
|
|
||||||
|
|||||||
43
SpiffsCookie.cpp
Normal file
43
SpiffsCookie.cpp
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
#include "SpiffsCookie.h"
|
||||||
|
#include "FS.h"
|
||||||
|
#include "SPIFFS.h"
|
||||||
|
|
||||||
|
SpiffsCookie::SpiffsCookie()
|
||||||
|
{
|
||||||
|
if(!SPIFFS.begin(true))
|
||||||
|
{
|
||||||
|
Serial.println(F("SPIFFS Mount Failed"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SpiffsCookie::set()
|
||||||
|
{
|
||||||
|
File file = SPIFFS.open("/cookie", FILE_WRITE);
|
||||||
|
if(!file)
|
||||||
|
{
|
||||||
|
Serial.println(F("- failed to open file for writing"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(file.write('#'))
|
||||||
|
{
|
||||||
|
Serial.println(F("- file written"));
|
||||||
|
} else {
|
||||||
|
Serial.println(F("- write failed"));
|
||||||
|
}
|
||||||
|
file.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SpiffsCookie::clear()
|
||||||
|
{
|
||||||
|
if(!SPIFFS.remove("/cookie"))
|
||||||
|
{
|
||||||
|
Serial.println(F("Failed to remove file"));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
const bool SpiffsCookie::isSet()
|
||||||
|
{
|
||||||
|
return SPIFFS.exists("/cookie");
|
||||||
|
}
|
||||||
13
SpiffsCookie.h
Normal file
13
SpiffsCookie.h
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
class SpiffsCookie
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SpiffsCookie();
|
||||||
|
virtual ~SpiffsCookie() = default;
|
||||||
|
|
||||||
|
void set();
|
||||||
|
void clear();
|
||||||
|
const bool isSet();
|
||||||
|
|
||||||
|
};
|
||||||
@@ -152,6 +152,13 @@ bool WebCfgServer::processArgs()
|
|||||||
_preferences->putString(preference_cred_password, value);
|
_preferences->putString(preference_cred_password, value);
|
||||||
configChanged = true;
|
configChanged = true;
|
||||||
}
|
}
|
||||||
|
else if(key == "WIFICONF")
|
||||||
|
{
|
||||||
|
if(value == _preferences->getString(preference_cred_password))
|
||||||
|
{
|
||||||
|
_network->restartAndConfigureWifi();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(clearMqttCredentials)
|
if(clearMqttCredentials)
|
||||||
@@ -234,6 +241,17 @@ void WebCfgServer::buildHtml(String& response)
|
|||||||
response.concat("<button type=\"submit\">Edit</button>");
|
response.concat("<button type=\"submit\">Edit</button>");
|
||||||
response.concat("</form>");
|
response.concat("</form>");
|
||||||
|
|
||||||
|
response.concat("<FORM ACTION=method=get >");
|
||||||
|
|
||||||
|
response.concat("<BR><BR><h3>Wifi</h3>");
|
||||||
|
response.concat("<table>");
|
||||||
|
printInputField(response, "WIFICONF", "Type password to confirm", "", 20, true);
|
||||||
|
response.concat("</table>");
|
||||||
|
|
||||||
|
response.concat("<br><INPUT TYPE=SUBMIT NAME=\"submit\" VALUE=\"Restart and configure WiFi\">");
|
||||||
|
|
||||||
|
response.concat("</FORM><BR><BR>");
|
||||||
|
|
||||||
response.concat("</BODY>\n");
|
response.concat("</BODY>\n");
|
||||||
response.concat("</HTML>\n");
|
response.concat("</HTML>\n");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user