Protokół MQTT

Natywny klient MQTT 3.1.1 i MQTT 5.0 dla Delphi, C++Builder i .NET. Komunikacja w modelu publikuj-subskrybuj przez WebSocket lub surowy TCP z QoS 0/1/2, wiadomościami zachowanymi, last will, aliasami tematów i subskrypcjami współdzielonymi.

Klient subprotokołu MQTT

Pierwszorzędna implementacja MQTT, która działa wszędzie tam, gdzie działa środowisko uruchomieniowe Delphi / .NET — od usług na komputerach stacjonarnych po urządzenia mobilne, komunikując się z dowolnym brokerem MQTT zgodnym ze standardem.

Klasa komponentu

TsgcWSPClient_MQTT

Standardy

MQTT 3.1.1 & MQTT 5.0

Platformy

Windows, macOS, Linux, iOS, Android

Edycja

Standard / Professional / Enterprise

Pełna powierzchnia MQTT 3.1.1 i 5.0

Każda funkcja MQTT na poziomie protokołu — nie tylko publikuj i subskrybuj.

QoS 0, 1 i 2

Dostarczanie typu fire-and-forget, co najmniej raz oraz dokładnie raz. Czteroetapowe potwierdzenie QoS 2 (PUBLISH → PUBREC → PUBREL → PUBCOMP) jest w pełni dostępne poprzez zdarzenia dla logiki ponownych prób / audytu.

WebSocket lub surowy TCP

Podłącz właściwość Client do TsgcWebSocketClient, aby uruchomić MQTT przez WebSocket, lub użyj natywnego transportu MQTT TCP na porcie 1883 / 8883 — ten sam komponent, to samo API.

Wiadomości zachowane

Oznacz publikacje jako zachowane, aby broker dostarczał ostatnią znaną wartość każdemu przyszłemu subskrybentowi. Ustaw lub wyczyść flagę retain dla każdego wywołania Publish.

Last Will i Testament

LastWillTestament rejestruje temat + ładunek, które broker opublikuje, jeśli klient rozłączy się nieprawidłowo — kanoniczny sposób sygnalizowania zdarzeń offline urządzenia.

Subskrypcje z symbolami wieloznacznymi

Filtry tematów z symbolami wieloznacznymi + (pojedynczy poziom) i # (wiele poziomów): sensors/+/temperature lub devices/#.

Właściwości MQTT 5

Wygaśnięcie sesji, maksymalna liczba odbiorów, maksymalny rozmiar pakietu, maksymalna liczba aliasów tematów, informacje o żądaniu odpowiedzi, właściwości użytkownika — wszystkie dostępne poprzez ConnectProperties, PublishProperties i SubscribeProperties.

Aliasy tematów

MQTT 5 pozwala klientowi (i brokerowi) zastąpić długie nazwy tematów 2-bajtowym aliasem całkowitym dla powtarzanych publikacji — ogromne oszczędności dla intensywnych strumieni telemetrycznych.

Subskrypcje współdzielone

MQTT 5 $share/<group>/<topic> rozdziela przychodzące wiadomości metodą round-robin pomiędzy grupę subskrybentów — podstawowy element konstrukcyjny dla poziomych pul roboczych.

Żądanie / odpowiedź

Właściwości MQTT 5 ResponseTopic i CorrelationData zamieniają pub-sub w asynchroniczne RPC — wbudowane w zdarzenia bez dodatkowego ramkowania.

Wzmocnione uwierzytelnianie

Pakiet AUTH MQTT 5 z AuthenticationMethod / AuthenticationData do wyzwań w stylu SCRAM — wywołaj Auth, obsłuż OnMQTTAuth.

Keep-alive i WatchDog

HeartBeat wysyła PINGREQ w konfigurowalnym interwale. WatchDog automatycznie wznawia połączenie z wykładniczym opóźnieniem i przywraca subskrypcje.

TLS przez OpenSSL lub SChannel

Uruchom MQTTS na porcie 8883 (surowy TCP+TLS) lub WSS na 443 z certyfikatami klienta. TLSOptions.IOHandler wybiera OpenSSL (wieloplatformowy) lub SChannel (TLS jądra Windows).

Gdzie MQTT błyszczy

Lekkie ramkowanie, niski narzut i sesje stanowe sprawiają, że MQTT jest domyślnym wyborem dla tych scenariuszy.

Telemetria IoT

Czujniki przesyłają strumieniowo odczyty temperatury, wibracji, GPS i baterii przez sesje MQTT z keep-alive — nawet na zawodnych łączach LTE/Cat-M/NB-IoT.

