MQTT-protocol

Lichtgewicht publish-subscribe-protocol, ontworpen voor IoT en apparaten met beperkte middelen. Volledige ondersteuning voor de specificaties MQTT 3.1.1 en MQTT 5.0.

MQTT-subprotocol-client

Lichtgewicht publish-subscribe-messaging voor IoT en apparaten met beperkte middelen. Volledige ondersteuning voor MQTT 3.1.1 en MQTT 5.0, over WebSocket of raw TCP.

Componentklasse

TsgcWSPClient_MQTT

Protocol

MQTT 3.1.1 & MQTT 5.0

Platforms

Windows, macOS, Linux, iOS, Android

Editie

Standard / Professional / Enterprise

Plaats het component, stel enkele eigenschappen in, klaar

Koppel een TsgcWebSocketClient aan TsgcWSPClient_MQTT, hang OnMQTTConnect / OnMQTTPublish aan, en gebruik daarna Subscribe en 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);

Wat zit erin

10 gepubliceerde eigenschappen, 9 methoden en 13 gebeurtenissen — afgeleid van de TsgcWSPClient_MQTT-referentie.

Protocolversies

MQTTVersion selecteert het niveau dat in het CONNECT-pakket wordt aangekondigd — MQTT 3.1.1 of MQTT 5.0. ConnectProperties bevat de MQTT 5-velden session-expiry, receive-maximum, packet-size, topic-alias en extended-auth.

WebSocket of raw TCP

Sluit de Client-eigenschap aan op een TsgcWebSocketClient om MQTT over WebSockets te draaien, of op een TsgcWSMQTTBroker via Broker om het native TCP-transport op poort 1883/8883 te gebruiken.

QoS & retain

Publiceer op QoS 0, 1 of 2 met optionele retain. De eigenschap QoS regelt het standaardniveau, het retry-interval en de time-out. PublishAndWait blokkeert tot de broker bevestigt — nuttig voor transactionele publishes.

Last Will & Testament

LastWillTestament registreert het topic, de payload, de QoS en de retain-flag die de broker namens deze client publiceert als de verbinding niet netjes wordt afgesloten — een nette manier om disconnects van apparaten te signaleren.

Abonnementen & events

Subscribe / UnSubscribe accepteren topic-filters met de wildcards + en #. OnMQTTPublish levert inkomende berichten; OnMQTTPublishEx geeft raw bytes / streams. De volledige QoS 2-handshake is beschikbaar via OnMQTTPubRec, OnMQTTPubRel en OnMQTTPubComp.

Keep-alive & authenticatie

HeartBeat stuurt PINGREQ op een timer en detecteert stille broker-disconnects. Authentication stuurt een UserName/Password mee in CONNECT. MQTT 5 enhanced auth: roep Auth aan en handel OnMQTTAuth af voor SCRAM-stijl-challenges.

Specificaties & referenties

Autoritatieve bronnen voor de protocollen die dit component implementeert.

Documentatie & demo's

Direct linken naar de componentreferentie, het kant-en-klare demoproject pakken en de proefversie downloaden.

Online help — Protocol_MQTT Volledige referentie van eigenschappen, methoden en gebeurtenissen voor dit component.
Demoproject — Demos\Protocols\MQTT Kant-en-klaar voorbeeldproject. Zit in het sgcWebSockets-pakket — download hieronder de proefversie.
Technisch document (PDF) Functies, snelstart, codevoorbeelden voor Delphi, C++ Builder en .NET en primaire bronverwijzingen — alleen dit component.
Gebruikershandleiding (PDF) Uitgebreide handleiding voor elk component in de bibliotheek.

Klaar om aan de slag te gaan met MQTT?

Download de gratis proefversie en begin binnen enkele minuten met het bouwen van IoT-messagingoplossingen.