fix config portal

This commit is contained in:
technyon
2022-06-01 20:42:33 +02:00
parent 1ce8eb6603
commit d58f4b6b1d
5 changed files with 57 additions and 48 deletions

View File

@@ -72,8 +72,6 @@ void NukiOpenerWrapper::update()
if (!_paired) { if (!_paired) {
Serial.println(F("Nuki opener start pairing")); Serial.println(F("Nuki opener start pairing"));
_bleScanner->update();
vTaskDelay( 5000 / portTICK_PERIOD_MS);
if (_nukiOpener.pairNuki() == NukiOpener::PairingResult::Success) { if (_nukiOpener.pairNuki() == NukiOpener::PairingResult::Success) {
Serial.println(F("Nuki opener paired")); Serial.println(F("Nuki opener paired"));
_paired = true; _paired = true;

View File

@@ -73,8 +73,6 @@ void NukiWrapper::update()
if (!_paired) { if (!_paired) {
Serial.println(F("Nuki start pairing")); Serial.println(F("Nuki start pairing"));
_bleScanner->update();
vTaskDelay( 5000 / portTICK_PERIOD_MS);
if (_nukiBle.pairNuki() == Nuki::PairingResult::Success) { if (_nukiBle.pairNuki() == Nuki::PairingResult::Success) {
Serial.println(F("Nuki paired")); Serial.println(F("Nuki paired"));
_paired = true; _paired = true;

View File

@@ -26,7 +26,6 @@ WebCfgServer::WebCfgServer(NukiWrapper* nuki, Network* network, EthServer* ethSe
} }
} }
void WebCfgServer::initialize() void WebCfgServer::initialize()
{ {
_server.on("/", [&]() { _server.on("/", [&]() {
@@ -45,6 +44,14 @@ void WebCfgServer::initialize()
buildCredHtml(response); buildCredHtml(response);
_server.send(200, "text/html", response); _server.send(200, "text/html", response);
}); });
_server.on("/mqttconfig", [&]() {
if (_hasCredentials && !_server.authenticate(_credUser, _credPassword)) {
return _server.requestAuthentication();
}
String response = "";
buildMqttConfigHtml(response);
_server.send(200, "text/html", response);
});
_server.on("/wifi", [&]() { _server.on("/wifi", [&]() {
if (_hasCredentials && !_server.authenticate(_credUser, _credPassword)) { if (_hasCredentials && !_server.authenticate(_credUser, _credPassword)) {
return _server.requestAuthentication(); return _server.requestAuthentication();
@@ -107,10 +114,6 @@ bool WebCfgServer::processArgs(String& message)
bool clearMqttCredentials = false; bool clearMqttCredentials = false;
bool clearCredentials = false; bool clearCredentials = false;
bool publishAuthData = false;
bool lockEnabled = false;
bool openerEnabled = false;
int count = _server.args(); int count = _server.args();
for(int index = 0; index < count; index++) for(int index = 0; index < count; index++)
{ {
@@ -184,15 +187,18 @@ bool WebCfgServer::processArgs(String& message)
} }
else if(key == "PUBAUTH") else if(key == "PUBAUTH")
{ {
publishAuthData = true; _preferences->putBool(preference_publish_authdata, (value == "1"));
configChanged = true;
} }
else if(key == "LOCKENA") else if(key == "LOCKENA")
{ {
lockEnabled = true; _preferences->putBool(preference_lock_enabled, (value == "1"));
configChanged = true;
} }
else if(key == "OPENA") else if(key == "OPENA")
{ {
openerEnabled = true; _preferences->putBool(preference_opener_enabled, (value == "1"));
configChanged = true;
} }
else if(key == "CREDUSER") else if(key == "CREDUSER")
{ {
@@ -226,24 +232,6 @@ bool WebCfgServer::processArgs(String& message)
} }
} }
if(_preferences->getBool(preference_publish_authdata) != publishAuthData)
{
_preferences->putBool(preference_publish_authdata, publishAuthData);
configChanged = true;
}
if(_preferences->getBool(preference_lock_enabled) != lockEnabled)
{
_preferences->putBool(preference_lock_enabled, lockEnabled);
configChanged = true;
}
if(_preferences->getBool(preference_opener_enabled) != openerEnabled)
{
_preferences->putBool(preference_opener_enabled, openerEnabled);
configChanged = true;
}
if(clearMqttCredentials) if(clearMqttCredentials)
{ {
_preferences->putString(preference_mqtt_user, ""); _preferences->putString(preference_mqtt_user, "");
@@ -304,14 +292,15 @@ void WebCfgServer::buildHtml(String& response)
printParameter(response, "Firmware", version.c_str()); printParameter(response, "Firmware", version.c_str());
response.concat("</table><br><br>"); response.concat("</table><br><br>");
response.concat("<h3>MQTT Configuration</h3>");
response.concat("<form method=\"get\" action=\"/mqttconfig\">");
response.concat("<button type=\"submit\">Edit</button>");
response.concat("</form>");
response.concat("<FORM ACTION=method=get >"); response.concat("<FORM ACTION=method=get >");
response.concat("<h3>Configuration</h3>"); response.concat("<br><h3>Configuration</h3>");
response.concat("<table>"); response.concat("<table>");
printInputField(response, "MQTTSERVER", "MQTT Broker", _preferences->getString(preference_mqtt_broker).c_str(), 100);
printInputField(response, "MQTTPORT", "MQTT Broker port", _preferences->getInt(preference_mqtt_broker_port), 5);
printInputField(response, "MQTTUSER", "MQTT User (# to clear)", _preferences->getString(preference_mqtt_user).c_str(), 30);
printInputField(response, "MQTTPASS", "MQTT Password", "*", 30, true);
printCheckBox(response, "LOCKENA", "NUKI Lock enabled", _preferences->getBool(preference_lock_enabled)); printCheckBox(response, "LOCKENA", "NUKI Lock enabled", _preferences->getBool(preference_lock_enabled));
if(_preferences->getBool(preference_lock_enabled)) if(_preferences->getBool(preference_lock_enabled))
{ {
@@ -332,9 +321,9 @@ void WebCfgServer::buildHtml(String& response)
response.concat("<br><INPUT TYPE=SUBMIT NAME=\"submit\" VALUE=\"Save\">"); response.concat("<br><INPUT TYPE=SUBMIT NAME=\"submit\" VALUE=\"Save\">");
response.concat("</FORM><BR><BR>"); response.concat("</FORM>");
response.concat("<h3>Credentials</h3>"); response.concat("<BR><BR><h3>Credentials</h3>");
response.concat("<form method=\"get\" action=\"/cred\">"); response.concat("<form method=\"get\" action=\"/cred\">");
response.concat("<button type=\"submit\">Edit</button>"); response.concat("<button type=\"submit\">Edit</button>");
response.concat("</form>"); response.concat("</form>");
@@ -386,6 +375,21 @@ void WebCfgServer::buildCredHtml(String &response)
response.concat("</HTML>\n"); response.concat("</HTML>\n");
} }
void WebCfgServer::buildMqttConfigHtml(String &response)
{
response.concat("<FORM ACTION=method=get >");
response.concat("<h3>MQTT COnfiguration</h3>");
response.concat("<table>");
printInputField(response, "MQTTSERVER", "MQTT Broker", _preferences->getString(preference_mqtt_broker).c_str(), 100);
printInputField(response, "MQTTPORT", "MQTT Broker port", _preferences->getInt(preference_mqtt_broker_port), 5);
printInputField(response, "MQTTUSER", "MQTT User (# to clear)", _preferences->getString(preference_mqtt_user).c_str(), 30);
printInputField(response, "MQTTPASS", "MQTT Password", "*", 30, true);
response.concat("</table>");
response.concat("<br><INPUT TYPE=SUBMIT NAME=\"submit\" VALUE=\"Save\">");
response.concat("</FORM>");
}
void WebCfgServer::buildConfirmHtml(String &response, const String &message, uint32_t redirectDelay) void WebCfgServer::buildConfirmHtml(String &response, const String &message, uint32_t redirectDelay)
{ {
String delay(redirectDelay); String delay(redirectDelay);
@@ -510,20 +514,20 @@ void WebCfgServer::printInputField(String& response,
void WebCfgServer::printCheckBox(String &response, const char *token, const char *description, const bool value) void WebCfgServer::printCheckBox(String &response, const char *token, const char *description, const bool value)
{ {
response.concat("<tr>"); response.concat("<tr><td>");
response.concat("<td>");
response.concat(description); response.concat(description);
response.concat("</td>"); response.concat("</td><td>");
response.concat("<td>");
response.concat(" <INPUT TYPE="); response.concat("<INPUT TYPE=hidden NAME=\"");
response.concat("checkbox ");
response.concat("NAME=\"");
response.concat(token); response.concat(token);
response.concat("\""); response.concat("\" value=\"0\"");
response.concat(value ? " checked=\"checked\"" : "");
response.concat("/>"); response.concat("/>");
response.concat("</td>");
response.concat("</tr>"); response.concat("<INPUT TYPE=checkbox NAME=\"");
response.concat(token);
response.concat("\" value=\"1\"");
response.concat(value ? " checked=\"checked\"" : "");
response.concat("/></td></tr>");
} }
void WebCfgServer::printParameter(String& response, const char *description, const char *value) void WebCfgServer::printParameter(String& response, const char *description, const char *value)

View File

@@ -31,6 +31,7 @@ private:
bool processArgs(String& message); bool processArgs(String& message);
void buildHtml(String& response); void buildHtml(String& response);
void buildCredHtml(String& response); void buildCredHtml(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();

View File

@@ -40,6 +40,14 @@ void nukiTask(void *pvParameters)
{ {
bleScanner->update(); bleScanner->update();
vTaskDelay( 20 / portTICK_PERIOD_MS); vTaskDelay( 20 / portTICK_PERIOD_MS);
bool needsPairing = (lockEnabled && !nuki->isPaired()) || (openerEnabled && !nukiOpener->isPaired());
if (needsPairing)
{
vTaskDelay( 5000 / portTICK_PERIOD_MS);
}
if(lockEnabled) if(lockEnabled)
{ {
nuki->update(); nuki->update();