In diesem Artikel zeige ich Dir, wie Du beim Zugriff auf einen MQTT-Server den Port sowie die Anmeldung über Benutzername und Passwort steuern kannst.
Ich wurde in letzter Zeit öfters gefragt, wie man einen Arduino-Sketch anpassen muss, bei dem der MQTT-Broker eine Authentifizierung per Benutzername und Passwort verlangt. Im folgenden Beispiel zeige ich Dir einen kleinen Sketch, bei dem sich der MQTT-Client an einen Server per Benutzername und Passwort authentifiziert. Ich habe für das leichtere Verständnis die wirklich relevanten Stellen farblich markiert.
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <time.h>
WiFiClient espClient;
PubSubClient client(espClient);
char* clientId = "clientABC";
const char* wifi_ssid = "<WIFI-SSID>";
const char* wifi_password = "<WIFI-PWD>";
const char* mqtt_server = "192.168.2.90";
const int mqtt_port = 1883;
const char* mqtt_user = "user";
const char* mqtt_password = "pwd";
char tmp[50];
char time_value[20];
unsigned long int currentMillis = millis();
const unsigned long period = 10000; // führe nach x nochmals ein Event aus
void connectToMQTT() {
client.setServer(mqtt_server, mqtt_port);//MQTT Server, - Port
if (client.connect(clientId , mqtt_user, mqtt_password)) {
Serial.println("connected");
}
}
void setup() {
// WIFI-Verbindung aufbauen
WiFi.begin(wifi_ssid, wifi_password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
// Aktuelle Uhrzeit über den Zeitserver ermitteln
configTime(2 * 3600, 0, "0.de.pool.ntp.org", "ptbtime1.ptb.de");
delay(1000);
time_t now = time(nullptr);
String time = String(ctime(&now));
time.trim();
time.substring(0,19).toCharArray(time_value, 20);
connectToMQTT();
long rssi = WiFi.RSSI();
itoa(rssi,tmp,10);
client.publish("Klingelsensor/rssi", tmp);
client.publish("Klingelsensor/pressed", "on");
client.publish("Klingelsensor/time", time_value);
delay(3000);
ESP.deepSleep(0);
}
void loop() { }
Im Beispiel nutze ich folgende MQTT relevante Bibliotheken:
PubSubClient by Nicj O´Leary Version 2.0.7
Weitere Informationen und Hinweise zur Nutzung von PubSubClient:
- Eindeutige ClientID
Bitte achtet unbedingt darauf, dass jeder Client eine eindeutige ClientID im Quelltext besitzt. Doppelte ClientIDs sorgen für Probleme beim Publish.
Ich hoffe Dir gefällt der Artikel. Über Kommentare, Anregungen oder Ideen freue ich mich wie immer 🙂