PubSubClient für MQTT mit Benutzername, Passwort und Port
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 🙂
Hallo Matthias,
alles hoch interessante Themen.
Danke fürs Teilen.
Bei der NTP-Zeit interessiert mich besonders die DST Problematik.
Wir müssen uns damit wohl Noch eine Weile befassen.
Hast du dafür eine Lösung?
Andreas
Mit diesen 3 Z3il3n sollte das Sommezeit Thema gelöst sein.
#define MY_NTP_SERVER „ch.pool.ntp.org“
#define MY_TZ „CET-1CEST,M3.5.0/02,M10.5.0/03“
configTime(MY_TZ, MY_NTP_SERVER);
Gruss Dragi
Wo ich in eine gemeien Falle gelaufen bin:
Wenn 2 Clients die gleiche ClientID haben, connected der Broker zwar beide Devices, lässt aber kein „publish“ zu …
Vielleicht kannst du das anmerken ..
Moin Erik,
guter Hinweis, das werde ich gerne noch ergänzen. Danke dafür!
LG Matthias
Ich frage mich gerade, warum ich eine Woche lang jeden Tag mehrere Stunden Google bemüht habe und das ein oder andere aus diversen Beiträgen, die mir dabei angezeigt wurden, ausprobiert habe und absolut nicht zum Ziel gekommen bin.
Ich hätte mir viel Arbeit sparen können, wenn ich direkt bei Dir nachgesehen hätte.
Dein Beispiel genommen, probiert und siehe da: Es passiert genau das, was pasiieren soll.
Danke für Deine wirklichen guten Anleitungen und Beispiele.