diff --git a/html/management.html b/html/management.html
index 19ffd46..4c614b2 100644
--- a/html/management.html
+++ b/html/management.html
@@ -4,6 +4,7 @@
ESPuino-Konfiguration
+
@@ -326,6 +327,9 @@
+
+
@@ -1024,7 +1028,8 @@
mqttEnable: val,
mqttServer: document.getElementById('mqttServer').value,
mqttUser: document.getElementById('mqttUser').value,
- mqttPwd: document.getElementById('mqttPwd').value
+ mqttPwd: document.getElementById('mqttPwd').value,
+ mqttPort: document.getElementById('mqttPort').value
}
};
var myJSON = JSON.stringify(myObj);
diff --git a/src/HTMLmanagement.h b/src/HTMLmanagement.h
index 5fbafc0..a9a180b 100644
--- a/src/HTMLmanagement.h
+++ b/src/HTMLmanagement.h
@@ -4,6 +4,7 @@ static const char management_HTML[] PROGMEM = "\
ESPuino-Konfiguration\
\
\
+ \
\
\
\
@@ -326,6 +327,9 @@ static const char management_HTML[] PROGMEM = "\
\
\
+ \
+ \
\
\
\
@@ -1024,7 +1028,8 @@ static const char management_HTML[] PROGMEM = "\
mqttEnable: val,\
mqttServer: document.getElementById('mqttServer').value,\
mqttUser: document.getElementById('mqttUser').value,\
- mqttPwd: document.getElementById('mqttPwd').value\
+ mqttPwd: document.getElementById('mqttPwd').value,\
+ mqttPort: document.getElementById('mqttPort').value\
}\
};\
var myJSON = JSON.stringify(myObj);\
diff --git a/src/logmessages.h b/src/logmessages.h
index f16a358..ad34f95 100644
--- a/src/logmessages.h
+++ b/src/logmessages.h
@@ -133,6 +133,7 @@ static const char wroteMqttUserToNvs[] PROGMEM = "MQTT-User wurde ins NVS geschr
static const char restoredMqttUserFromNvs[] PROGMEM = "MQTT-User wurde aus NVS geladen";
static const char wroteMqttPwdToNvs[] PROGMEM = "MQTT-Passwort wurde ins NVS geschrieben.";
static const char restoredMqttPwdFromNvs[] PROGMEM = "MQTT-Passwort wurde aus NVS geladen";
+static const char restoredMqttPortFromNvs[] PROGMEM = "MQTT-Port wurde aus NVS geladen";
static const char mqttWithPwd[] PROGMEM = "Verbinde zu MQTT-Server mit User und Passwort";
static const char mqttWithoutPwd[] PROGMEM = "Verbinde zu MQTT-Server ohne User und Passwort";
static const char ssidNotFoundInNvs[] PROGMEM = "SSID wurde im NVS nicht gefunden.";
diff --git a/src/logmessages_EN.h b/src/logmessages_EN.h
index 77f311a..24b59c6 100644
--- a/src/logmessages_EN.h
+++ b/src/logmessages_EN.h
@@ -133,6 +133,7 @@ static const char wroteMqttUserToNvs[] PROGMEM = "Stored MQTT-user to NVS.";
static const char restoredMqttUserFromNvs[] PROGMEM = "Restored MQTT-user from NVS";
static const char wroteMqttPwdToNvs[] PROGMEM = "Stored MQTT-password to NVS.";
static const char restoredMqttPwdFromNvs[] PROGMEM = "Restored MQTT-password from NVS";
+static const char restoredMqttPortFromNvs[] PROGMEM = "Restored MQTT-port from NVS";
static const char mqttWithPwd[] PROGMEM = "Try to connect to MQTT-server with user und password";
static const char mqttWithoutPwd[] PROGMEM = "Try to connect to MQTT-server without user und password";
static const char ssidNotFoundInNvs[] PROGMEM = "Unable to find SSID to NVS.";
diff --git a/src/main.cpp b/src/main.cpp
index a57ea78..fee8ee7 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -224,7 +224,7 @@ uint8_t mqttPasswordLength = 16;
char *mqtt_server = strndup((char*) "192.168.2.43", mqttServerLength); // IP-address of MQTT-server (if not found in NVS this one will be taken)
char *mqttUser = strndup((char*) "mqtt-user", mqttUserLength); // MQTT-user
char *mqttPassword = strndup((char*) "mqtt-password", mqttPasswordLength); // MQTT-password*/
-
+uint16_t mqttPort = 1883; // MQTT-Port
char stringDelimiter[] = "#"; // Character used to encapsulate data in linear NVS-strings (don't change)
char stringOuterDelimiter[] = "^"; // Character used to encapsulate encapsulated data along with RFID-ID in backup-file
@@ -341,9 +341,6 @@ QueueHandle_t explorerFileUploadStatusQueue;
// Prototypes
void accessPointStart(const char *SSID, IPAddress ip, IPAddress netmask);
static int arrSortHelper(const void* a, const void* b);
-#ifdef MQTT_ENABLE
- void callback(const char *topic, const byte *payload, uint32_t length);
-#endif
void batteryVoltageTester(void);
void buttonHandler();
void deepSleepManager(void);
@@ -372,18 +369,15 @@ void loggerNl(const uint8_t _currentLogLevel, const char *str, const uint8_t _lo
void logger(const uint8_t _currentLogLevel, const char *str, const uint8_t _logLevel);
float measureBatteryVoltage(void);
#ifdef MQTT_ENABLE
+ void callback(const char *topic, const byte *payload, uint32_t length);
bool publishMqtt(const char *topic, const char *payload, bool retained);
+ void postHeartbeatViaMqtt(void);
+ bool reconnect();
#endif
size_t nvsRfidWriteWrapper (const char *_rfidCardId, const char *_track, const uint32_t _playPosition, const uint8_t _playMode, const uint16_t _trackLastPlayed, const uint16_t _numberOfTracks);
void onWebsocketEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len);
-#ifdef MQTT_ENABLE
- void postHeartbeatViaMqtt(void);
-#endif
bool processJsonRequest(char *_serialJson);
void randomizePlaylist (char *str[], const uint32_t count);
-#ifdef MQTT_ENABLE
- bool reconnect();
-#endif
char ** returnPlaylistFromWebstream(const char *_webUrl);
char ** returnPlaylistFromSD(File _fileOrDirectory);
void rfidScanner(void *parameter);
@@ -3045,22 +3039,22 @@ void doCmdAction(const uint16_t mod) {
break;
}
#endif
- case ENABLE_FTP_SERVER: {
- #ifdef FTP_ENABLE
- if (wifiManager() == WL_CONNECTED && !ftpEnableLastStatus && !ftpEnableCurrentStatus) {
- ftpEnableLastStatus = true;
- #ifdef NEOPIXEL_ENABLE
- showLedOk = true;
- #endif
- } else {
- #ifdef NEOPIXEL_ENABLE
- showLedError = true;
- loggerNl(serialDebug, (char *) FPSTR(unableToStartFtpServer), LOGLEVEL_ERROR);
- #endif
- }
- #endif
- break;
- }
+ #ifdef FTP_ENABLE
+ case ENABLE_FTP_SERVER: {
+ if (wifiManager() == WL_CONNECTED && !ftpEnableLastStatus && !ftpEnableCurrentStatus) {
+ ftpEnableLastStatus = true;
+ #ifdef NEOPIXEL_ENABLE
+ showLedOk = true;
+ #endif
+ } else {
+ #ifdef NEOPIXEL_ENABLE
+ showLedError = true;
+ loggerNl(serialDebug, (char *) FPSTR(unableToStartFtpServer), LOGLEVEL_ERROR);
+ #endif
+ }
+ break;
+ }
+ #endif
case CMD_PLAYPAUSE: {
trackControlToQueueSender(PAUSEPLAY);
break;
@@ -3492,6 +3486,8 @@ String templateProcessor(const String& templ) {
return String(mqttPasswordLength-1);
} else if (templ == "MQTT_SERVER_LENGTH") {
return String(mqttServerLength-1);
+ } else if (templ == "MQTT_PORT") {
+ return String(mqttPort);
} else if (templ == "IPv4") {
myIP = WiFi.localIP();
snprintf(logBuf, serialLoglength, "%d.%d.%d.%d", myIP[0], myIP[1], myIP[2], myIP[3]);
@@ -3579,13 +3575,14 @@ bool processJsonRequest(char *_serialJson) {
prefsSettings.putString("mqttServer", (String) _mqttServer);
const char *_mqttUser = doc["mqtt"]["mqttUser"];
const char *_mqttPwd = doc["mqtt"]["mqttPwd"];
+ uint16_t _mqttPort = doc["mqtt"]["mqttPort"].as();
- prefsSettings.putUChar("enableMQTT", _mqttEnable);
prefsSettings.putUChar("enableMQTT", _mqttEnable);
prefsSettings.putString("mqttServer", (String) _mqttServer);
prefsSettings.putString("mqttServer", (String) _mqttServer);
prefsSettings.putString("mqttUser", (String) _mqttUser);
prefsSettings.putString("mqttPassword", (String) _mqttPwd);
+ prefsSettings.putUInt("mqttPort", _mqttPort);
if ((prefsSettings.getUChar("enableMQTT", 99) != _mqttEnable) ||
(!String(_mqttServer).equals(prefsSettings.getString("mqttServer", "-1")))) {
@@ -4102,14 +4099,16 @@ void explorerHandleListRequest(AsyncWebServerRequest *request) {
File file = root.openNextFile();
while(file) {
- JsonObject entry = obj.createNestedObject();
- convertAsciiToUtf8(file.name(), filePath);
- std::string path = filePath;
- std::string fileName = path.substr(path.find_last_of("/") + 1);
-
- entry["name"] = fileName;
- entry["dir"].set(file.isDirectory());
+ // ignore hidden folders, e.g. MacOS spotlight files
+ if (!startsWith(file.name(), (char *) "/.")) {
+ JsonObject entry = obj.createNestedObject();
+ convertAsciiToUtf8(file.name(), filePath);
+ std::string path = filePath;
+ std::string fileName = path.substr(path.find_last_of("/") + 1);
+ entry["name"] = fileName;
+ entry["dir"].set(file.isDirectory());
+ }
file = root.openNextFile();
esp_task_wdt_reset();
@@ -4728,6 +4727,16 @@ void setup() {
loggerNl(serialDebug, logBuf, LOGLEVEL_INFO);
}
+ // Get MQTT-password from NVS
+ uint32_t nvsMqttPort = prefsSettings.getUInt("mqttPort", 99999);
+ if (nvsMqttPort == 99999) {
+ prefsSettings.putUInt("mqttPort", mqttPort);
+ } else {
+ mqttPort = nvsMqttPort;
+ snprintf(logBuf, serialLoglength, "%s: %u", (char *) FPSTR(restoredMqttPortFromNvs), mqttPort);
+ loggerNl(serialDebug, logBuf, LOGLEVEL_INFO);
+ }
+
#ifdef MEASURE_BATTERY_VOLTAGE
// Get voltages from NVS for Neopixel
float vLowIndicator = prefsSettings.getFloat("vIndicatorLow", 999.99);
@@ -4816,7 +4825,7 @@ void setup() {
// Only enable MQTT if requested
#ifdef MQTT_ENABLE
if (enableMqtt) {
- MQTTclient.setServer(mqtt_server, 1883);
+ MQTTclient.setServer(mqtt_server, mqttPort);
MQTTclient.setCallback(callback);
}
#endif