ESP8266ESP8266 - Einführung

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 🙂

Matthias Korte

Hauptberuflich Software-Entwickler und seit einigen Jahren Smart-Home Fan. Angefangen hat alles mit einem RaspberryMatic und einer schaltbaren Steckdose. Mittlerweile habe ich einige Steckdosen, Sensoren, und Thermostate sowie ioBroker zur Visualisierung im Einsatz.

5 Gedanken zu „PubSubClient für MQTT mit Benutzername, Passwort und Port

  • 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

    Antworten
    • Dragan57

      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

      Antworten
  • Erik Moderegger

    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 ..

    Antworten
    • Matthias KorteAutor des Beitrages

      Moin Erik,

      guter Hinweis, das werde ich gerne noch ergänzen. Danke dafür!

      LG Matthias

      Antworten
  • Werner

    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.

    Antworten

Schreibe einen Kommentar zu Werner Antwort abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert