From 3eaaab0c66729973aa842c09e3b3caa3d3e9347c Mon Sep 17 00:00:00 2001 From: technyon Date: Sun, 27 Mar 2022 12:21:53 +0200 Subject: [PATCH] allow configure mqtt broker port via web server --- Network.cpp | 17 +++++++++++++---- PreferencesKeys.h | 1 + WebCfgServer.cpp | 15 ++++++++++++++- WebCfgServer.h | 1 + 4 files changed, 29 insertions(+), 5 deletions(-) diff --git a/Network.cpp b/Network.cpp index 023c0b23..bf7a2a2a 100644 --- a/Network.cpp +++ b/Network.cpp @@ -44,9 +44,18 @@ void Network::initialize() const char* brokerAddr = _preferences->getString(preference_mqtt_broker).c_str(); strcpy(_mqttBrokerAddr, brokerAddr); + int port = _preferences->getInt(preference_mqtt_broker_port); + if(port == 0) + { + port = 1883; + _preferences->putInt(preference_mqtt_broker_port, port); + } + Serial.print(F("MQTT Broker: ")); - Serial.println(_mqttBrokerAddr); - _mqttClient.setServer(_mqttBrokerAddr, 1883); + Serial.print(_mqttBrokerAddr); + Serial.print(F(":")); + Serial.println(port); + _mqttClient.setServer(_mqttBrokerAddr, port); _mqttClient.setCallback(Network::onMqttDataReceivedCallback); } @@ -58,14 +67,14 @@ bool Network::reconnect() Serial.println("Attempting MQTT connection"); // Attempt to connect if (_mqttClient.connect("nukiHub")) { - Serial.println("MQTT connected"); + Serial.println(F("MQTT connected")); // ... and resubscribe _mqttClient.subscribe(mqtt_topc_lockstate_action); } else { - Serial.print("MQTT connect failed, rc="); + Serial.print(F("MQTT connect failed, rc=")); Serial.println(_mqttClient.state()); _nextReconnect = millis() + 5000; } diff --git a/PreferencesKeys.h b/PreferencesKeys.h index 59290ecc..84e7fac6 100644 --- a/PreferencesKeys.h +++ b/PreferencesKeys.h @@ -1,6 +1,7 @@ #pragma once #define preference_mqtt_broker "mqttbroker" +#define preference_mqtt_broker_port "mqttport" #define preference_query_interval_lockstate "lockStInterval" #define preference_query_interval_battery "batInterval" diff --git a/WebCfgServer.cpp b/WebCfgServer.cpp index e2823c5f..9cbafb7f 100644 --- a/WebCfgServer.cpp +++ b/WebCfgServer.cpp @@ -66,6 +66,11 @@ void WebCfgServer::update() _preferences->putString(preference_mqtt_broker, token); configChanged = true; } + else if(lastTokenType == TokenType::MqttPort && tokenType == TokenType::None) + { + _preferences->putInt(preference_mqtt_broker_port, String(token).toInt()); + configChanged = true; + } else if(lastTokenType == TokenType::QueryIntervalLockstate && tokenType == TokenType::None) { _preferences->putInt(preference_query_interval_lockstate, String(token).toInt()); @@ -109,10 +114,14 @@ void WebCfgServer::serveHtml(WiFiClient &client) client.println("
"); - client.print("MQTT Server: getString(preference_mqtt_broker)); client.println("\" NAME=\"MQTTSERVER\" SIZE=\"25\" MAXLENGTH=\"40\">
"); + client.print("MQTT Broker port: getInt(preference_mqtt_broker_port)); + client.println("\" NAME=\"MQTTPORT\" SIZE=\"25\" MAXLENGTH=\"40\">
"); + client.print("Query interval lock state (seconds): getInt(preference_query_interval_lockstate)); client.println("\" NAME=\"LSTINT\" SIZE=\"25\" MAXLENGTH=\"16\">
"); @@ -145,6 +154,10 @@ TokenType WebCfgServer::getParameterType(char *&token) { return TokenType::QueryIntervalBattery; } + if (strcmp(token, "MQTTPORT") == 0) + { + return TokenType::MqttPort; + } return TokenType::None; } diff --git a/WebCfgServer.h b/WebCfgServer.h index 3b9ff7b6..c9374f03 100644 --- a/WebCfgServer.h +++ b/WebCfgServer.h @@ -7,6 +7,7 @@ enum class TokenType { None, MqttServer, + MqttPort, QueryIntervalLockstate, QueryIntervalBattery, };