Browse Source

Favicon, MQTT-port (#92), .-Filter for / in webgui

master
Torsten Stauder 4 years ago
parent
commit
4a0729a5d1
  1. 7
      html/management.html
  2. 7
      src/HTMLmanagement.h
  3. 1
      src/logmessages.h
  4. 1
      src/logmessages_EN.h
  5. 39
      src/main.cpp

7
html/management.html

@ -4,6 +4,7 @@
<title>ESPuino-Konfiguration</title> <title>ESPuino-Konfiguration</title>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" type="image/x-icon" href="https://espuino.de/espuino/favicon.ico">
<link rel="stylesheet" href="https://espuino.de/espuino/css/bootstrap.min.css"> <link rel="stylesheet" href="https://espuino.de/espuino/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/themes/default/style.min.css"/> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/themes/default/style.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css"/> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css"/>
@ -326,6 +327,9 @@
<label for="mqttPwd">MQTT-Passwort (optional):</label> <label for="mqttPwd">MQTT-Passwort (optional):</label>
<input type="password" class="form-control" id="mqttPwd" maxlength="%MQTT_PWD_LENGTH%" <input type="password" class="form-control" id="mqttPwd" maxlength="%MQTT_PWD_LENGTH%"
placeholder="Passwort" name="mqttPwd" value="%MQTT_PWD%"> placeholder="Passwort" name="mqttPwd" value="%MQTT_PWD%">
<label for="mqttPort">MQTT-Port:</label>
<input type="number" class="form-control" id="mqttPort" min="1" max="65535"
placeholder="Port" name="mqttPort" value="%MQTT_PORT%" required>
</div> </div>
<br> <br>
<div class="text-center"> <div class="text-center">
@ -1024,7 +1028,8 @@
mqttEnable: val, mqttEnable: val,
mqttServer: document.getElementById('mqttServer').value, mqttServer: document.getElementById('mqttServer').value,
mqttUser: document.getElementById('mqttUser').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); var myJSON = JSON.stringify(myObj);

7
src/HTMLmanagement.h

@ -4,6 +4,7 @@ static const char management_HTML[] PROGMEM = "<!DOCTYPE html>\
<title>ESPuino-Konfiguration</title>\ <title>ESPuino-Konfiguration</title>\
<meta charset=\"utf-8\">\ <meta charset=\"utf-8\">\
<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\ <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\
<link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"https://espuino.de/espuino/favicon.ico\">\
<link rel=\"stylesheet\" href=\"https://espuino.de/espuino/css/bootstrap.min.css\">\ <link rel=\"stylesheet\" href=\"https://espuino.de/espuino/css/bootstrap.min.css\">\
<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/themes/default/style.min.css\"/>\ <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/themes/default/style.min.css\"/>\
<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css\"/>\ <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css\"/>\
@ -326,6 +327,9 @@ static const char management_HTML[] PROGMEM = "<!DOCTYPE html>\
<label for=\"mqttPwd\">MQTT-Passwort (optional):</label>\ <label for=\"mqttPwd\">MQTT-Passwort (optional):</label>\
<input type=\"password\" class=\"form-control\" id=\"mqttPwd\" maxlength=\"%MQTT_PWD_LENGTH%\"\ <input type=\"password\" class=\"form-control\" id=\"mqttPwd\" maxlength=\"%MQTT_PWD_LENGTH%\"\
placeholder=\"Passwort\" name=\"mqttPwd\" value=\"%MQTT_PWD%\">\ placeholder=\"Passwort\" name=\"mqttPwd\" value=\"%MQTT_PWD%\">\
<label for=\"mqttPort\">MQTT-Port:</label>\
<input type=\"number\" class=\"form-control\" id=\"mqttPort\" min=\"1\" max=\"65535\"\
placeholder=\"Port\" name=\"mqttPort\" value=\"%MQTT_PORT%\" required>\
</div>\ </div>\
<br>\ <br>\
<div class=\"text-center\">\ <div class=\"text-center\">\
@ -1024,7 +1028,8 @@ static const char management_HTML[] PROGMEM = "<!DOCTYPE html>\
mqttEnable: val,\ mqttEnable: val,\
mqttServer: document.getElementById('mqttServer').value,\ mqttServer: document.getElementById('mqttServer').value,\
mqttUser: document.getElementById('mqttUser').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);\ var myJSON = JSON.stringify(myObj);\

