From d58f4b6b1d9a4b4c40008d0bcbeb5550ba40cc15 Mon Sep 17 00:00:00 2001 From: technyon Date: Wed, 1 Jun 2022 20:42:33 +0200 Subject: [PATCH] fix config portal --- NukiOpenerWrapper.cpp | 2 - NukiWrapper.cpp | 2 - WebCfgServer.cpp | 92 ++++++++++++++++++++++--------------------- WebCfgServer.h | 1 + main.cpp | 8 ++++ 5 files changed, 57 insertions(+), 48 deletions(-) diff --git a/NukiOpenerWrapper.cpp b/NukiOpenerWrapper.cpp index d1fb526..d61618c 100644 --- a/NukiOpenerWrapper.cpp +++ b/NukiOpenerWrapper.cpp @@ -72,8 +72,6 @@ void NukiOpenerWrapper::update() if (!_paired) { Serial.println(F("Nuki opener start pairing")); - _bleScanner->update(); - vTaskDelay( 5000 / portTICK_PERIOD_MS); if (_nukiOpener.pairNuki() == NukiOpener::PairingResult::Success) { Serial.println(F("Nuki opener paired")); _paired = true; diff --git a/NukiWrapper.cpp b/NukiWrapper.cpp index bd79123..dc05f29 100644 --- a/NukiWrapper.cpp +++ b/NukiWrapper.cpp @@ -73,8 +73,6 @@ void NukiWrapper::update() if (!_paired) { Serial.println(F("Nuki start pairing")); - _bleScanner->update(); - vTaskDelay( 5000 / portTICK_PERIOD_MS); if (_nukiBle.pairNuki() == Nuki::PairingResult::Success) { Serial.println(F("Nuki paired")); _paired = true; diff --git a/WebCfgServer.cpp b/WebCfgServer.cpp index 6711c56..f7bfd98 100644 --- a/WebCfgServer.cpp +++ b/WebCfgServer.cpp @@ -26,7 +26,6 @@ WebCfgServer::WebCfgServer(NukiWrapper* nuki, Network* network, EthServer* ethSe } } - void WebCfgServer::initialize() { _server.on("/", [&]() { @@ -45,6 +44,14 @@ void WebCfgServer::initialize() buildCredHtml(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", [&]() { if (_hasCredentials && !_server.authenticate(_credUser, _credPassword)) { return _server.requestAuthentication(); @@ -107,10 +114,6 @@ bool WebCfgServer::processArgs(String& message) bool clearMqttCredentials = false; bool clearCredentials = false; - bool publishAuthData = false; - bool lockEnabled = false; - bool openerEnabled = false; - int count = _server.args(); for(int index = 0; index < count; index++) { @@ -184,15 +187,18 @@ bool WebCfgServer::processArgs(String& message) } else if(key == "PUBAUTH") { - publishAuthData = true; + _preferences->putBool(preference_publish_authdata, (value == "1")); + configChanged = true; } else if(key == "LOCKENA") { - lockEnabled = true; + _preferences->putBool(preference_lock_enabled, (value == "1")); + configChanged = true; } else if(key == "OPENA") { - openerEnabled = true; + _preferences->putBool(preference_opener_enabled, (value == "1")); + configChanged = true; } 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) { _preferences->putString(preference_mqtt_user, ""); @@ -304,14 +292,15 @@ void WebCfgServer::buildHtml(String& response) printParameter(response, "Firmware", version.c_str()); response.concat("

"); + response.concat("

MQTT Configuration

"); + response.concat("
"); + response.concat(""); + response.concat("
"); + response.concat("
"); - response.concat("

Configuration

"); + response.concat("

Configuration

"); response.concat(""); - 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)); if(_preferences->getBool(preference_lock_enabled)) { @@ -332,9 +321,9 @@ void WebCfgServer::buildHtml(String& response) response.concat("
"); - response.concat("

"); + response.concat(""); - response.concat("

Credentials

"); + response.concat("

Credentials

"); response.concat(""); response.concat(""); response.concat(""); @@ -386,6 +375,21 @@ void WebCfgServer::buildCredHtml(String &response) response.concat("\n"); } +void WebCfgServer::buildMqttConfigHtml(String &response) +{ + response.concat(""); + response.concat("

MQTT COnfiguration

"); + response.concat("
"); + 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("
"); + response.concat("
"); + response.concat(""); + +} + void WebCfgServer::buildConfirmHtml(String &response, const String &message, uint32_t 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) { - response.concat(""); - response.concat(""); + response.concat(""); response.concat(description); - response.concat(""); - response.concat(""); - response.concat(" "); + + response.concat(""); + + response.concat(""); - response.concat(""); - response.concat(""); + response.concat("/>"); } void WebCfgServer::printParameter(String& response, const char *description, const char *value) diff --git a/WebCfgServer.h b/WebCfgServer.h index 7b6af4f..f144e64 100644 --- a/WebCfgServer.h +++ b/WebCfgServer.h @@ -31,6 +31,7 @@ private: bool processArgs(String& message); void buildHtml(String& response); void buildCredHtml(String& response); + void buildMqttConfigHtml(String& response); void buildConfirmHtml(String& response, const String &message, uint32_t redirectDelay = 5); void buildConfigureWifiHtml(String& response); void processUnpair(); diff --git a/main.cpp b/main.cpp index b4566bb..9eb25ad 100644 --- a/main.cpp +++ b/main.cpp @@ -40,6 +40,14 @@ void nukiTask(void *pvParameters) { bleScanner->update(); vTaskDelay( 20 / portTICK_PERIOD_MS); + + bool needsPairing = (lockEnabled && !nuki->isPaired()) || (openerEnabled && !nukiOpener->isPaired()); + + if (needsPairing) + { + vTaskDelay( 5000 / portTICK_PERIOD_MS); + } + if(lockEnabled) { nuki->update();