add option to unpair opener

This commit is contained in:
technyon
2022-06-01 21:02:34 +02:00
parent d6bd7dddf4
commit fec38ada9c
2 changed files with 42 additions and 24 deletions

View File

@@ -61,12 +61,19 @@ void WebCfgServer::initialize()
buildConfigureWifiHtml(response); buildConfigureWifiHtml(response);
_server.send(200, "text/html", response); _server.send(200, "text/html", response);
}); });
_server.on("/unpair", [&]() { _server.on("/unpairlock", [&]() {
if (_hasCredentials && !_server.authenticate(_credUser, _credPassword)) { if (_hasCredentials && !_server.authenticate(_credUser, _credPassword)) {
return _server.requestAuthentication(); return _server.requestAuthentication();
} }
processUnpair(); processUnpair(false);
});
_server.on("/unpairopener", [&]() {
if (_hasCredentials && !_server.authenticate(_credUser, _credPassword)) {
return _server.requestAuthentication();
}
processUnpair(true);
}); });
_server.on("/wifimanager", [&]() { _server.on("/wifimanager", [&]() {
if (_hasCredentials && !_server.authenticate(_credUser, _credPassword)) { if (_hasCredentials && !_server.authenticate(_credUser, _credPassword)) {
@@ -282,7 +289,7 @@ void WebCfgServer::buildHtml(String& response)
char lockstateArr[20]; char lockstateArr[20];
NukiLock::lockstateToString(_nuki->keyTurnerState().lockState, lockstateArr); NukiLock::lockstateToString(_nuki->keyTurnerState().lockState, lockstateArr);
lockState.concat(lockstateArr); lockState.concat(lockstateArr);
printParameter(response, "NUKI Lock Paired", _nuki->isPaired() ? " Yes" : " No"); printParameter(response, "NUKI Lock paired", _nuki->isPaired() ? " Yes" : " No");
printParameter(response, "NUKI Lock state", lockState.c_str()); printParameter(response, "NUKI Lock state", lockState.c_str());
} }
if(_nukiOpener != nullptr) if(_nukiOpener != nullptr)
@@ -291,8 +298,8 @@ void WebCfgServer::buildHtml(String& response)
char lockstateArr[20]; char lockstateArr[20];
NukiOpener::lockstateToString(_nukiOpener->keyTurnerState().lockState, lockstateArr); NukiOpener::lockstateToString(_nukiOpener->keyTurnerState().lockState, lockstateArr);
lockState.concat(lockstateArr); lockState.concat(lockstateArr);
printParameter(response, "NUKI Lock Paired", _nukiOpener->isPaired() ? " Yes" : " No"); printParameter(response, "NUKI Opener paired", _nukiOpener->isPaired() ? " Yes" : " No");
printParameter(response, "NUKI Lock state", lockState.c_str()); printParameter(response, "NUKI Opener state", lockState.c_str());
} }
printParameter(response, "Firmware", version.c_str()); printParameter(response, "Firmware", version.c_str());
response.concat("</table><br><br>"); response.concat("</table><br><br>");
@@ -366,13 +373,28 @@ void WebCfgServer::buildCredHtml(String &response)
response.concat("</FORM>"); response.concat("</FORM>");
_confirmCode = generateConfirmCode(); _confirmCode = generateConfirmCode();
response.concat("<br><br><h3>Unpair NUKI</h3>"); if(_nuki != nullptr)
response.concat("<form method=\"get\" action=\"/unpair\">"); {
String message = "Type "; response.concat("<br><br><h3>Unpair NUKI Lock</h3>");
message.concat(_confirmCode); response.concat("<form method=\"get\" action=\"/unpairlock\">");
message.concat(" to confirm unpair"); String message = "Type ";
printInputField(response, "CONFIRMTOKEN", message.c_str(), "", 10); message.concat(_confirmCode);
response.concat("<br><br><button type=\"submit\">OK</button>"); message.concat(" to confirm unpair");
printInputField(response, "CONFIRMTOKEN", message.c_str(), "", 10);
response.concat("<br><br><button type=\"submit\">OK</button></form>");
}
if(_nukiOpener != nullptr)
{
response.concat("<br><br><h3>Unpair NUKI Opener</h3>");
response.concat("<form method=\"get\" action=\"/unpairopener\">");
String message = "Type ";
message.concat(_confirmCode);
message.concat(" to confirm unpair");
printInputField(response, "CONFIRMTOKEN", message.c_str(), "", 10);
response.concat("<br><br><button type=\"submit\">OK</button></form>");
}
response.concat("</BODY>\n"); response.concat("</BODY>\n");
response.concat("</HTML>\n"); response.concat("</HTML>\n");
@@ -428,15 +450,7 @@ void WebCfgServer::buildConfigureWifiHtml(String &response)
response.concat("</HTML>\n"); response.concat("</HTML>\n");
} }
//printInputField(response, "CONFIRMTOKEN", "Type confirm", "", 10); void WebCfgServer::processUnpair(bool opener)
//int count = _server.args();
//for(int index = 0; index < count; index++)
//{
//String key = _server.argName(index);
//String value = _server.arg(index);
void WebCfgServer::processUnpair()
{ {
String response = ""; String response = "";
if(_server.args() == 0) if(_server.args() == 0)
@@ -458,12 +472,16 @@ void WebCfgServer::processUnpair()
} }
} }
buildConfirmHtml(response, "Unpairing NUKI and restarting.", 3); buildConfirmHtml(response, opener ? "Unpairing NUKI Opener and restarting." : "Unpairing NUKI Lock and restarting.", 3);
_server.send(200, "text/html", response); _server.send(200, "text/html", response);
if(_nuki != nullptr) if(!opener && _nuki != nullptr)
{ {
_nuki->unpair(); _nuki->unpair();
} }
if(opener && _nukiOpener != nullptr)
{
_nukiOpener->unpair();
}
waitAndProcess(false, 1000); waitAndProcess(false, 1000);
ESP.restart(); ESP.restart();
} }

View File

@@ -35,7 +35,7 @@ private:
void buildMqttConfigHtml(String& response); void buildMqttConfigHtml(String& response);
void buildConfirmHtml(String& response, const String &message, uint32_t redirectDelay = 5); void buildConfirmHtml(String& response, const String &message, uint32_t redirectDelay = 5);
void buildConfigureWifiHtml(String& response); void buildConfigureWifiHtml(String& response);
void processUnpair(); void processUnpair(bool opener);
void buildHtmlHeader(String& response); void buildHtmlHeader(String& response);
void printInputField(String& response, const char* token, const char* description, const char* value, const size_t maxLength, const bool isPassword = false); void printInputField(String& response, const char* token, const char* description, const char* value, const size_t maxLength, const bool isPassword = false);