Protocollo MQTT

Protocollo di messaging publish-subscribe leggero, progettato per IoT e dispositivi con risorse limitate. Supporto completo delle specifiche MQTT 3.1.1 e MQTT 5.0.

Client del subprotocollo MQTT

Messaging publish-subscribe leggero per IoT e dispositivi con risorse limitate. Supporto completo di MQTT 3.1.1 e MQTT 5.0, su WebSocket o TCP nativo.

Classe del componente

TsgcWSPClient_MQTT

Protocollo

MQTT 3.1.1 & MQTT 5.0

Piattaforme

Windows, macOS, Linux, iOS, Android

Edizione

Standard / Professional / Enterprise

Trascina il componente, imposta poche proprietà, parti

Abbina un TsgcWebSocketClient a un TsgcWSPClient_MQTT, collega OnMQTTConnect / OnMQTTPublish, poi Subscribe e 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);

Cosa contiene

10 proprietà published, 9 metodi e 13 eventi — allineati al riferimento di TsgcWSPClient_MQTT.

Versioni del protocollo

MQTTVersion seleziona il livello dichiarato nel pacchetto CONNECT — MQTT 3.1.1 o MQTT 5.0. ConnectProperties trasporta i campi MQTT 5 per session-expiry, receive-maximum, packet-size, topic-alias e extended-auth.

WebSocket o TCP nativo

Collega la proprietà Client a un TsgcWebSocketClient per usare MQTT su WebSocket, oppure a un TsgcWSMQTTBroker tramite Broker per sfruttare il trasporto TCP nativo sulla porta 1883/8883.

QoS e retain

Pubblica con QoS 0, 1 o 2 con retain opzionale. La proprietà QoS controlla il livello predefinito, l'intervallo di retry e il timeout. PublishAndWait blocca finché il broker non conferma — utile per pubblicazioni transazionali.

Last Will & Testament

LastWillTestament registra topic, payload, QoS e flag retain che il broker pubblicherà per conto di questo client se la connessione cade in modo non pulito — un modo lineare per segnalare la disconnessione di un dispositivo.

Sottoscrizioni ed eventi

Subscribe / UnSubscribe accettano filtri di topic con wildcard + e #. OnMQTTPublish consegna i messaggi in arrivo; OnMQTTPublishEx fornisce byte grezzi o stream. L'handshake completo di QoS 2 è esposto tramite OnMQTTPubRec, OnMQTTPubRel, OnMQTTPubComp.

Keep-alive e autenticazione

HeartBeat invia PINGREQ su timer e rileva cadute silenziose del broker. Authentication invia UserName/Password nel CONNECT. Enhanced auth MQTT 5: chiama Auth e gestisci OnMQTTAuth per challenge in stile SCRAM.

Specifiche e riferimenti

Fonti autorevoli per i protocolli implementati da questo componente.

Documentazione e demo

Vai al riferimento del componente, scarica il progetto demo pronto all'uso e prova la versione trial.

Guida online — Protocol_MQTT Riferimento completo di proprietà, metodi ed eventi per questo componente.
Progetto demo — Demos\Protocols\MQTT Progetto di esempio pronto all'uso. Incluso nel pacchetto sgcWebSockets — scarica la versione di prova qui sotto.
Documento tecnico (PDF) Funzionalità, guida rapida, esempi di codice per Delphi, C++ Builder e .NET e riferimenti alle fonti primarie — solo questo componente.
Manuale utente (PDF) Manuale completo che copre tutti i componenti della libreria.

Pronto a iniziare con MQTT?

Scarica la versione di prova gratuita e inizia a costruire soluzioni di messaging IoT in pochi minuti.