MQTT クライアントコンポーネント: sgcMQ | eSeGeCe

MQTT クライアント

TsgcWSPClient_MQTT は、MQTT 3.1.1 と MQTT 5.0 のネイティブクライアントです。QoS 0、1、2 でのパブリッシュとサブスクライブ、保持メッセージ、Last Will and Testament、永続セッションに対応し、MQTT 5 の追加機能である理由コード、ユーザープロパティ、トピックエイリアス、共有サブスクリプション、拡張認証も利用できます。Delphi と C++ Builder で同じコンポーネント、同じ API が使えます。

TsgcWSPClient_MQTT

ClientTsgcTCPClient を割り当て、MQTTVersion でプロトコルバージョンを選び、OnMQTTConnectOnMQTTPublish を接続したうえで、SubscribePublish を呼び出します。

コンポーネントクラス

TsgcWSPClient_MQTT

準拠仕様

OASIS MQTT 3.1.1 および MQTT 5.0

トランスポート

TCP(1883)または TLS(8883)

対応言語

Delphi、C++ Builder

トランスポートは素の TCP と TLS です。sgcMQ は素の TCP と TLS で接続します。MQTT over WebSocket が必要な場合は、WebSocket クライアントを提供する sgcWebSockets のパッケージが必要です。

接続、サブスクライブ、パブリッシュ

Client プロパティに TsgcTCPClient を設定すると、MQTT がそのまま TCP ソケット上で動きます。暗号化されたブローカーに接続する場合は TLS を有効にして、ポートを 8883 に向けてください。

uses
  sgcTCP_Client_WS, sgcWebSocket_Classes, sgcWebSocket_Types,
  sgcWebSocket_Protocols, sgcWebSocket_Protocol_MQTT_Client,
  sgcWebSocket_Protocol_MQTT_Message;

var
  TCPClient: TsgcTCPClient;
  MQTT: TsgcWSPClient_MQTT;
begin
  TCPClient := TsgcTCPClient.Create(nil);
  TCPClient.Host := 'broker.example.com';
  TCPClient.Port := 1883;
  TCPClient.WatchDog.Enabled := True;

  MQTT := TsgcWSPClient_MQTT.Create(nil);
  MQTT.Client := TCPClient;
  MQTT.MQTTVersion := mqtt5;
  MQTT.Authentication.Enabled  := True;
  MQTT.Authentication.UserName := 'sgc';
  MQTT.Authentication.Password := 'sgc';

  MQTT.LastWillTestament.Enabled := True;
  MQTT.LastWillTestament.Topic   := 'devices/sensor-01/status';
  MQTT.LastWillTestament.Message := 'offline';
  MQTT.LastWillTestament.QoS     := mtqsAtLeastOnce;
  MQTT.LastWillTestament.Retain  := True;

  MQTT.OnMQTTConnect := MQTTConnect;
  MQTT.OnMQTTPublish := MQTTPublish;

  TCPClient.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', mtqsAtLeastOnce);
  MQTT.Publish('devices/sensor-01/status',
    'online', mtqsAtLeastOnce, True);
end;

procedure TForm1.MQTTPublish(Connection: TsgcWSConnection;
  aTopic, aText: string;
  PublishProperties: TsgcWSMQTTPublishProperties);
begin
  Memo1.Lines.Add(aTopic + ' = ' + aText);
end;
// include: sgcTCP_Client_WS.hpp, sgcWebSocket_Protocols.hpp,
// sgcWebSocket_Protocol_MQTT_Client.hpp

TsgcTCPClient *TCPClient = new TsgcTCPClient(this);
TCPClient->Host = "broker.example.com";
TCPClient->Port = 1883;
TCPClient->WatchDog->Enabled = true;

TsgcWSPClient_MQTT *MQTT = new TsgcWSPClient_MQTT(this);
MQTT->Client = TCPClient;
MQTT->MQTTVersion = mqtt5;
MQTT->Authentication->Enabled  = true;
MQTT->Authentication->UserName = "sgc";
MQTT->Authentication->Password = "sgc";

MQTT->OnMQTTConnect = MQTTConnect;
MQTT->OnMQTTPublish = MQTTPublish;

TCPClient->Active = true;

void __fastcall TForm1::MQTTPublish(TsgcWSConnection *Connection,
    UnicodeString aTopic, UnicodeString aText,
    TsgcWSMQTTPublishProperties PublishProperties)
{
  Memo1->Lines->Add(aTopic + " = " + aText);
}

// In the OnMQTTConnect handler:
MQTT->Subscribe("sensors/+/temperature", mtqsAtLeastOnce);
MQTT->Publish("devices/sensor-01/status",
  "online", mtqsAtLeastOnce, true);

主なプロパティとメソッド

最もよく使うメンバーです。

キャリア

Client にはソケットを保持する TsgcTCPClient を指定します。その HostPortTLSTLSOptionsWatchDog がバイト列の送受信方法を決めます。

プロトコルバージョン

MQTTVersionmqtt311 または mqtt5 を選択します。MQTT 5 のプロパティと理由コードは、バージョン 5 を選んだ場合にのみ通信内容に現れます。

認証

Authentication.EnabledUserNamePassword が CONNECT パケットに設定されます。MQTT 5 のチャレンジ/レスポンス方式では、AuthOnMQTTAuth を組み合わせて使います。

パブリッシュ

Publish(topic, text, qos, retain) がメッセージを送信します。バイナリペイロード用に TStream のオーバーロードもあります。PublishAndWait はブローカーがパケットを確認応答するまでブロックします。

サブスクライブ

Subscribe(topic, qos) は単一のフィルターまたは TsgcWSTopics のリストを受け取り、UnSubscribe がその対になります。ワイルドカードは 1 階層が +、以降すべてが # です。

配信イベント

OnMQTTPublish が受信メッセージを配信します。QoS 2 のハンドシェイクは OnMQTTPubRecOnMQTTPubRelOnMQTTPubComp として現れ、QoS 1 では OnMQTTPubAck が発生します。

Last Will

LastWillTestament は、正常な DISCONNECT なしに接続が切れた場合にブローカーが代わりにパブリッシュする、トピック、メッセージ、QoS、retain フラグを保持します。

セッションと死活監視

ConnectProperties で MQTT 5 のセッション有効期限と各種上限を設定します。HeartBeat がキープアライブの PINGREQ を送信し、応答時に OnMQTTPing が発生します。

QoS の保存

QoS プロパティは、確認応答が未達の間に送信側の QoS 1 および 2 のメッセージをどのように保存し再送するかを制御します。

さらに詳しく

オンラインヘルプ完全な API リファレンスと利用ガイドです。
sgcMQ の全コンポーネント7 コンポーネントすべての機能一覧を確認できます。
無料体験版をダウンロードMosquitto、HiveMQ、あるいは自前のブローカーに対してクライアントを動かせます。
価格Single、Team、Site の各ライセンス。完全なソースコード付きです。
最もお得な選択: All-AccesseSeGeCe の全製品にプレミアムサポートが付いて、年間 €1,059 からご利用いただけます。
All-Access の価格を見る

はじめてみませんか

無料体験版をダウンロードして、Delphi や C++ Builder から最初の MQTT メッセージをパブリッシュしてみましょう。