MQTT プロトコル

IoT および制約のあるデバイス向けに設計された軽量パブリッシュ/サブスクライブメッセージングプロトコルです。MQTT 3.1.1 および MQTT 5.0 仕様を完全サポートしています。

MQTT subprotocol client

IoT および制約のあるデバイス向けの軽量パブリッシュ/サブスクライブメッセージングです。WebSocket またはネイティブ TCP を通じて MQTT 3.1.1 および MQTT 5.0 を完全サポートします。

コンポーネントクラス

TsgcWSPClient_MQTT

プロトコル

MQTT 3.1.1 & MQTT 5.0

プラットフォーム

Windows, macOS, Linux, iOS, Android

エディション

Standard / Professional / Enterprise

コンポーネントを配置してプロパティを設定するだけ

TsgcWebSocketClient と TsgcWSPClient_MQTT をペアリングし、OnMQTTConnect / OnMQTTPublish をバインドして Subscribe と 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);

主な機能

公開プロパティ 10 個、メソッド 9 個、イベント 13 個 ― TsgcWSPClient_MQTT リファレンスより。

プロトコルバージョン

MQTTVersion で CONNECT パケットに通知するレベル(MQTT 3.1.1 または MQTT 5.0)を選択します。ConnectProperties には MQTT 5 のセッション有効期限、受信最大数、パケットサイズ、トピックエイリアス、拡張認証フィールドが含まれます。

WebSocket またはネイティブ TCP

Client プロパティを TsgcWebSocketClient に接続すると WebSocket 経由で MQTT を実行でき、Broker 経由で TsgcWSMQTTBroker に接続するとポート 1883/8883 のネイティブ TCP トランスポートを使用できます。

QoS と保持

オプションの保持フラグ付きで QoS 0、1、2 でパブリッシュできます。QoS プロパティはデフォルトレベル、再試行間隔、タイムアウトを制御します。PublishAndWait はブローカーの確認応答までブロックします(トランザクションパブリッシュに便利です)。

遺言メッセージ

LastWillTestament で、接続が異常切断した場合にブローカーがこのクライアントの代わりにパブリッシュするトピック、ペイロード、QoS、保持フラグを設定します。デバイスの切断を通知するスマートな方法です。

サブスクリプションとイベント

Subscribe / UnSubscribe+ および # ワイルドカードを持つトピックフィルターを受け付けます。OnMQTTPublish で受信メッセージを取得し、OnMQTTPublishEx では生バイト/ストリームが得られます。QoS 2 ハンドシェイクは OnMQTTPubRecOnMQTTPubRelOnMQTTPubComp を通じて公開されています。

キープアライブと認証

HeartBeat はタイマーで PINGREQ を送信し、ブローカーの無音切断を検出します。Authentication は CONNECT に UserName/Password を含めます。MQTT 5 の拡張認証:Auth を呼び出し、SCRAM スタイルのチャレンジに対して OnMQTTAuth を処理します。

仕様と参考資料

本コンポーネントが実装するプロトコルの公式リファレンスです。

ドキュメントとデモ

コンポーネントリファレンスへのディープリンク、すぐに実行可能なデモプロジェクト、そして体験版のダウンロードはこちらです。

オンラインヘルプ — Protocol_MQTT 本コンポーネントのプロパティ、メソッド、イベントの完全なリファレンスです。
デモプロジェクト — Demos\Protocols\MQTT すぐに実行可能なサンプルプロジェクトです。sgcWebSockets パッケージに同梱されています。下記より体験版をダウンロードしてください。
技術ドキュメント (PDF) 本コンポーネントのみを対象とした機能解説、クイックスタート、Delphi、C++ Builder および .NET のコードサンプル、一次資料への参照を収録しています。
ユーザーマニュアル (PDF) ライブラリ内のすべてのコンポーネントを網羅した総合マニュアルです。

MQTT を始める準備はできましたか?

体験版をダウンロードして、数分で IoT メッセージングソリューションの構築を始めましょう。