Composant client MQTT : sgcMQ | eSeGeCe

Client MQTT

TsgcWSPClient_MQTT est un client MQTT 3.1.1 et MQTT 5.0 natif. Publie et abonne-toi avec QoS 0, 1 et 2, messages retenus, Last Will and Testament, sessions persistantes, et les ajouts de MQTT 5 : codes de raison, propriétés utilisateur, alias de topics, abonnements partagés et authentification enrichie. Le même composant et la même API en Delphi et en C++ Builder.

TsgcWSPClient_MQTT

Assigne un TsgcTCPClient à Client, choisis la version du protocole avec MQTTVersion, branche OnMQTTConnect et OnMQTTPublish, puis appelle Subscribe et Publish.

Classe du composant

TsgcWSPClient_MQTT

Spécification

OASIS MQTT 3.1.1 et MQTT 5.0

Transport

TCP (1883) ou TLS (8883)

Langages

Delphi, C++ Builder

Transport : TCP simple et TLS. sgcMQ se connecte en TCP simple et en TLS. Si tu as besoin de MQTT sur WebSocket, cela nécessite un package sgcWebSockets, qui fournit le client WebSocket.

Se connecter, s'abonner, publier

Un TsgcTCPClient sur la propriété Client place MQTT directement sur le socket TCP. Active TLS et pointe le port sur 8883 pour un broker chiffré.

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

Propriétés et méthodes clés

Les membres que tu utilises le plus souvent.

Support de transport

Client reçoit le TsgcTCPClient qui possède le socket. Ses propriétés Host, Port, TLS, TLSOptions et WatchDog décident de la façon dont les octets circulent.

Version du protocole

MQTTVersion choisit mqtt311 ou mqtt5. Les propriétés et codes de raison de MQTT 5 n'apparaissent sur le fil que si la version 5 est sélectionnée.

Authentification

Authentication.Enabled, UserName et Password remplissent le paquet CONNECT. Pour les schémas défi/réponse de MQTT 5, utilise Auth avec OnMQTTAuth.

Publication

Publish(topic, text, qos, retain) envoie un message, avec une surcharge TStream pour les charges utiles binaires. PublishAndWait bloque jusqu'à ce que le broker acquitte le paquet.

Abonnement

Subscribe(topic, qos) accepte un filtre unique ou une liste TsgcWSTopics, et UnSubscribe fait l'inverse. Les jokers sont + pour un niveau et # pour le reste.

Événements de livraison

OnMQTTPublish délivre un message entrant. La poignée de main QoS 2 se traduit par OnMQTTPubRec, OnMQTTPubRel et OnMQTTPubComp, avec OnMQTTPubAck pour QoS 1.

Last Will

LastWillTestament porte le topic, le message, la QoS et l'indicateur de rétention que le broker publie à ta place si la connexion tombe sans DISCONNECT propre.

Sessions et maintien en vie

ConnectProperties règle l'expiration et les limites de session de MQTT 5. HeartBeat pilote le PINGREQ de keep-alive, avec OnMQTTPing à la réponse.

Stockage QoS

La propriété QoS contrôle la façon dont les messages sortants en QoS 1 et 2 sont stockés et réémis tant que l'acquittement se fait attendre.

Pour aller plus loin

Aide en ligneRéférence complète de l'API et guide d'utilisation.
Tous les composants sgcMQParcours la matrice complète des fonctionnalités des sept composants.
Télécharger l'essai gratuitFais tourner le client contre Mosquitto, HiveMQ ou ton propre broker.
TarifsLicences Single, Team et Site avec le code source complet.
Meilleur rapport qualité-prix : All-AccessTous les produits eSeGeCe, Support Premium inclus, à partir de €1,059/an.
Voir les tarifs All-Access

Prêt à te lancer ?

Télécharge l'essai gratuit et publie ton premier message MQTT depuis Delphi ou C++ Builder.