Componente cliente MQTT: sgcMQ | eSeGeCe

Cliente MQTT

O TsgcWSPClient_MQTT é um cliente MQTT 3.1.1 e MQTT 5.0 nativo. Publique e assine com QoS 0, 1 e 2, mensagens retidas, um Last Will and Testament, sessões persistentes e as novidades do MQTT 5: reason codes, propriedades de usuário, aliases de tópico, assinaturas compartilhadas e autenticação aprimorada. O mesmo componente e a mesma API em Delphi e C++ Builder.

TsgcWSPClient_MQTT

Atribua um TsgcTCPClient a Client, escolha a versão do protocolo com MQTTVersion, conecte OnMQTTConnect e OnMQTTPublish e então chame Subscribe e Publish.

Classe do componente

TsgcWSPClient_MQTT

Especificação

OASIS MQTT 3.1.1 e MQTT 5.0

Transporte

TCP (1883) ou TLS (8883)

Linguagens

Delphi, C++ Builder

Transporte: TCP puro e TLS. O sgcMQ se conecta por TCP puro e TLS. Se você precisar de MQTT sobre WebSocket, isso exige um pacote sgcWebSockets, que fornece o cliente WebSocket.

Conecte, assine, publique

Um TsgcTCPClient na propriedade Client coloca o MQTT direto sobre o socket TCP. Ative o TLS e aponte a porta para 8883 para um broker criptografado.

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

Principais propriedades e métodos

Os membros que você usa com mais frequência.

Transporte

Client recebe o TsgcTCPClient dono do socket. Seus Host, Port, TLS, TLSOptions e WatchDog decidem como os bytes trafegam.

Versão do protocolo

MQTTVersion seleciona mqtt311 ou mqtt5. As propriedades e os reason codes do MQTT 5 só aparecem na comunicação quando a versão 5 está selecionada.

Autenticação

Authentication.Enabled, UserName e Password preenchem o pacote CONNECT. Para os esquemas de desafio/resposta do MQTT 5, use Auth junto com OnMQTTAuth.

Publicação

Publish(topic, text, qos, retain) envia uma mensagem, com uma sobrecarga TStream para payloads binários. PublishAndWait bloqueia até o broker confirmar o pacote.

Assinatura

Subscribe(topic, qos) recebe um único filtro ou uma lista TsgcWSTopics, e UnSubscribe faz o inverso. Os curingas são + para um nível e # para o restante.

Eventos de entrega

OnMQTTPublish entrega uma mensagem recebida. O handshake do QoS 2 aparece como OnMQTTPubRec, OnMQTTPubRel e OnMQTTPubComp, com OnMQTTPubAck para o QoS 1.

Last Will

LastWillTestament carrega o tópico, a mensagem, o QoS e o flag de retenção que o broker publica em seu nome se a conexão cair sem um DISCONNECT limpo.

Sessões e vitalidade

ConnectProperties define a expiração de sessão e os limites do MQTT 5. HeartBeat comanda o PINGREQ de keep-alive, com OnMQTTPing na resposta.

Armazenamento de QoS

A propriedade QoS controla como as mensagens de saída com QoS 1 e 2 são armazenadas e reenviadas enquanto a confirmação está pendente.

Continue explorando

Ajuda onlineReferência completa da API e guia de uso.
Todos os componentes sgcMQNavegue pela matriz completa de recursos dos sete componentes.
Baixar avaliação gratuitaExecute o cliente contra o Mosquitto, o HiveMQ ou o seu próprio broker.
PreçosLicenças Single, Team e Site com código-fonte completo.
Melhor custo-benefício: All-AccessTodos os produtos da eSeGeCe, com Suporte Premium incluído, a partir de €1,059/ano.
Ver preços do All-Access

Pronto para começar?

Baixe a versão de avaliação gratuita e publique sua primeira mensagem MQTT a partir do Delphi ou do C++ Builder.