smarthome-tricks.de

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:

Ich hoffe Dir gefällt der Artikel. Über Kommentare, Anregungen oder Ideen freue ich mich wie immer 🙂

Die mobile Version verlassen