Protocole MQTT

Protocole de messaging publish-subscribe léger conçu pour l'IoT et les appareils contraints. Prise en charge complète des spécifications MQTT 3.1.1 et MQTT 5.0.

Client de sous-protocole MQTT

Messaging publish-subscribe léger pour l'IoT et les appareils contraints. Prise en charge complète de MQTT 3.1.1 et MQTT 5.0, sur WebSocket ou TCP brut.

Classe du composant

TsgcWSPClient_MQTT

Protocole

MQTT 3.1.1 & MQTT 5.0

Plateformes

Windows, macOS, Linux, iOS, Android

Édition

Standard / Professional / Enterprise

Pose le composant, règle quelques propriétés, c'est parti

Associe un TsgcWebSocketClient à un TsgcWSPClient_MQTT, branche OnMQTTConnect / OnMQTTPublish, puis Subscribe et 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;

// Publish a retained QoS 1 message
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);

Ce qu’il y a à l’intérieur

10 propriétés publiées, 9 méthodes et 13 événements — alignés sur la référence TsgcWSPClient_MQTT.

Versions du protocole

MQTTVersion sélectionne le niveau annoncé dans le paquet CONNECT — MQTT 3.1.1 ou MQTT 5.0. ConnectProperties porte les champs MQTT 5 session-expiry, receive-maximum, packet-size, topic-alias et extended-auth.

WebSocket ou TCP brut

Branche la propriété Client sur un TsgcWebSocketClient pour faire passer MQTT sur WebSocket, ou sur un TsgcWSMQTTBroker via Broker pour utiliser le transport TCP natif sur le port 1883/8883.

QoS et retain

Publie en QoS 0, 1 ou 2 avec retain optionnel. La propriété QoS contrôle le niveau par défaut, l'intervalle de réessai et le timeout. PublishAndWait bloque jusqu'à ce que le broker acquitte — utile pour les publications transactionnelles.

Last Will and Testament

LastWillTestament enregistre le topic, le payload, le QoS et le flag retain que le broker publiera au nom de ce client si la connexion tombe sans clôture propre — une façon propre de signaler les déconnexions d'appareils.

Abonnements et événements

Subscribe / UnSubscribe acceptent des filtres de topic avec les jokers + et #. OnMQTTPublish livre les messages entrants ; OnMQTTPublishEx donne les octets bruts / le stream. Le handshake QoS 2 complet est exposé via OnMQTTPubRec, OnMQTTPubRel, OnMQTTPubComp.

Keep-alive et auth

HeartBeat envoie PINGREQ sur une minuterie et détecte les chutes silencieuses du broker. Authentication envoie un UserName/Password dans CONNECT. Auth améliorée MQTT 5 : appelle Auth et gère OnMQTTAuth pour les challenges de type SCRAM.

Spécifications et références

Sources de référence pour les protocoles implémentés par ce composant.

Documentation et démos

Lien direct vers la référence du composant, récupère le projet de démo prêt à exécuter et télécharge l’essai.

Aide en ligne — Protocol_MQTT Référence complète des propriétés, méthodes et événements de ce composant.
Projet de démo — Demos\Protocols\MQTT Projet d’exemple prêt à exécuter. Livré dans le paquet sgcWebSockets — télécharge l’essai ci-dessous.
Document technique (PDF) Fonctionnalités, démarrage rapide, exemples de code pour Delphi, C++ Builder et .NET et références aux sources primaires — ce composant uniquement.
Manuel utilisateur (PDF) Manuel exhaustif couvrant chaque composant de la bibliothèque.

Prêt à commencer avec MQTT ?

Télécharge l’essai gratuit et commence à construire des solutions de messaging IoT en quelques minutes.