Pojazdy i floty

Dwukierunkowy kanał poleceń z QoS 1 dla lokalizatorów flot, bramek OBD i stacji ładowania pojazdów elektrycznych — ponowne połączenie i wznowienie bez utraty publikacji.

Przemysł / SCADA

Zastąp odpytywanie OPC-UA modelem publikuj-subskrybuj sterowanym zdarzeniami. Aliasy tematów i subskrypcje współdzielone skalują się do tysięcy PLC i urządzeń polowych.

Inteligentny dom i budynek

Oświetlenie, HVAC, zamki i czujniki obecności komunikujące się przez Mosquitto lub Home Assistant — klient Delphi integruje się tak łatwo, jak każdy wbudowany węzeł.

Platformy chmurowe IoT

Ten sam komponent komunikuje się z AWS IoT Core, Azure IoT Hub, Google Cloud IoT, IBM Watson, HiveMQ Cloud i EMQX — z certyfikatami klienta X.509 lub tokenami SAS.

Pulpity webowe / przeglądarkowe

MQTT przez WebSocket w RabbitMQ Web-MQTT (port 15675) pozwala temu samemu brokerowi wysyłać dane do klientów Delphi i pulpitów JS przez jeden port TLS.

Push mobilny i obecność

Długotrwałe sesje MQTT na iOS/Android z Last Will zapewniają obecność i lekkie powiadomienia push bez dostawcy zewnętrznego.

Rozdzielanie mikrousług

Odsprzęg producentów i konsumentów przez centralnego brokera. Subskrypcje współdzielone rozdzielają pracę metodą round-robin pomiędzy pulę usług roboczych Delphi.

Współpracuje z każdym dużym brokerem MQTT

Klient zgodny ze specyfikacją — zweryfikowany z brokerami, których nasi klienci faktycznie używają.

AWS IoT Core

Certyfikaty klienta X.509, SigV4 przez WebSocket i limity brokera AWS IoT. Zobacz dedykowaną stronę AWS IoT.

Azure IoT Hub

Tokeny Device-SAS, tematy twin/method i provisioning DPS. Zobacz stronę Azure IoT Hub.

HiveMQ i HiveMQ Cloud

Pełna powierzchnia właściwości MQTT 5, subskrypcje współdzielone, wzmocnione uwierzytelnianie i HiveMQ Cluster.

Mosquitto

Referencyjny broker open-source — zarówno MQTT 3.1.1, jak i 5.0, przez TCP lub WebSocket.

EMQX

Masowo skalowalny broker z subskrypcjami współdzielonymi, silnikiem reguł i mostkiem do Kafka. Gotowy do użycia.

RabbitMQ Web-MQTT

Wtyczka MQTT przez WebSocket na porcie 15675 — standardowe rozwiązanie dla pulpitów przeglądarkowych i Delphi.

VerneMQ

Klastrowany broker MQTT zbudowany na Erlang/OTP — zarówno tryb MQTT 3.1.1, jak i 5.0 przechodzi testy.

ActiveMQ i Artemis

Wbudowany listener MQTT Apache ActiveMQ oraz broker Artemis — wieloprotokołowa koegzystencja z AMQP, STOMP i JMS.

Upuść komponent, ustaw kilka właściwości, gotowe

Sparuj TsgcWebSocketClient z TsgcWSPClient_MQTT, podłącz OnMQTTConnect / OnMQTTPublish, a następnie Subscribe i 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;

// Publikuj zachowaną wiadomość QoS 1
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);

Specyfikacje i odniesienia

Wiarygodne źródła dla protokołów, które implementuje ten komponent.

Dokumentacja i wersje demo

Przejdź bezpośrednio do dokumentacji komponentu, pobierz gotowy do uruchomienia projekt demo i wersję próbną.

Pomoc online — Protocol_MQTT Pełna dokumentacja właściwości, metod i zdarzeń tego komponentu.
Projekt demo — Demos\Protocols\MQTT Gotowy do uruchomienia projekt przykładowy. Dostarczany w pakiecie sgcWebSockets — pobierz wersję próbną poniżej.
Dokument techniczny (PDF) Funkcje, szybki start, przykłady kodu dla Delphi, C++ Builder i .NET oraz odniesienia do źródeł pierwotnych — tylko ten komponent.
Podręcznik użytkownika (PDF) Kompleksowy podręcznik obejmujący każdy komponent w bibliotece.

Gotowy, aby rozpocząć z MQTT?

Pobierz bezpłatną wersję próbną i zacznij budować rozwiązania komunikacyjne IoT w kilka minut.