From 9f47db56b0ffddd65b4411378b0aa0aaa5e0cf6c Mon Sep 17 00:00:00 2001 From: Torsten Stauder Date: Fri, 9 Oct 2020 12:08:38 +0200 Subject: [PATCH] MQTT: uname/pwd-support added (thanks to andi3000) --- .DS_Store | Bin 10244 -> 0 bytes html/website.html | 8 ++++++- platformio.ini | 10 ++++++--- src/logmessages.h | 6 +++++ src/main.cpp | 56 +++++++++++++++++++++++++++++++++++++++++++--- src/websiteMgmt.h | 8 ++++++- 6 files changed, 80 insertions(+), 8 deletions(-) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index df743f2d54406b18decf5096517174e8735c0de1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10244 zcmeHMYit!o6h5adu(M0)w!GgL3Z<1&Zo$&>D18IvAxK*&&vGA2yLx-?L5BwKAK%C8sqDkr2t_NHXxE|>70M8E|y0|QNWVe(ebx!r;mXdm?pqxrlPDN*nfpR+OJ*UD;OG5^1lqeRkZc z^u@OD);gcv;&<-rBau+gz0beFG}@c=QB{$!?K8thOiVU|1`XM|(F_M8?Uj*uIB1FI z)X5IUn8KR$v7Mbo-i7&|h4Z`eJ)I@R#rd8E-g#YJOc^_~u(WnZYsa3>yznlzW|n)EC_ ze{Iw@BVlWU5wl2=#YfY}Ov#>=U$|g#dCmC|8G0rg$wqH%GcD5}G8)>=pxv^`X9bLK z& zHArTxi3Ir*gQ7?CXgP|qh3l(g2Gvr{^0e7Z_bK%jnIa!iz`RViSpDtvIpx&(tVq#= ztRdv{8zHGGVT%-f72DV*?Ul+>R;FZPK5Gm_T3g8;OR6iiYDGV#Z0GM@?X&E)Q6o&R z7uI>S6^gQn_f!OfMlicPSAK5cfb4RwZ0Vd##zQ_Vh4ru*0uY9Fcn}_fhhaZF124ca zcm>{s_vw)812_$5;dA%~zK5UT7x)c+hrdxlh8hmX@i-l`aRz#EAuhrtSc;Xn3RmMT zxEAYi8*axP=)-1=;x4q%#=UqC-i!P20el<};vswvpU0Q+b$kO);5&E*&*4S+3sVws zT_f9x8o#8wo^T|%I>%`#+xvyW}K#1>mDGKR(PnbA~X$^!cV|Q`{BrvWI;|NkXIwp9gX`0TVBbzgGsF_0O zmd%@HYfMii>@qQUu9s>05Q3@fy}5`nJ&kZIdlxRE-l2q8*}JridVxop?5@h8XQ9Fd zz~3O~I}AtR1iVMMI}4w{SMV+T2!9gdhF}JcCA>|-$v6dPVII!Le4K*|u!NAen6Oua z%dr+$68`FO12*C&+>8M<2z@PRVvNw&hV8f;@5H+agZJV6_$Z<9349Wt#Un|mt4-id zN<7vZb!~OAa3~UPCLKqq0#Pt2hHQvK3=FU?LlVlhA_;bNNurOPq2|Im%1lw|BT@Gq zGbo{`f>6|cQ~p(@ls<%|V?T_NHBwc3F~>k5C1SA$>m&XhqfGT^>LqbZ@yA47pW)H8 z-l>4XlBbZ|JWUl@K}06k%qdV+ksL%ca?QN?swR_$h*z#EE>X2a@(^Lll}k!httSh~ zyuj5Jm7126lM+c{1o7OJFbWePT|m2_de}-q5QPpR6iz3Pz(IHsj>Bv47SYKW_=p1g z99*Qp{(K3F1x>(7Uh$ zJBd!ZD3tf(V5=wut9fVj2wl&L^UoY5R8)nfa zsZ$ahk{k$<^iydMq#bpk$tR@6XV%b7Cl*DqISk`c2>A<@jV%gV&$HRCu z34Q$$OCR*LMyjiwe+dT4{`1yB@eP zJdi5Q^ziflnt}iSzcHNQTIqV=2K4}@Ro7KllJSXCiDW 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);\