MQTT-protocol

Native MQTT 3.1.1- en MQTT 5.0-client voor Delphi, C++Builder en .NET. Publish-subscribe-berichten over WebSocket of raw TCP met QoS 0/1/2, behouden berichten, last will, topic-aliassen en gedeelde abonnementen.

MQTT-subprotocol-client

Een eersteklas MQTT-implementatie die overal draait waar de Delphi-/.NET-runtime draait — van desktopservices tot mobiele apparaten, communicerend met elke spec-conforme MQTT-broker.

Componentklasse

TsgcWSPClient_MQTT

Standaarden

MQTT 3.1.1 & MQTT 5.0

Platforms

Windows, macOS, Linux, iOS, Android

Editie

Standard / Professional / Enterprise

Volledig MQTT 3.1.1- & 5.0-oppervlak

Elke wire-level-functie van MQTT — niet alleen publish en subscribe.

QoS 0, 1 & 2

Fire-and-forget, at-least-once en exactly-once aflevering. De QoS 2 four-way handshake (PUBLISH → PUBREC → PUBREL → PUBCOMP) is volledig blootgesteld via events voor retry-/auditlogica.

WebSocket of raw TCP

Koppel de Client-eigenschap aan een TsgcWebSocketClient om MQTT over WebSockets te draaien, of gebruik het native MQTT-TCP-transport op poort 1883 / 8883 — hetzelfde component, dezelfde API.

Behouden berichten

Markeer publicaties als retained zodat de broker de laatst bekende waarde aan elke toekomstige abonnee aflevert. Stel retain per aanroep in of wis het op Publish.

Last Will & Testament

LastWillTestament registreert een topic + payload die de broker publiceert als de client onverwacht wegvalt — de canonieke manier om device-offline-events te signaleren.

Wildcard-abonnementen

Topic-filters met wildcards + (enkel niveau) en # (meerdere niveaus): sensors/+/temperature of devices/#.

MQTT 5-eigenschappen

Session expiry, receive maximum, maximum packet size, topic alias maximum, request response info, user properties — allemaal toegankelijk via ConnectProperties, PublishProperties en SubscribeProperties.

Topic-aliassen

MQTT 5 laat de client (en broker) lange topic-namen vervangen door een 2-byte-integer-alias voor herhaalde publicaties — enorme besparingen voor drukke telemetriestromen.

Gedeelde abonnementen

MQTT 5 $share/<group>/<topic> verdeelt inkomende berichten round-robin over een groep abonnees — de bouwsteen voor horizontale worker-pools.

Request / response

De MQTT 5-eigenschappen ResponseTopic en CorrelationData maken van pub-sub een asynchrone RPC — ingebouwd in de events zonder extra framing.

Enhanced auth

MQTT 5 AUTH-packet met AuthenticationMethod / AuthenticationData voor SCRAM-achtige challenges — roep Auth aan, verwerk OnMQTTAuth.

Keep-alive & WatchDog

HeartBeat verzendt PINGREQ op een instelbaar interval. De WatchDog herstelt automatisch verbinding met exponentiële backoff en hervat abonnementen.

TLS via OpenSSL of SChannel

Draai MQTTS op 8883 (raw TCP+TLS) of WSS op 443 met clientcertificaten. TLSOptions.IOHandler kiest OpenSSL (cross-platform) of SChannel (Windows kernel TLS).

Waar MQTT schittert

Lichte framing, lage overhead en stateful sessies maken MQTT de standaardkeuze voor deze scenario's.

IoT-telemetrie

Sensoren streamen temperatuur, trillingen, GPS- en accumetingen over keep-alived MQTT-sessies — zelfs op onbetrouwbare LTE-/Cat-M-/NB-IoT-verbindingen.

Verbonden voertuigen & vloten

Bidirectioneel commandokanaal met QoS 1 voor vlootvolgers, OBD-gateways en EV-laadstations — opnieuw verbinden en hervatten zonder publicaties te verliezen.

