Componente MQTT Client: sgcMQ | eSeGeCe

MQTT Client

TsgcWSPClient_MQTT es un cliente nativo de MQTT 3.1.1 y MQTT 5.0. Publica y suscríbete con QoS 0, 1 y 2, mensajes retenidos, un Last Will and Testament, sesiones persistentes y las novedades de MQTT 5: códigos de motivo, propiedades de usuario, alias de tema, suscripciones compartidas y autenticación mejorada. El mismo componente y la misma API en Delphi y en C++ Builder.

TsgcWSPClient_MQTT

Asigna un TsgcTCPClient a Client, elige la versión del protocolo con MQTTVersion, conecta OnMQTTConnect y OnMQTTPublish, y después llama a Subscribe y a Publish.

Clase del componente

TsgcWSPClient_MQTT

Especificación

OASIS MQTT 3.1.1 y MQTT 5.0

Transporte

TCP (1883) o TLS (8883)

Lenguajes

Delphi, C++ Builder

Transporte: TCP plano y TLS. sgcMQ se conecta por TCP plano y TLS. Si necesitas MQTT sobre WebSocket, eso requiere un paquete sgcWebSockets, que es el que aporta el cliente WebSocket.

Conecta, suscríbete, publica

Un TsgcTCPClient en la propiedad Client pone MQTT directamente sobre el socket TCP. Activa TLS y apunta el puerto al 8883 para un broker cifrado.

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

Propiedades y métodos principales

Los miembros que vas a usar con más frecuencia.

Transporte

Client recibe el TsgcTCPClient propietario del socket. Sus propiedades Host, Port, TLS, TLSOptions y WatchDog deciden cómo viajan los bytes.

Versión del protocolo

MQTTVersion selecciona mqtt311 o mqtt5. Las propiedades y los códigos de motivo de MQTT 5 solo aparecen en el cable cuando eliges la versión 5.

Autenticación

Authentication.Enabled, UserName y Password rellenan el paquete CONNECT. Para los esquemas de desafío/respuesta de MQTT 5 usa Auth junto con OnMQTTAuth.

Publicación

Publish(topic, text, qos, retain) envía un mensaje, y hay una sobrecarga con TStream para cargas binarias. PublishAndWait bloquea hasta que el broker confirma el paquete.

Suscripción

Subscribe(topic, qos) acepta un único filtro o una lista TsgcWSTopics, y UnSubscribe hace lo contrario. Los comodines son + para un nivel y # para el resto.

Eventos de entrega

OnMQTTPublish te entrega un mensaje entrante. El intercambio de QoS 2 aflora como OnMQTTPubRec, OnMQTTPubRel y OnMQTTPubComp, con OnMQTTPubAck para QoS 1.

Last Will

LastWillTestament lleva el tema, el mensaje, el QoS y el indicador de retención que el broker publica en tu nombre si la conexión se cae sin un DISCONNECT limpio.

Sesiones y actividad

ConnectProperties fija la caducidad y los límites de sesión de MQTT 5. HeartBeat gobierna el PINGREQ de keep-alive, con OnMQTTPing en la respuesta.

Almacenamiento de QoS

La propiedad QoS controla cómo se guardan y se reintentan los mensajes salientes de QoS 1 y 2 mientras está pendiente su confirmación.

Sigue explorando

Ayuda en líneaReferencia completa de la API y guía de uso.
Todos los componentes de sgcMQConsulta la matriz completa de características de los siete componentes.
Descargar prueba gratuitaPrueba el cliente contra Mosquitto, HiveMQ o tu propio broker.
PreciosLicencias Single, Team y Site con código fuente completo.
La mejor opción: All-AccessTodos los productos de eSeGeCe, con Premium Support incluido, desde €1,059 al año.
Ver precios de All-Access

¿Listo para empezar?

Descarga la prueba gratuita y publica tu primer mensaje MQTT desde Delphi o C++ Builder.