Componente MQTT Client: sgcMQ | eSeGeCe

MQTT Client

TsgcWSPClient_MQTT è un client MQTT 3.1.1 e MQTT 5.0 nativo. Pubblica e sottoscrivi con QoS 0, 1 e 2, messaggi retained, un Last Will and Testament, sessioni persistenti e le aggiunte di MQTT 5: reason code, user property, alias dei topic, sottoscrizioni condivise e autenticazione avanzata. Lo stesso componente e la stessa API in Delphi e C++ Builder.

TsgcWSPClient_MQTT

Assegna un TsgcTCPClient a Client, scegli la versione del protocollo con MQTTVersion, aggancia OnMQTTConnect e OnMQTTPublish, poi chiama Subscribe e Publish.

Classe del componente

TsgcWSPClient_MQTT

Specifica

OASIS MQTT 3.1.1 e MQTT 5.0

Trasporto

TCP (1883) o TLS (8883)

Linguaggi

Delphi, C++ Builder

Trasporto: TCP semplice e TLS. sgcMQ si connette tramite TCP semplice e TLS. Se ti serve MQTT su WebSocket, è necessario un package sgcWebSockets, che fornisce il client WebSocket.

Connetti, sottoscrivi, pubblica

Un TsgcTCPClient nella proprietà Client mette MQTT direttamente sul socket TCP. Attiva TLS e punta la porta a 8883 per un broker cifrato.

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

Proprietà e metodi principali

I membri che userai più spesso.

Vettore

Client riceve il TsgcTCPClient proprietario del socket. Le sue proprietà Host, Port, TLS, TLSOptions e WatchDog decidono come viaggiano i byte.

Versione del protocollo

MQTTVersion seleziona mqtt311 o mqtt5. Le property e i reason code di MQTT 5 compaiono sul filo solo quando è selezionata la versione 5.

Autenticazione

Authentication.Enabled, UserName e Password riempiono il pacchetto CONNECT. Per gli schemi a sfida e risposta di MQTT 5 usa Auth insieme a OnMQTTAuth.

Pubblicazione

Publish(topic, text, qos, retain) invia un messaggio, con un overload TStream per i payload binari. PublishAndWait blocca finché il broker non conferma il pacchetto.

Sottoscrizione

Subscribe(topic, qos) accetta un singolo filtro o una lista TsgcWSTopics, e UnSubscribe ne è lo speculare. I caratteri jolly sono + per un livello e # per il resto.

Eventi di consegna

OnMQTTPublish consegna un messaggio in entrata. L'handshake QoS 2 emerge come OnMQTTPubRec, OnMQTTPubRel e OnMQTTPubComp, con OnMQTTPubAck per il QoS 1.

Last Will

LastWillTestament contiene il topic, il messaggio, il QoS e il flag retain che il broker pubblica per tuo conto se la connessione cade senza un DISCONNECT pulito.

Sessioni e liveness

ConnectProperties imposta la scadenza della sessione e i limiti di MQTT 5. HeartBeat pilota il PINGREQ di keep-alive, con OnMQTTPing sulla risposta.

Archiviazione QoS

La proprietà QoS controlla come i messaggi QoS 1 e 2 in uscita vengono memorizzati e ritentati mentre la conferma è ancora in sospeso.

Continua a esplorare

Guida onlineRiferimento API completo e guida all'utilizzo.
Tutti i componenti sgcMQEsplora la matrice completa delle funzionalità di tutti e sette i componenti.
Scarica la versione di prova gratuitaEsegui il client contro Mosquitto, HiveMQ o il tuo broker.
PrezziLicenze Single, Team e Site con codice sorgente completo.
La scelta più conveniente: All-AccessTutti i prodotti eSeGeCe, con Supporto Premium incluso, a partire da €1,059/anno.
Vedi i prezzi All-Access

Pronto per iniziare?

Scarica la versione di prova gratuita e pubblica il tuo primo messaggio MQTT da Delphi o C++ Builder.