Industrieel / SCADA

Vervang OPC-UA-polling door event-gedreven publish-subscribe. Topic-aliassen en gedeelde abonnementen schalen naar duizenden PLC's en veldapparaten.

Smart home & gebouw

Verlichting, HVAC, sloten en aanwezigheidssensoren die communiceren via Mosquitto of Home Assistant — de Delphi-client integreert net zo eenvoudig als elk embedded knooppunt.

Cloud-IoT-platforms

Hetzelfde component communiceert met AWS IoT Core, Azure IoT Hub, Google Cloud IoT, IBM Watson, HiveMQ Cloud en EMQX — met X.509-clientcertificaten of SAS-tokens.

Web-/browserdashboards

MQTT-over-WebSocket op RabbitMQ Web-MQTT (poort 15675) laat dezelfde broker pushen naar Delphi-clients en JS-dashboards over één TLS-poort.

Mobiele push & aanwezigheid

Langlopende MQTT-sessies op iOS/Android met Last Will geven u aanwezigheid en lichtgewicht push zonder leverancierspecifieke provider.

Microservice fan-out

Ontkoppel producenten en consumenten via een centrale broker. Gedeelde abonnementen verdelen werk round-robin over een pool van Delphi-workerservices.

Werkt met elke grote MQTT-broker

Spec-conforme client — geverifieerd tegen de brokers die onze klanten daadwerkelijk uitrollen.

AWS IoT Core

X.509-clientcertificaten, SigV4 over WebSocket en de AWS IoT-brokerquota's. Zie de speciale AWS IoT-pagina.

Azure IoT Hub

Device-SAS-tokens, twin-/method-topics en DPS-provisioning. Zie de Azure IoT Hub-pagina.

HiveMQ & HiveMQ Cloud

Volledig MQTT 5-eigenschappenoppervlak, gedeelde abonnementen, enhanced auth en HiveMQ Cluster.

Mosquitto

De referentie-open-source-broker — zowel MQTT 3.1.1 als 5.0, over TCP of WebSocket.

EMQX

Enorm schaalbare broker met gedeelde abonnementen, rule engine en bridge naar Kafka. Drop-in.

RabbitMQ Web-MQTT

MQTT-over-WebSocket-plugin op poort 15675 — de standaardcombinatie voor browser- + Delphi-dashboards.

VerneMQ

Geclusterde MQTT-broker gebouwd op Erlang/OTP — zowel MQTT 3.1.1- als 5.0-modi doorstaan de testsuite.

ActiveMQ & Artemis

Apache ActiveMQ’s ingebouwde MQTT-listener en de Artemis-broker — multi-protocol-coexistentie met AMQP, STOMP en JMS.

Plaats het component, stel een paar eigenschappen in, klaar

Koppel een TsgcWebSocketClient aan TsgcWSPClient_MQTT, wire OnMQTTConnect / OnMQTTPublish, en voer vervolgens Subscribe en Publish uit.

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;

// Publiceer een behouden QoS 1-bericht
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);

Specificaties & referenties

Gezaghebbende bronnen voor de protocollen die dit component implementeert.

Documentatie & demo's

Deep-link naar de componentreferentie, pak het kant-en-klare demoproject en download de proefversie.

Online-help — Protocol_MQTT Volledige eigenschap-, methode- en eventreferentie voor dit component.
Demoproject — Demos\Protocols\MQTT Kant-en-klaar voorbeeldproject. Wordt meegeleverd met het sgcWebSockets-pakket — download hieronder de proefversie.
Technisch document (PDF) Functies, snelstart, codevoorbeelden voor Delphi, C++ Builder en .NET en primaire-bronreferenties — uitsluitend dit component.
Gebruikershandleiding (PDF) Uitgebreide handleiding die elk component in de bibliotheek behandelt.

Klaar om met MQTT te beginnen?

Download de gratis proefversie en bouw binnen enkele minuten IoT-berichtoplossingen.