MQTT-clientcomponent: sgcMQ | eSeGeCe

MQTT-client

TsgcWSPClient_MQTT is een native MQTT 3.1.1- en MQTT 5.0-client. Publiceer en abonneer met QoS 0, 1 en 2, retained messages, een Last Will and Testament, persistente sessies en de MQTT 5-aanvullingen: reason codes, user properties, topic-aliassen, gedeelde abonnementen en enhanced authentication. Hetzelfde component en dezelfde API in Delphi en C++ Builder.

TsgcWSPClient_MQTT

Wijs een TsgcTCPClient toe aan Client, kies de protocolversie met MQTTVersion, koppel OnMQTTConnect en OnMQTTPublish, en roep daarna Subscribe en Publish aan.

Componentklasse

TsgcWSPClient_MQTT

Specificatie

OASIS MQTT 3.1.1 en MQTT 5.0

Transport

TCP (1883) of TLS (8883)

Talen

Delphi, C++ Builder

Transport: gewoon TCP en TLS. sgcMQ verbindt via gewoon TCP en TLS. Heb je MQTT over WebSocket nodig, dan is daarvoor een sgcWebSockets-pakket vereist, dat de WebSocket-client levert.

Verbinden, abonneren, publiceren

Een TsgcTCPClient op de eigenschap Client zet MQTT rechtstreeks op de TCP-socket. Schakel TLS in en zet de poort op 8883 voor een versleutelde broker.

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);

Belangrijkste eigenschappen & methoden

De leden die je het vaakst gebruikt.

Drager

Client neemt de TsgcTCPClient die de socket bezit. Zijn Host, Port, TLS, TLSOptions en WatchDog bepalen hoe de bytes reizen.

Protocolversie

MQTTVersion kiest mqtt311 of mqtt5. De MQTT 5-properties en reason codes verschijnen alleen op de lijn wanneer versie 5 is gekozen.

Authenticatie

Authentication.Enabled, UserName en Password vullen het CONNECT-pakket. Gebruik voor MQTT 5-challenge/response-schema's Auth samen met OnMQTTAuth.

Publiceren

Publish(topic, text, qos, retain) verstuurt een bericht, met een TStream-overload voor binaire payloads. PublishAndWait blokkeert tot de broker het pakket bevestigt.

Abonneren

Subscribe(topic, qos) neemt één filter of een TsgcWSTopics-lijst, en UnSubscribe is de tegenhanger. De wildcards zijn + voor één niveau en # voor de rest.

Afleveringsgebeurtenissen

OnMQTTPublish levert een binnenkomend bericht af. De QoS 2-handshake komt naar voren als OnMQTTPubRec, OnMQTTPubRel en OnMQTTPubComp, met OnMQTTPubAck voor QoS 1.

Last Will

LastWillTestament bevat het topic, het bericht, de QoS en de retain-vlag die de broker namens jou publiceert als de verbinding wegvalt zonder een nette DISCONNECT.

Sessies en levendigheid

ConnectProperties stelt het verlopen van MQTT 5-sessies en de limieten in. HeartBeat stuurt de keep alive-PINGREQ aan, met OnMQTTPing bij het antwoord.

QoS-opslag

De eigenschap QoS bepaalt hoe uitgaande QoS 1- en 2-berichten worden opgeslagen en opnieuw verstuurd zolang de bevestiging uitblijft.

Blijf ontdekken

Online helpVolledige API-referentie en gebruikershandleiding.
Alle sgcMQ-componentenBekijk de volledige functiematrix van alle zeven componenten.
Download de gratis proefversieDraai de client tegen Mosquitto, HiveMQ of je eigen broker.
PrijzenSingle-, Team- en Site-licenties met volledige broncode.
De beste deal: All-AccessElk eSeGeCe-product, inclusief Premium-ondersteuning, vanaf €1,059 per jaar.
Bekijk de All-Access-prijzen

Klaar om aan de slag te gaan?

Download de gratis proefversie en publiceer vanuit Delphi of C++ Builder je eerste MQTT-bericht.