Browse Source

MQTT: uname/pwd-support added (thanks to andi3000)

master
Torsten Stauder 5 years ago
parent
commit
9f47db56b0
  1. BIN
      .DS_Store
  2. 8
      html/website.html
  3. 10
      platformio.ini
  4. 6
      src/logmessages.h
  5. 54
      src/main.cpp
  6. 8
      src/websiteMgmt.h

BIN
.DS_Store

8
html/website.html

@ -135,6 +135,10 @@
<div class="invalid-feedback"> <div class="invalid-feedback">
Bitte eine gültige IPv4-Adresse eingeben, z.B. 192.168.2.89. Bitte eine gültige IPv4-Adresse eingeben, z.B. 192.168.2.89.
</div> </div>
<label for="mqttUser">MQTT-Benutzername (optional):</label>
<input type="text" class="form-control" id="mqttUser" maxlength="15" placeholder="Benutzername" name="mqttUser" value="%MQTT_USER%">
<label for="mqttPwd">Passwort (optional):</label>
<input type="password" class="form-control" id="mqttPwd" maxlength="15" placeholder="Passwort" name="mqttPwd" value="%MQTT_PWD%">
</div> </div>
<button type="reset" class="btn btn-secondary">Reset</button> <button type="reset" class="btn btn-secondary">Reset</button>
<button type="submit" class="btn btn-primary">Absenden</button> <button type="submit" class="btn btn-primary">Absenden</button>
@ -294,7 +298,9 @@
var myObj = { var myObj = {
"mqtt": { "mqtt": {
mqttEnable: val, 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); var myJSON = JSON.stringify(myObj);

10
platformio.ini

@ -8,12 +8,16 @@
; Please visit documentation for the other options and examples ; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html ; https://docs.platformio.org/page/projectconf.html
[env:nodemcu-32s]
;[env:nodemcu-32s]
[env:lolin32]
platform = espressif32 platform = espressif32
board = nodemcu-32s
;board = nodemcu-32s
board = lolin32
framework = arduino framework = arduino
monitor_speed = 115200 monitor_speed = 115200
board_build.partitions = no_ota.csv
;board_build.partitions = no_ota.csv
board_build.partitions = min_spiffs.csv
lib_deps = lib_deps =
https://github.com/schreibfaul1/ESP32-audioI2S.git https://github.com/schreibfaul1/ESP32-audioI2S.git

6
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 loadedMqttDeactiveFromNvs[] PROGMEM = "MQTT-Flag (deaktiviert) wurde aus NVS geladen";
static const char wroteMqttServerToNvs[] PROGMEM = "MQTT-Server wurde ins NVS geschrieben."; 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 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 ssidNotFoundInNvs[] PROGMEM = "SSID wurde im NVS nicht gefunden.";
static const char wifiPwdNotFoundInNvs[] PROGMEM = "WLAN-Passwort 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"; static const char mqttConnFailed[] PROGMEM = "Verbindung fehlgeschlagen, versuche erneut in Kürze erneut";

54
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) uint8_t const stillOnlineInterval = 60; // Interval 'I'm still alive' is sent via MQTT (in seconds)
#endif #endif
// RFID // RFID
#define RFID_SCAN_INTERVAL 300 //in ms
uint8_t const cardIdSize = 4; // RFID uint8_t const cardIdSize = 4; // RFID
// Volume // Volume
uint8_t maxVolume = 21; // Maximum volume that can be adjusted uint8_t maxVolume = 21; // Maximum volume that can be adjusted
@ -231,6 +232,8 @@ bool accessPointStarted = false;
// MQTT-configuration // 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 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 #ifdef MQTT_ENABLE
#define DEVICE_HOSTNAME "ESP32-Tonuino" // Name that that is used for MQTT #define DEVICE_HOSTNAME "ESP32-Tonuino" // Name that that is used for MQTT
static const char topicSleepCmnd[] PROGMEM = "Cmnd/Tonuino/Sleep"; static const char topicSleepCmnd[] PROGMEM = "Cmnd/Tonuino/Sleep";
@ -571,13 +574,25 @@ void postHeartbeatViaMqtt(void) {
*/ */
bool reconnect() { bool reconnect() {
uint8_t maxRetries = 10; uint8_t maxRetries = 10;
uint8_t connect = false;
while (!MQTTclient.connected() && mqttFailCount < maxRetries) { while (!MQTTclient.connected() && mqttFailCount < maxRetries) {
snprintf(logBuf, sizeof(logBuf) / sizeof(logBuf[0]), "%s %s", (char *) FPSTR(tryConnectMqttS), mqtt_server); snprintf(logBuf, sizeof(logBuf) / sizeof(logBuf[0]), "%s %s", (char *) FPSTR(tryConnectMqttS), mqtt_server);
loggerNl(logBuf, LOGLEVEL_NOTICE); loggerNl(logBuf, LOGLEVEL_NOTICE);
// Try to connect to MQTT-server
// 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)) { 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); loggerNl((char *) FPSTR(mqttOk), LOGLEVEL_NOTICE);
// Deepsleep-subscription // Deepsleep-subscription
@ -1465,7 +1480,7 @@ void rfidScanner(void *parameter) {
for (;;) { for (;;) {
esp_task_wdt_reset(); esp_task_wdt_reset();
vTaskDelay(10); vTaskDelay(10);
if ((millis() - lastRfidCheckTimestamp) >= 300) {
if ((millis() - lastRfidCheckTimestamp) >= RFID_SCAN_INTERVAL) {
lastRfidCheckTimestamp = millis(); lastRfidCheckTimestamp = millis();
// Reset the loop if no new card is present on the sensor/reader. This saves the entire process when idle. // 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 { } else {
return String(); 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") { } else if (templ == "IPv4") {
myIP = WiFi.localIP(); myIP = WiFi.localIP();
snprintf(logBuf, sizeof(logBuf) / sizeof(logBuf[0]), "%d.%d.%d.%d", myIP[0], myIP[1], myIP[2], myIP[3]); 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"]; const char *_mqttServer = object["mqtt"]["mqttServer"];
prefsSettings.putUChar("enableMQTT", _mqttEnable); prefsSettings.putUChar("enableMQTT", _mqttEnable);
prefsSettings.putString("mqttServer", (String) _mqttServer); 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) || if ((prefsSettings.getUChar("enableMQTT", 99) != _mqttEnable) ||
(!String(_mqttServer).equals(prefsSettings.getString("mqttServer", "-1")))) { (!String(_mqttServer).equals(prefsSettings.getString("mqttServer", "-1")))) {
@ -3082,6 +3110,7 @@ void setup() {
loggerNl(logBuf, LOGLEVEL_INFO); loggerNl(logBuf, LOGLEVEL_INFO);
break; break;
} }
// Get MQTT-server from NVS // Get MQTT-server from NVS
String nvsMqttServer = prefsSettings.getString("mqttServer", "-1"); String nvsMqttServer = prefsSettings.getString("mqttServer", "-1");
if (!nvsMqttServer.compareTo("-1")) { if (!nvsMqttServer.compareTo("-1")) {
@ -3093,6 +3122,27 @@ void setup() {
loggerNl(logBuf, LOGLEVEL_INFO); 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) // Create 1000Hz-HW-Timer (currently only used for buttons)
timerSemaphore = xSemaphoreCreateBinary(); timerSemaphore = xSemaphoreCreateBinary();

8
src/websiteMgmt.h

@ -135,6 +135,10 @@ static const char mgtWebsite[] PROGMEM = "<!DOCTYPE html>\
<div class=\"invalid-feedback\">\ <div class=\"invalid-feedback\">\
Bitte eine gültige IPv4-Adresse eingeben, z.B. 192.168.2.89.\ Bitte eine gültige IPv4-Adresse eingeben, z.B. 192.168.2.89.\
</div>\ </div>\
<label for=\"mqttUser\">MQTT-Benutzername (optional):</label>\
<input type=\"text\" class=\"form-control\" id=\"mqttUser\" maxlength=\"15\" placeholder=\"Benutzername\" name=\"mqttUser\" value=\"%MQTT_USER%\">\
<label for=\"mqttPwd\">Passwort (optional):</label>\
<input type=\"password\" class=\"form-control\" id=\"mqttPwd\" maxlength=\"15\" placeholder=\"Passwort\" name=\"mqttPwd\" value=\"%MQTT_PWD%\">\
</div>\ </div>\
<button type=\"reset\" class=\"btn btn-secondary\">Reset</button>\ <button type=\"reset\" class=\"btn btn-secondary\">Reset</button>\
<button type=\"submit\" class=\"btn btn-primary\">Absenden</button>\ <button type=\"submit\" class=\"btn btn-primary\">Absenden</button>\
@ -294,7 +298,9 @@ static const char mgtWebsite[] PROGMEM = "<!DOCTYPE html>\
var myObj = {\ var myObj = {\
\"mqtt\": {\ \"mqtt\": {\
mqttEnable: val,\ 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);\ var myJSON = JSON.stringify(myObj);\

Loading…
Cancel
Save