MQTT-Protokoll

Leichtgewichtiges Publish-Subscribe-Messaging-Protokoll für IoT und ressourcenbeschränkte Geräte. Volle Unterstützung der MQTT-3.1.1- und MQTT-5.0-Spezifikationen.

MQTT-Subprotokoll-Client

Leichtgewichtiges Publish-Subscribe-Messaging für IoT und ressourcenbeschränkte Geräte. Volle MQTT-3.1.1- und MQTT-5.0-Unterstützung über WebSocket oder Raw-TCP.

Komponentenklasse

TsgcWSPClient_MQTT

Protokoll

MQTT 3.1.1 & MQTT 5.0

Plattformen

Windows, macOS, Linux, iOS, Android

Edition

Standard / Professional / Enterprise

Komponente einfügen, ein paar Eigenschaften setzen, los geht's

Kombiniere einen TsgcWebSocketClient mit TsgcWSPClient_MQTT, verdrahte OnMQTTConnect/OnMQTTPublish und nutze Subscribe und Publish.

uses
  sgcWebSocket, sgcWebSocket_Protocol_MQTT_Client,
  sgcWebSocket_Protocol_MQTT_Message;

var
  WSClient: TsgcWebSocketClient;
  MQTT: TsgcWSPClient_MQTT;
begin
  WSClient := TsgcWebSocketClient.Create(nil);
  WSClient.Host := 'www.esegece.com';
  WSClient.Port := 15675;

  MQTT := TsgcWSPClient_MQTT.Create(nil);
  MQTT.Client := WSClient;
  MQTT.Authentication.Enabled  := True;
  MQTT.Authentication.UserName := 'sgc';
  MQTT.Authentication.Password := 'sgc';

  MQTT.OnMQTTConnect := MQTTConnect;
  MQTT.OnMQTTPublish := MQTTPublish;

  WSClient.Active := True;
end;

procedure TForm1.MQTTConnect(Connection: TsgcWSConnection;
  const Session: Boolean; const ReasonCode: Integer;
  const ReasonName: string;
  const ConnectProperties: TsgcWSMQTTCONNACKProperties);
begin
  MQTT.Subscribe('sensors/temperature/#');
end;

procedure TForm1.MQTTPublish(Connection: TsgcWSConnection;
  aTopic, aText: string;
  PublishProperties: TsgcWSMQTTPublishProperties);
begin
  Memo1.Lines.Add(aTopic + ': ' + aText);
end;

// Eine retained Nachricht mit QoS 1 veröffentlichen
MQTT.Publish('sensors/temperature/room1',
  '{"value":22.5,"unit":"C"}', mtqsAtLeastOnce, True);
// uses: sgcWebSocket, sgcWebSocket_Protocol_MQTT_Client
TsgcWebSocketClient *WSClient = new TsgcWebSocketClient(this);
WSClient->Host = "www.esegece.com";
WSClient->Port = 15675;

TsgcWSPClient_MQTT *MQTT = new TsgcWSPClient_MQTT(this);
MQTT->Client = WSClient;
MQTT->Authentication->Enabled  = true;
MQTT->Authentication->UserName = "sgc";
MQTT->Authentication->Password = "sgc";

MQTT->OnMQTTConnect = MQTTConnect;
MQTT->OnMQTTPublish = MQTTPublish;

WSClient->Active = true;

void __fastcall TForm1::MQTTPublish(TsgcWSConnection *Connection,
    UnicodeString aTopic, UnicodeString aText,
    TsgcWSMQTTPublishProperties PublishProperties)
{
  Memo1->Lines->Add(aTopic + ": " + aText);
}

MQTT->Publish("sensors/temperature/room1",
  "{\"value\":22.5,\"unit\":\"C\"}", mtqsAtLeastOnce, true);
using esegece.sgcWebSockets;

var WSClient = new TsgcWebSocketClient();
WSClient.Options.Parameters = "/ws";

