Protocolo MQTT

Protocolo ligero de mensajería publish-subscribe diseñado para IoT y dispositivos con recursos limitados. Soporte completo para las especificaciones MQTT 3.1.1 y MQTT 5.0.

Cliente del subprotocolo MQTT

Mensajería ligera publish-subscribe para IoT y dispositivos con recursos limitados. Soporte completo de MQTT 3.1.1 y MQTT 5.0, sobre WebSocket o TCP en bruto.

Clase del componente

TsgcWSPClient_MQTT

Protocolo

MQTT 3.1.1 & MQTT 5.0

Plataformas

Windows, macOS, Linux, iOS, Android

Edición

Standard / Professional / Enterprise

Coloca el componente, ajusta unas propiedades y listo

Empareja un TsgcWebSocketClient con TsgcWSPClient_MQTT, conecta OnMQTTConnect / OnMQTTPublish y haz Subscribe y 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);

Qué incluye

10 propiedades published, 9 métodos y 13 eventos — alineados con la referencia de TsgcWSPClient_MQTT.

Versiones del protocolo

MQTTVersion selecciona el nivel anunciado en el paquete CONNECT — MQTT 3.1.1 o MQTT 5.0. ConnectProperties transporta los campos MQTT 5 session-expiry, receive-maximum, packet-size, topic-alias y extended-auth.

WebSocket o TCP en bruto

Conecta la propiedad Client a un TsgcWebSocketClient para ejecutar MQTT sobre WebSockets, o a un TsgcWSMQTTBroker mediante Broker para usar el transporte TCP nativo en los puertos 1883/8883.

QoS y retain

Publica en QoS 0, 1 o 2 con retain opcional. La propiedad QoS controla el nivel por defecto, el intervalo de reintento y el timeout. PublishAndWait se bloquea hasta que el bróker confirma — útil para publicaciones transaccionales.

Last Will & Testament

LastWillTestament registra el topic, payload, QoS y flag retain que el bróker publicará en nombre de este cliente si la conexión se cae sin desconexión limpia — una forma elegante de señalizar desconexiones de dispositivos.

Suscripciones y eventos

Subscribe / UnSubscribe aceptan filtros de topic con comodines + y #. OnMQTTPublish entrega los mensajes entrantes; OnMQTTPublishEx proporciona bytes / stream en bruto. El handshake completo de QoS 2 se expone vía OnMQTTPubRec, OnMQTTPubRel, OnMQTTPubComp.

Keep-alive y autenticación

HeartBeat envía PINGREQ con un temporizador y detecta caídas silenciosas del bróker. Authentication envía UserName/Password en CONNECT. Autenticación mejorada de MQTT 5: invoca Auth y gestiona OnMQTTAuth para retos al estilo SCRAM.

Especificaciones y referencias

Fuentes autorizadas de los protocolos que implementa este componente.

Documentación y Demos

Enlace directo a la referencia del componente, descarga el proyecto demo listo para ejecutar y la prueba gratuita.

Ayuda en línea — Protocol_MQTT Referencia completa de propiedades, métodos y eventos de este componente.
Proyecto demo — Demos\Protocols\MQTT Proyecto de ejemplo listo para ejecutar. Se incluye en el paquete sgcWebSockets — descarga la prueba gratuita más abajo.
Documento técnico (PDF) Características, inicio rápido, ejemplos de código para Delphi, C++ Builder y .NET y referencias de fuentes primarias — solo este componente.
Manual de usuario (PDF) Manual completo que cubre todos los componentes de la biblioteca.

¿Listo para empezar con MQTT?

Descarga la prueba gratuita y empieza a desarrollar soluciones de mensajería IoT en minutos.