MQTT-Client-Komponente: sgcMQ | eSeGeCe

MQTT-Client

TsgcWSPClient_MQTT ist ein nativer MQTT 3.1.1- und MQTT 5.0-Client. Veröffentliche und abonniere mit QoS 0, 1 und 2, mit Retained Messages, einem Last Will and Testament, dauerhaften Sessions und den MQTT 5-Neuerungen: Reason Codes, User Properties, Topic-Aliasse, Shared Subscriptions und erweiterte Authentifizierung. Dieselbe Komponente und dieselbe API in Delphi und C++ Builder.

TsgcWSPClient_MQTT

Weise Client einen TsgcTCPClient zu, wähle die Protokollversion über MQTTVersion, verdrahte OnMQTTConnect und OnMQTTPublish und rufe dann Subscribe und Publish auf.

Komponentenklasse

TsgcWSPClient_MQTT

Spezifikation

OASIS MQTT 3.1.1 und MQTT 5.0

Transport

TCP (1883) oder TLS (8883)

Sprachen

Delphi, C++ Builder

Transport: reines TCP und TLS. sgcMQ verbindet sich über reines TCP und TLS. Wenn du MQTT über WebSocket brauchst, benötigst du dafür ein sgcWebSockets Paket, das den WebSocket-Client bereitstellt.

Verbinden, abonnieren, veröffentlichen

Ein TsgcTCPClient an der Eigenschaft Client setzt MQTT direkt auf den TCP-Socket. Schalte TLS ein und richte den Port auf 8883, um einen verschlüsselten Broker anzusprechen.

uses
  sgcTCP_Client_WS, sgcWebSocket_Classes, sgcWebSocket_Types,
  sgcWebSocket_Protocols, sgcWebSocket_Protocol_MQTT_Client,
  sgcWebSocket_Protocol_MQTT_Message;

var
  TCPClient: TsgcTCPClient;
  MQTT: TsgcWSPClient_MQTT;
begin
  TCPClient := TsgcTCPClient.Create(nil);
  TCPClient.Host := 'broker.example.com';
  TCPClient.Port := 1883;
  TCPClient.WatchDog.Enabled := True;

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

  MQTT.LastWillTestament.Enabled := True;
  MQTT.LastWillTestament.Topic   := 'devices/sensor-01/status';
  MQTT.LastWillTestament.Message := 'offline';
  MQTT.LastWillTestament.QoS     := mtqsAtLeastOnce;
  MQTT.LastWillTestament.Retain  := True;

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

  TCPClient.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', mtqsAtLeastOnce);
  MQTT.Publish('devices/sensor-01/status',
    'online', mtqsAtLeastOnce, True);
end;

procedure TForm1.MQTTPublish(Connection: TsgcWSConnection;
  aTopic, aText: string;
  PublishProperties: TsgcWSMQTTPublishProperties);
begin
  Memo1.Lines.Add(aTopic + ' = ' + aText);
end;
// include: sgcTCP_Client_WS.hpp, sgcWebSocket_Protocols.hpp,
// sgcWebSocket_Protocol_MQTT_Client.hpp

TsgcTCPClient *TCPClient = new TsgcTCPClient(this);
TCPClient->Host = "broker.example.com";
TCPClient->Port = 1883;
TCPClient->WatchDog->Enabled = true;

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

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

TCPClient->Active = true;

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

// In the OnMQTTConnect handler:
MQTT->Subscribe("sensors/+/temperature", mtqsAtLeastOnce);
MQTT->Publish("devices/sensor-01/status",
  "online", mtqsAtLeastOnce, true);

Wichtige Eigenschaften & Methoden

Die Member, zu denen du am häufigsten greifst.

Träger

Client nimmt den TsgcTCPClient auf, dem der Socket gehört. Seine Eigenschaften Host, Port, TLS, TLSOptions und WatchDog bestimmen, wie die Bytes reisen.

Protokollversion

MQTTVersion wählt mqtt311 oder mqtt5. Die MQTT 5-Properties und Reason Codes erscheinen nur dann auf der Leitung, wenn Version 5 gewählt ist.

Authentifizierung

Authentication.Enabled, UserName und Password füllen das CONNECT-Paket. Für Challenge-Response-Verfahren aus MQTT 5 nutze Auth zusammen mit OnMQTTAuth.

Veröffentlichen

Publish(topic, text, qos, retain) sendet eine Nachricht, mit einer TStream-Überladung für binäre Payloads. PublishAndWait blockiert, bis der Broker das Paket bestätigt.

Abonnieren

Subscribe(topic, qos) nimmt einen einzelnen Filter oder eine TsgcWSTopics-Liste entgegen, und UnSubscribe ist das Gegenstück. Die Platzhalter sind + für eine Ebene und # für den Rest.

Zustellereignisse

OnMQTTPublish liefert eine eingehende Nachricht. Der QoS 2-Handshake zeigt sich als OnMQTTPubRec, OnMQTTPubRel und OnMQTTPubComp, für QoS 1 gibt es OnMQTTPubAck.

Last Will

LastWillTestament trägt Topic, Nachricht, QoS und Retain-Flag, die der Broker stellvertretend für dich veröffentlicht, wenn die Verbindung ohne sauberes DISCONNECT abbricht.

Sessions und Erreichbarkeit

ConnectProperties setzt Session-Ablauf und Limits von MQTT 5. HeartBeat treibt das Keep-Alive-PINGREQ, mit OnMQTTPing auf die Antwort.

QoS-Speicherung

Die Eigenschaft QoS steuert, wie ausgehende Nachrichten mit QoS 1 und 2 gespeichert und erneut gesendet werden, solange die Bestätigung noch aussteht.

Weiter entdecken

Online-HilfeVollständige API-Referenz und Anwendungsleitfaden.
Alle sgcMQ-KomponentenDurchstöbere die vollständige Funktionsmatrix aller sieben Komponenten.
Kostenlose Testversion herunterladenTeste den Client gegen Mosquitto, HiveMQ oder deinen eigenen Broker.
PreiseSingle-, Team- und Site-Lizenzen mit vollständigem Quellcode.
Bestes Preis-Leistungs-Verhältnis: All-AccessAlle eSeGeCe-Produkte, inklusive Premium-Support, ab €1,059 pro Jahr.
All-Access-Preise ansehen

Bereit loszulegen?

Lade die kostenlose Testversion herunter und veröffentliche deine erste MQTT-Nachricht aus Delphi oder C++ Builder.