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);\