1
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 restoredMqttUserFromNvs[] PROGMEM = "MQTT-User wurde aus NVS geladen";
static const char wroteMqttPwdToNvs[] PROGMEM = "MQTT-Passwort wurde ins NVS geschrieben."; 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 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 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 mqttWithoutPwd[] PROGMEM = "Verbinde zu MQTT-Server ohne User und Passwort";
static const char ssidNotFoundInNvs[] PROGMEM = "SSID wurde im NVS nicht gefunden."; static const char ssidNotFoundInNvs[] PROGMEM = "SSID wurde im NVS nicht gefunden.";

1
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 restoredMqttUserFromNvs[] PROGMEM = "Restored MQTT-user from NVS";
static const char wroteMqttPwdToNvs[] PROGMEM = "Stored MQTT-password to NVS."; static const char wroteMqttPwdToNvs[] PROGMEM = "Stored MQTT-password to NVS.";
static const char restoredMqttPwdFromNvs[] PROGMEM = "Restored MQTT-password from 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 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 mqttWithoutPwd[] PROGMEM = "Try to connect to MQTT-server without user und password";
static const char ssidNotFoundInNvs[] PROGMEM = "Unable to find SSID to NVS."; static const char ssidNotFoundInNvs[] PROGMEM = "Unable to find SSID to NVS.";

