allow to configure mqtt credentials
This commit is contained in:
37
Network.cpp
37
Network.cpp
@@ -63,6 +63,26 @@ void Network::initialize()
|
|||||||
_preferences->putString(preference_mqtt_path, _mqttPath);
|
_preferences->putString(preference_mqtt_path, _mqttPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String mqttUser = _preferences->getString(preference_mqtt_user);
|
||||||
|
if(mqttUser.length() > 0)
|
||||||
|
{
|
||||||
|
size_t len = mqttUser.length();
|
||||||
|
for(int i=0; i < len; i++)
|
||||||
|
{
|
||||||
|
_mqttUser[i] = mqttUser.charAt(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String mqttPass = _preferences->getString(preference_mqtt_password);
|
||||||
|
if(mqttPass.length() > 0)
|
||||||
|
{
|
||||||
|
size_t len = mqttPass.length();
|
||||||
|
for(int i=0; i < len; i++)
|
||||||
|
{
|
||||||
|
_mqttPass[i] = mqttPass.charAt(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Serial.print(F("MQTT Broker: "));
|
Serial.print(F("MQTT Broker: "));
|
||||||
Serial.print(_mqttBrokerAddr);
|
Serial.print(_mqttBrokerAddr);
|
||||||
Serial.print(F(":"));
|
Serial.print(F(":"));
|
||||||
@@ -77,8 +97,21 @@ bool Network::reconnect()
|
|||||||
while (!_mqttClient.connected() && millis() > _nextReconnect)
|
while (!_mqttClient.connected() && millis() > _nextReconnect)
|
||||||
{
|
{
|
||||||
Serial.println("Attempting MQTT connection");
|
Serial.println("Attempting MQTT connection");
|
||||||
// Attempt to connect
|
bool success = false;
|
||||||
if (_mqttClient.connect("nukiHub")) {
|
|
||||||
|
if(strlen(_mqttUser) == 0)
|
||||||
|
{
|
||||||
|
Serial.println("MQTT: Connecting without credentials");
|
||||||
|
success = _mqttClient.connect("nukiHub");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Serial.print("MQTT: Connecting with user: "); Serial.println(_mqttUser);
|
||||||
|
success = _mqttClient.connect("nukiHub", _mqttUser, _mqttPass);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (success) {
|
||||||
Serial.println(F("MQTT connected"));
|
Serial.println(F("MQTT connected"));
|
||||||
_mqttConnected = true;
|
_mqttConnected = true;
|
||||||
|
|
||||||
|
|||||||
@@ -41,8 +41,10 @@ private:
|
|||||||
bool _mqttConnected = false;
|
bool _mqttConnected = false;
|
||||||
|
|
||||||
unsigned long _nextReconnect = 0;
|
unsigned long _nextReconnect = 0;
|
||||||
char _mqttBrokerAddr[100] = {0};
|
char _mqttBrokerAddr[101] = {0};
|
||||||
char _mqttPath[100] = {0};
|
char _mqttPath[181] = {0};
|
||||||
|
char _mqttUser[31] = {0};
|
||||||
|
char _mqttPass[31] = {0};
|
||||||
|
|
||||||
void (*_lockActionReceivedCallback)(const char* value) = NULL;
|
void (*_lockActionReceivedCallback)(const char* value) = NULL;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
#define preference_deviceId "deviceId"
|
#define preference_deviceId "deviceId"
|
||||||
#define preference_mqtt_broker "mqttbroker"
|
#define preference_mqtt_broker "mqttbroker"
|
||||||
#define preference_mqtt_broker_port "mqttport"
|
#define preference_mqtt_broker_port "mqttport"
|
||||||
|
#define preference_mqtt_user "mqttuser"
|
||||||
|
#define preference_mqtt_password "mqttpass"
|
||||||
#define preference_mqtt_path "mqttpath"
|
#define preference_mqtt_path "mqttpath"
|
||||||
#define preference_query_interval_lockstate "lockStInterval"
|
#define preference_query_interval_lockstate "lockStInterval"
|
||||||
#define preference_query_interval_battery "batInterval"
|
#define preference_query_interval_battery "batInterval"
|
||||||
|
|||||||
@@ -17,6 +17,8 @@ void WebCfgServer::initialize()
|
|||||||
|
|
||||||
void WebCfgServer::update()
|
void WebCfgServer::update()
|
||||||
{
|
{
|
||||||
|
if(!_enabled) return;
|
||||||
|
|
||||||
bool configChanged = false;
|
bool configChanged = false;
|
||||||
|
|
||||||
// Create a client connections
|
// Create a client connections
|
||||||
@@ -25,7 +27,8 @@ void WebCfgServer::update()
|
|||||||
if (client)
|
if (client)
|
||||||
{
|
{
|
||||||
int index = 0;
|
int index = 0;
|
||||||
char message[200];
|
char message[500];
|
||||||
|
|
||||||
|
|
||||||
while (client.connected())
|
while (client.connected())
|
||||||
{
|
{
|
||||||
@@ -56,6 +59,7 @@ void WebCfgServer::update()
|
|||||||
char *lastToken = NULL;
|
char *lastToken = NULL;
|
||||||
|
|
||||||
bool configChanged = false;
|
bool configChanged = false;
|
||||||
|
bool clearCredentials = false;
|
||||||
while (token != NULL)
|
while (token != NULL)
|
||||||
{
|
{
|
||||||
if(lastToken != NULL)
|
if(lastToken != NULL)
|
||||||
@@ -73,6 +77,28 @@ void WebCfgServer::update()
|
|||||||
_preferences->putInt(preference_mqtt_broker_port, String(token).toInt());
|
_preferences->putInt(preference_mqtt_broker_port, String(token).toInt());
|
||||||
configChanged = true;
|
configChanged = true;
|
||||||
}
|
}
|
||||||
|
else if(lastTokenType == TokenType::MqttUser && tokenType == TokenType::None)
|
||||||
|
{
|
||||||
|
char* c = "%23";
|
||||||
|
if(strcmp(token, c) == 0)
|
||||||
|
{
|
||||||
|
clearCredentials = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_preferences->putString(preference_mqtt_user, token);
|
||||||
|
configChanged = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(lastTokenType == TokenType::MqttPass && tokenType == TokenType::None)
|
||||||
|
{
|
||||||
|
char* c = "*";
|
||||||
|
if(strcmp(token, c) != 0)
|
||||||
|
{
|
||||||
|
_preferences->putString(preference_mqtt_password, token);
|
||||||
|
configChanged = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
else if(lastTokenType == TokenType::MqttPath && tokenType == TokenType::None)
|
else if(lastTokenType == TokenType::MqttPath && tokenType == TokenType::None)
|
||||||
{
|
{
|
||||||
_preferences->putString(preference_mqtt_path, token);
|
_preferences->putString(preference_mqtt_path, token);
|
||||||
@@ -93,6 +119,13 @@ void WebCfgServer::update()
|
|||||||
token = strtok(NULL, "?=&");
|
token = strtok(NULL, "?=&");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(clearCredentials)
|
||||||
|
{
|
||||||
|
_preferences->putString(preference_mqtt_user, "");
|
||||||
|
_preferences->putString(preference_mqtt_password, "");
|
||||||
|
configChanged = true;
|
||||||
|
}
|
||||||
|
|
||||||
if(configChanged)
|
if(configChanged)
|
||||||
{
|
{
|
||||||
_enabled = false;
|
_enabled = false;
|
||||||
@@ -133,6 +166,8 @@ void WebCfgServer::serveHtml(WiFiClient &client)
|
|||||||
|
|
||||||
printInputField(client, "MQTTSERVER", "MQTT Broker:", _preferences->getString(preference_mqtt_broker).c_str(), 100);
|
printInputField(client, "MQTTSERVER", "MQTT Broker:", _preferences->getString(preference_mqtt_broker).c_str(), 100);
|
||||||
printInputField(client, "MQTTPORT", "MQTT Broker port:", _preferences->getInt(preference_mqtt_broker_port), 5);
|
printInputField(client, "MQTTPORT", "MQTT Broker port:", _preferences->getInt(preference_mqtt_broker_port), 5);
|
||||||
|
printInputField(client, "MQTTUSER", "MQTT User (# to clear):", _preferences->getString(preference_mqtt_user).c_str(), 30);
|
||||||
|
printInputField(client, "MQTTPASS", "MQTT Password:", "*", 30);
|
||||||
printInputField(client, "MQTTPATH", "MQTT Path:", _preferences->getString(preference_mqtt_path).c_str(), 180);
|
printInputField(client, "MQTTPATH", "MQTT Path:", _preferences->getString(preference_mqtt_path).c_str(), 180);
|
||||||
printInputField(client, "LSTINT", "Query interval lock state (seconds):", _preferences->getInt(preference_query_interval_lockstate), 10);
|
printInputField(client, "LSTINT", "Query interval lock state (seconds):", _preferences->getInt(preference_query_interval_lockstate), 10);
|
||||||
printInputField(client, "BATINT", "Query interval battery (seconds):", _preferences->getInt(preference_query_interval_battery), 10);
|
printInputField(client, "BATINT", "Query interval battery (seconds):", _preferences->getInt(preference_query_interval_battery), 10);
|
||||||
@@ -165,6 +200,14 @@ TokenType WebCfgServer::getParameterType(char *&token)
|
|||||||
{
|
{
|
||||||
return TokenType::MqttPort;
|
return TokenType::MqttPort;
|
||||||
}
|
}
|
||||||
|
if (strcmp(token, "MQTTUSER") == 0)
|
||||||
|
{
|
||||||
|
return TokenType::MqttUser;
|
||||||
|
}
|
||||||
|
if (strcmp(token, "MQTTPASS") == 0)
|
||||||
|
{
|
||||||
|
return TokenType::MqttPass;
|
||||||
|
}
|
||||||
if (strcmp(token, "MQTTPATH") == 0)
|
if (strcmp(token, "MQTTPATH") == 0)
|
||||||
{
|
{
|
||||||
return TokenType::MqttPath;
|
return TokenType::MqttPath;
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ enum class TokenType
|
|||||||
None,
|
None,
|
||||||
MqttServer,
|
MqttServer,
|
||||||
MqttPort,
|
MqttPort,
|
||||||
|
MqttUser,
|
||||||
|
MqttPass,
|
||||||
MqttPath,
|
MqttPath,
|
||||||
QueryIntervalLockstate,
|
QueryIntervalLockstate,
|
||||||
QueryIntervalBattery,
|
QueryIntervalBattery,
|
||||||
|
|||||||
2
main.cpp
2
main.cpp
@@ -31,7 +31,7 @@ void nukiTask(void *pvParameters)
|
|||||||
|
|
||||||
void setupTasks()
|
void setupTasks()
|
||||||
{
|
{
|
||||||
xTaskCreate(networkTask, "ntw", 2048, NULL, 1, NULL);
|
xTaskCreate(networkTask, "ntw", 8192, NULL, 1, NULL);
|
||||||
xTaskCreate(nukiTask, "nuki", 16384, NULL, 1, NULL);
|
xTaskCreate(nukiTask, "nuki", 16384, NULL, 1, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user