diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index df743f2..0000000 Binary files a/.DS_Store and /dev/null differ diff --git a/html/website.html b/html/website.html index 28d8def..1a9c57e 100644 --- a/html/website.html +++ b/html/website.html @@ -135,6 +135,10 @@
Bitte eine gültige IPv4-Adresse eingeben, z.B. 192.168.2.89.
+ + + + @@ -294,7 +298,9 @@ var myObj = { "mqtt": { mqttEnable: val, - mqttServer: document.getElementById('mqttServer').value + mqttServer: document.getElementById('mqttServer').value, + mqttUser: document.getElementById('mqttUser').value, + mqttPwd: document.getElementById('mqttPwd').value } }; var myJSON = JSON.stringify(myObj); diff --git a/platformio.ini b/platformio.ini index 09a0f65..70d370a 100644 --- a/platformio.ini +++ b/platformio.ini @@ -8,12 +8,16 @@ ; Please visit documentation for the other options and examples ; https://docs.platformio.org/page/projectconf.html -[env:nodemcu-32s] +;[env:nodemcu-32s] +[env:lolin32] platform = espressif32 -board = nodemcu-32s +;board = nodemcu-32s +board = lolin32 framework = arduino monitor_speed = 115200 -board_build.partitions = no_ota.csv +;board_build.partitions = no_ota.csv +board_build.partitions = min_spiffs.csv + lib_deps = https://github.com/schreibfaul1/ESP32-audioI2S.git diff --git a/src/logmessages.h b/src/logmessages.h index 2800be7..cccb45b 100644 --- a/src/logmessages.h +++ b/src/logmessages.h @@ -125,6 +125,12 @@ static const char loadedMqttActiveFromNvs[] PROGMEM = "MQTT-Flag (aktiviert) wur static const char loadedMqttDeactiveFromNvs[] PROGMEM = "MQTT-Flag (deaktiviert) wurde aus NVS geladen"; static const char wroteMqttServerToNvs[] PROGMEM = "MQTT-Server wurde ins NVS geschrieben."; static const char loadedMqttServerFromNvs[] PROGMEM = "MQTT-Server wurde aus NVS geladen"; +static const char wroteMqttUserToNvs[] PROGMEM = "MQTT-User wurde ins NVS geschrieben."; +static const char loadedMqttUserFromNvs[] PROGMEM = "MQTT-User wurde aus NVS geladen"; +static const char wroteMqttPwdToNvs[] PROGMEM = "MQTT-Passwort wurde ins NVS geschrieben."; +static const char loadedMqttPwdFromNvs[] PROGMEM = "MQTT-Passwort 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."; static const char wifiPwdNotFoundInNvs[] PROGMEM = "WLAN-Passwort wurde im NVS nicht gefunden."; static const char mqttConnFailed[] PROGMEM = "Verbindung fehlgeschlagen, versuche erneut in Kürze erneut"; diff --git a/src/main.cpp b/src/main.cpp index a077960..3c1f0a8 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -171,6 +171,7 @@ bool enableMqtt = true; uint8_t const stillOnlineInterval = 60; // Interval 'I'm still alive' is sent via MQTT (in seconds) #endif // RFID +#define RFID_SCAN_INTERVAL 300 //in ms uint8_t const cardIdSize = 4; // RFID // Volume uint8_t maxVolume = 21; // Maximum volume that can be adjusted @@ -231,6 +232,8 @@ bool accessPointStarted = false; // MQTT-configuration char mqtt_server[16] = "192.168.2.43"; // IP-address of MQTT-server (if not found in NVS this one will be taken) +char mqttUser[15] = "mqtt-user"; // MQTT-user +char mqttPassword[15] = "mqtt-password"; // MQTT-password #ifdef MQTT_ENABLE #define DEVICE_HOSTNAME "ESP32-Tonuino" // Name that that is used for MQTT static const char topicSleepCmnd[] PROGMEM = "Cmnd/Tonuino/Sleep"; @@ -571,13 +574,25 @@ void postHeartbeatViaMqtt(void) { */ bool reconnect() { uint8_t maxRetries = 10; + uint8_t connect = false; while (!MQTTclient.connected() && mqttFailCount < maxRetries) { snprintf(logBuf, sizeof(logBuf) / sizeof(logBuf[0]), "%s %s", (char *) FPSTR(tryConnectMqttS), mqtt_server); loggerNl(logBuf, LOGLEVEL_NOTICE); - // Try to connect to MQTT-server - if (MQTTclient.connect(DEVICE_HOSTNAME)) { + // Try to connect to MQTT-server. If username AND password are set, they'll be used + if (strlen(mqttUser) < 1 || strlen(mqttPassword) < 1) { + loggerNl((char *) FPSTR(mqttWithoutPwd), LOGLEVEL_NOTICE); + if (MQTTclient.connect(DEVICE_HOSTNAME)) { + connect = true; + } + } else { + loggerNl((char *) FPSTR(mqttWithPwd), LOGLEVEL_NOTICE); + if (MQTTclient.connect(DEVICE_HOSTNAME, mqttUser, mqttPassword)) { + connect = true; + } + } + if (connect) { loggerNl((char *) FPSTR(mqttOk), LOGLEVEL_NOTICE); // Deepsleep-subscription @@ -1465,7 +1480,7 @@ void rfidScanner(void *parameter) { for (;;) { esp_task_wdt_reset(); vTaskDelay(10); - if ((millis() - lastRfidCheckTimestamp) >= 300) { + if ((millis() - lastRfidCheckTimestamp) >= RFID_SCAN_INTERVAL) { lastRfidCheckTimestamp = millis(); // Reset the loop if no new card is present on the sensor/reader. This saves the entire process when idle. @@ -2594,6 +2609,10 @@ String templateProcessor(const String& templ) { } else { return String(); } + } else if (templ == "MQTT_USER") { + return prefsSettings.getString("mqttUser", "-1"); + } else if (templ == "MQTT_PWD") { + return prefsSettings.getString("mqttPassword", "-1"); } else if (templ == "IPv4") { myIP = WiFi.localIP(); snprintf(logBuf, sizeof(logBuf) / sizeof(logBuf[0]), "%d.%d.%d.%d", myIP[0], myIP[1], myIP[2], myIP[3]); @@ -2660,6 +2679,15 @@ bool processJsonRequest(char *_serialJson) { const char *_mqttServer = object["mqtt"]["mqttServer"]; prefsSettings.putUChar("enableMQTT", _mqttEnable); prefsSettings.putString("mqttServer", (String) _mqttServer); + const char *_mqttUser = doc["mqtt"]["mqttUser"]; + const char *_mqttPwd = doc["mqtt"]["mqttPwd"]; + + 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); if ((prefsSettings.getUChar("enableMQTT", 99) != _mqttEnable) || (!String(_mqttServer).equals(prefsSettings.getString("mqttServer", "-1")))) { @@ -3082,6 +3110,7 @@ void setup() { loggerNl(logBuf, LOGLEVEL_INFO); break; } + // Get MQTT-server from NVS String nvsMqttServer = prefsSettings.getString("mqttServer", "-1"); if (!nvsMqttServer.compareTo("-1")) { @@ -3093,6 +3122,27 @@ void setup() { loggerNl(logBuf, LOGLEVEL_INFO); } + // Get MQTT-user from NVS + String nvsMqttUser = prefsSettings.getString("mqttUser", "-1"); + if (!nvsMqttUser.compareTo("-1")) { + prefsSettings.putString("mqttUser", (String) mqttUser); + loggerNl((char *) FPSTR(wroteMqttUserToNvs), LOGLEVEL_ERROR); + } else { + strncpy(mqttUser, nvsMqttUser.c_str(), sizeof(mqttUser)/sizeof(mqttUser[0])); + snprintf(logBuf, sizeof(logBuf) / sizeof(logBuf[0]), "%s: %s", (char *) FPSTR(loadedMqttUserFromNvs), nvsMqttUser.c_str()); + loggerNl(logBuf, LOGLEVEL_INFO); + } + + // Get MQTT-password from NVS + String nvsMqttPassword = prefsSettings.getString("mqttPassword", "-1"); + if (!nvsMqttPassword.compareTo("-1")) { + prefsSettings.putString("mqttPassword", (String) mqttPassword); + loggerNl((char *) FPSTR(wroteMqttPwdToNvs), LOGLEVEL_ERROR); + } else { + strncpy(mqttPassword, nvsMqttPassword.c_str(), sizeof(mqttPassword)/sizeof(mqttPassword[0])); + snprintf(logBuf, sizeof(logBuf) / sizeof(logBuf[0]), "%s: %s", (char *) FPSTR(loadedMqttPwdFromNvs), nvsMqttPassword.c_str()); + loggerNl(logBuf, LOGLEVEL_INFO); + } // Create 1000Hz-HW-Timer (currently only used for buttons) timerSemaphore = xSemaphoreCreateBinary(); diff --git a/src/websiteMgmt.h b/src/websiteMgmt.h index f6694d4..518c46c 100644 --- a/src/websiteMgmt.h +++ b/src/websiteMgmt.h @@ -135,6 +135,10 @@ static const char mgtWebsite[] PROGMEM = "\
\ Bitte eine gültige IPv4-Adresse eingeben, z.B. 192.168.2.89.\
\ + \ + \ + \ + \ \ \ \ @@ -294,7 +298,9 @@ static const char mgtWebsite[] PROGMEM = "\ var myObj = {\ \"mqtt\": {\ mqttEnable: val,\ - mqttServer: document.getElementById('mqttServer').value\ + mqttServer: document.getElementById('mqttServer').value,\ + mqttUser: document.getElementById('mqttUser').value,\ + mqttPwd: document.getElementById('mqttPwd').value\ }\ };\ var myJSON = JSON.stringify(myObj);\