39
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 *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 *mqttUser = strndup((char*) "mqtt-user", mqttUserLength); // MQTT-user
char *mqttPassword = strndup((char*) "mqtt-password", mqttPasswordLength); // MQTT-password*/ 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 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 char stringOuterDelimiter[] = "^"; // Character used to encapsulate encapsulated data along with RFID-ID in backup-file
@ -341,9 +341,6 @@ QueueHandle_t explorerFileUploadStatusQueue;
// Prototypes // Prototypes
void accessPointStart(const char *SSID, IPAddress ip, IPAddress netmask); void accessPointStart(const char *SSID, IPAddress ip, IPAddress netmask);
static int arrSortHelper(const void* a, const void* b); 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 batteryVoltageTester(void);
void buttonHandler(); void buttonHandler();
void deepSleepManager(void); 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); void logger(const uint8_t _currentLogLevel, const char *str, const uint8_t _logLevel);
float measureBatteryVoltage(void); float measureBatteryVoltage(void);
#ifdef MQTT_ENABLE #ifdef MQTT_ENABLE
void callback(const char *topic, const byte *payload, uint32_t length);
bool publishMqtt(const char *topic, const char *payload, bool retained); bool publishMqtt(const char *topic, const char *payload, bool retained);
void postHeartbeatViaMqtt(void);
bool reconnect();
#endif #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); 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); 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); bool processJsonRequest(char *_serialJson);
void randomizePlaylist (char *str[], const uint32_t count); void randomizePlaylist (char *str[], const uint32_t count);
#ifdef MQTT_ENABLE
bool reconnect();
#endif
char ** returnPlaylistFromWebstream(const char *_webUrl); char ** returnPlaylistFromWebstream(const char *_webUrl);
char ** returnPlaylistFromSD(File _fileOrDirectory); char ** returnPlaylistFromSD(File _fileOrDirectory);
void rfidScanner(void *parameter); void rfidScanner(void *parameter);
@ -3045,8 +3039,8 @@ void doCmdAction(const uint16_t mod) {
break; break;
} }
#endif #endif
case ENABLE_FTP_SERVER: {
#ifdef FTP_ENABLE #ifdef FTP_ENABLE
case ENABLE_FTP_SERVER: {
if (wifiManager() == WL_CONNECTED && !ftpEnableLastStatus && !ftpEnableCurrentStatus) { if (wifiManager() == WL_CONNECTED && !ftpEnableLastStatus && !ftpEnableCurrentStatus) {
ftpEnableLastStatus = true; ftpEnableLastStatus = true;
#ifdef NEOPIXEL_ENABLE #ifdef NEOPIXEL_ENABLE
@ -3058,9 +3052,9 @@ void doCmdAction(const uint16_t mod) {
loggerNl(serialDebug, (char *) FPSTR(unableToStartFtpServer), LOGLEVEL_ERROR); loggerNl(serialDebug, (char *) FPSTR(unableToStartFtpServer), LOGLEVEL_ERROR);
#endif #endif
} }
#endif
break; break;
} }
#endif
case CMD_PLAYPAUSE: { case CMD_PLAYPAUSE: {
trackControlToQueueSender(PAUSEPLAY); trackControlToQueueSender(PAUSEPLAY);
break; break;
@ -3492,6 +3486,8 @@ String templateProcessor(const String& templ) {
return String(mqttPasswordLength-1); return String(mqttPasswordLength-1);
} else if (templ == "MQTT_SERVER_LENGTH") { } else if (templ == "MQTT_SERVER_LENGTH") {
return String(mqttServerLength-1); return String(mqttServerLength-1);
} else if (templ == "MQTT_PORT") {
return String(mqttPort);
} else if (templ == "IPv4") { } else if (templ == "IPv4") {
myIP = WiFi.localIP(); myIP = WiFi.localIP();
snprintf(logBuf, serialLoglength, "%d.%d.%d.%d", myIP[0], myIP[1], myIP[2], myIP[3]); 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); prefsSettings.putString("mqttServer", (String) _mqttServer);
const char *_mqttUser = doc["mqtt"]["mqttUser"]; const char *_mqttUser = doc["mqtt"]["mqttUser"];
const char *_mqttPwd = doc["mqtt"]["mqttPwd"]; const char *_mqttPwd = doc["mqtt"]["mqttPwd"];
uint16_t _mqttPort = doc["mqtt"]["mqttPort"].as<uint16_t>();
prefsSettings.putUChar("enableMQTT", _mqttEnable);
prefsSettings.putUChar("enableMQTT", _mqttEnable); prefsSettings.putUChar("enableMQTT", _mqttEnable);
prefsSettings.putString("mqttServer", (String) _mqttServer); prefsSettings.putString("mqttServer", (String) _mqttServer);
prefsSettings.putString("mqttServer", (String) _mqttServer); prefsSettings.putString("mqttServer", (String) _mqttServer);
prefsSettings.putString("mqttUser", (String) _mqttUser); prefsSettings.putString("mqttUser", (String) _mqttUser);
prefsSettings.putString("mqttPassword", (String) _mqttPwd); prefsSettings.putString("mqttPassword", (String) _mqttPwd);
prefsSettings.putUInt("mqttPort", _mqttPort);
if ((prefsSettings.getUChar("enableMQTT", 99) != _mqttEnable) || if ((prefsSettings.getUChar("enableMQTT", 99) != _mqttEnable) ||
(!String(_mqttServer).equals(prefsSettings.getString("mqttServer", "-1")))) { (!String(_mqttServer).equals(prefsSettings.getString("mqttServer", "-1")))) {
@ -4102,6 +4099,8 @@ void explorerHandleListRequest(AsyncWebServerRequest *request) {
File file = root.openNextFile(); File file = root.openNextFile();
while(file) { while(file) {
// ignore hidden folders, e.g. MacOS spotlight files
if (!startsWith(file.name(), (char *) "/.")) {
JsonObject entry = obj.createNestedObject(); JsonObject entry = obj.createNestedObject();
convertAsciiToUtf8(file.name(), filePath); convertAsciiToUtf8(file.name(), filePath);
std::string path = filePath; std::string path = filePath;
@ -4109,7 +4108,7 @@ void explorerHandleListRequest(AsyncWebServerRequest *request) {
entry["name"] = fileName; entry["name"] = fileName;
entry["dir"].set(file.isDirectory()); entry["dir"].set(file.isDirectory());
}
file = root.openNextFile(); file = root.openNextFile();
esp_task_wdt_reset(); esp_task_wdt_reset();
@ -4728,6 +4727,16 @@ void setup() {
loggerNl(serialDebug, logBuf, LOGLEVEL_INFO); 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 #ifdef MEASURE_BATTERY_VOLTAGE
// Get voltages from NVS for Neopixel // Get voltages from NVS for Neopixel
float vLowIndicator = prefsSettings.getFloat("vIndicatorLow", 999.99); float vLowIndicator = prefsSettings.getFloat("vIndicatorLow", 999.99);
@ -4816,7 +4825,7 @@ void setup() {
// Only enable MQTT if requested // Only enable MQTT if requested
#ifdef MQTT_ENABLE #ifdef MQTT_ENABLE
if (enableMqtt) { if (enableMqtt) {
MQTTclient.setServer(mqtt_server, 1883);
MQTTclient.setServer(mqtt_server, mqttPort);
MQTTclient.setCallback(callback); MQTTclient.setCallback(callback);
} }
#endif #endif

Loading…
Cancel
Save