var MQTT = new TsgcWSPClient_MQTT();
MQTT.Client = WSClient;
MQTT.Authentication.Enabled  = true;
MQTT.Authentication.UserName = "sgc";
MQTT.Authentication.Password = "sgc";
MQTT.HeartBeat.Enabled  = true;
MQTT.HeartBeat.Interval = 5;

MQTT.OnMQTTConnect += (conn, session, code, name, props) => MQTT.Subscribe("sensors/temperature/#");
MQTT.OnMQTTPublish += (conn, topic, text, props) => Console.WriteLine(topic + ": " + text);

WSClient.Host = "www.esegece.com";
WSClient.Port = 15675;
WSClient.Active = true;

MQTT.Publish("sensors/temperature/room1",
  "{\"value\":22.5,\"unit\":\"C\"}", TmqttQoS.mtqsAtLeastOnce, true);

Was steckt drin

10 veröffentlichte Eigenschaften, 9 Methoden und 13 Ereignisse — abgeglichen mit der TsgcWSPClient_MQTT-Referenz.

Protokollversionen

MQTTVersion wählt die im CONNECT-Paket angekündigte Stufe — MQTT 3.1.1 oder MQTT 5.0. ConnectProperties trägt die MQTT-5-Felder Session-Expiry, Receive-Maximum, Packet-Size, Topic-Alias und Extended-Auth.

WebSocket oder Raw-TCP

Verbinde die Client-Eigenschaft mit einem TsgcWebSocketClient, um MQTT über WebSockets zu fahren, oder mit einem TsgcWSMQTTBroker über Broker, um den nativen TCP-Transport auf Port 1883/8883 zu nutzen.

QoS & Retain

Veröffentliche mit QoS 0, 1 oder 2 mit optionalem Retain. Die QoS-Eigenschaft steuert Standardstufe, Retry-Intervall und Timeout. PublishAndWait blockiert bis zur Bestätigung durch den Broker — nützlich für transaktionale Publishes.

Last Will & Testament

LastWillTestament registriert Topic, Payload, QoS und Retain-Flag, die der Broker im Namen dieses Clients veröffentlicht, falls die Verbindung unsauber abbricht — ein sauberer Weg, Geräte-Disconnects zu signalisieren.

Abonnements & Ereignisse

Subscribe/UnSubscribe akzeptieren Topic-Filter mit +- und #-Wildcards. OnMQTTPublish liefert eingehende Nachrichten; OnMQTTPublishEx liefert Rohbytes/Stream. Der vollständige QoS-2-Handshake wird über OnMQTTPubRec, OnMQTTPubRel, OnMQTTPubComp bereitgestellt.

Keep-Alive & Auth

HeartBeat sendet PINGREQ per Timer und erkennt stille Broker-Aussetzer. Authentication sendet UserName/Password im CONNECT. MQTT-5 Enhanced Auth: Rufe Auth auf und behandle OnMQTTAuth für SCRAM-artige Challenges.

Spezifikationen & Referenzen

Maßgebliche Quellen für die Protokolle, die diese Komponente implementiert.

Dokumentation & Demos

Springe direkt zur Komponentenreferenz, lade das einsatzbereite Demo-Projekt herunter und teste die Testversion.

Online-Hilfe — Protocol_MQTT Vollständige Eigenschaften-, Methoden- und Ereignisreferenz für diese Komponente.
Demo Project — Demos\Protocols\MQTT Einsatzbereites Beispielprojekt. Im sgcWebSockets-Paket enthalten — lade unten die Testversion herunter.
Technisches Dokument (PDF) Funktionen, Schnellstart, Codebeispiele für Delphi, C++ Builder und .NET und Primärquellenreferenzen — nur für diese Komponente.
Benutzerhandbuch (PDF) Umfassendes Handbuch zu jeder Komponente der Bibliothek.

Bereit, mit MQTT zu starten?

Lade die kostenlose Testversion herunter und baue in wenigen Minuten IoT-Messaging-Lösungen.