Skip to content

MQTT-SN ゲートウェイ

MQTT-SN(MQTT for Sensor Networks)は、ワイヤレスセンサーネットワーク向けの軽量なパブサブプロトコルです。EMQX MQTT-SN ゲートウェイは、これらのデバイスが EMQX に接続して通信できるようにし、MQTT-SN と標準 MQTT プロトコルの橋渡しを行います。

本ページでは、EMQX における MQTT-SN ゲートウェイの設定および使用方法について紹介します。

TIP

MQTT-SN ゲートウェイは MQTT-SN v1.2 に基づいています。

MQTT-SN ゲートウェイの有効化

EMQX 5.0 では、MQTT-SN ゲートウェイはダッシュボード、REST API、および設定ファイル base.hocon を通じて設定・有効化できます。本節ではダッシュボードを用いた設定手順を例に操作方法を説明します。

EMQX ダッシュボードの左側ナビゲーションメニューで Management -> Gateways をクリックします。Gateways ページにはサポートされているすべてのゲートウェイが一覧表示されます。MQTT-SN を探し、Actions 列の Setup をクリックすると、Initialize MQTT-SN ページに遷移します。

TIP

EMQX をクラスターで運用している場合、ダッシュボードや REST API で行った設定はクラスター全体に影響します。特定のノードのみ設定を変更したい場合は、base.hocon で設定してください。

設定を簡略化するため、EMQX は Gateways ページのすべての必須項目にデフォルト値を用意しています。大幅なカスタマイズが不要な場合は、以下の3クリックで MQTT-SN ゲートウェイを有効化できます。

  1. Basic Configuration タブで Next をクリックし、すべてのデフォルト設定を受け入れます。
  2. 次に Listeners タブに遷移し、EMQX がポート1884で UDP リスナーを事前設定しています。ここでも Next をクリックして設定を確定します。
  3. 最後に Enable ボタンをクリックして MQTT-SN ゲートウェイを有効化します。

ゲートウェイの有効化が完了すると、Gateways ページに戻り、MQTT-SN ゲートウェイのステータスが Enabled と表示されていることを確認できます。

有効化された MQTT-SN ゲートウェイ

上記の設定は REST API でも行えます。

例:

bash
curl -X 'PUT' 'http://127.0.0.1:18083/api/v5/gateways/mqttsn' \
  -u <your-application-key>:<your-security-key> \
  -H 'Content-Type: application/json' \
  -d '{
  "name": "mqttsn",
  "enable": true,
  "gateway_id": 1,
  "mountpoint": "mqttsn/",
  "listeners": [
    {
      "type": "udp",
      "bind": "1884",
      "name": "default",
      "max_conn_rate": 1000,
      "max_connections": 1024000
    }
  ]
}'

詳細な REST API の説明は REST API - Gateway をご参照ください。

カスタマイズが必要でリスナーを追加したり認証ルールを設定したい場合は、MQTT-SN ゲートウェイのカスタマイズ セクションをお読みください。

MQTT-SN クライアントとの連携

クライアントライブラリ

MQTT-SN ゲートウェイを構築した後は、MQTT-SN クライアントツールを使って接続テストを行い、正常に動作するか確認できます。以下は推奨される MQTT-SN クライアントツールの例です。

パブリッシュ/サブスクライブ

MQTT-SN プロトコルはパブリッシュ/サブスクライブの動作を定義しています。例:

  • MQTT-SN プロトコルの PUBLISH メッセージはパブリッシュ操作に使用され、トピックおよび QoS はこのメッセージで指定されます。
  • SUBSCRIBE メッセージはサブスクライブ操作に使用され、トピックおよび QoS はこのメッセージで指定されます。
  • UNSUBSCRIBE メッセージはサブスクライブ解除操作に使用され、トピックはこのメッセージで指定されます。

MQTT-SN ゲートウェイのカスタマイズ

デフォルト設定に加え、EMQX はさまざまな設定オプションを提供し、特定のビジネス要件に柔軟に対応できます。本節では Gateways ページの各種設定項目について詳しく解説します。

基本設定

Basic Configuration タブでは、ゲートウェイ ID のカスタマイズ、事前定義トピックリストの設定、ゲートウェイの MountPoint 文字列の設定が可能です。以下のスクリーンショット下の説明をご覧ください。

基本設定

  • Gateway ID: ゲートウェイの一意の識別子を設定します。例:1。

  • Enable Broadcast: ゲートウェイがクライアントにゲートウェイ広告をブロードキャストするかどうかを設定します。指定した Gateway ID を含むメッセージをブロードキャストします。デフォルト:true。選択肢:truefalse

  • Enable QoS 3: QoS -1 とも呼ばれ、アックやサブスクライブを必要とせず、PUBLISH メッセージのみをゲートウェイに送信する基本的なクライアント向けの設定です。デフォルト:true。選択肢:truefalse

  • Idle Timeout: MQTT-SN クライアントが非アクティブとみなされ、切断されるまでの秒数を設定します。デフォルト:30s

  • Enable Statistics: ゲートウェイが統計情報を収集・報告するかどうかを設定します。デフォルト:true。選択肢:truefalse

  • Predefined Topic List: 事前定義されたトピック ID と対応するトピック名を設定します。Add をクリックして新しいエントリを追加できます。

    • Topic ID: 1〜65535 の整数でトピック ID を設定します。
    • Topic: トピック名を設定します。
  • MountPoint: パブリッシュやサブスクライブ時にすべてのトピックの前に付加される文字列を設定します。これにより異なるプロトコル間でメッセージルーティングの分離を実現できます。例:mqttsn/

    注意:このトピックプレフィックスはゲートウェイが管理しており、MQTT-SN クライアントはパブリッシュやサブスクライブ時に明示的にこのプレフィックスを付加する必要はありません。

リスナーの追加

デフォルトで、ポート 1884 に名前が default の UDP リスナーが設定されており、1秒あたり最大1,000接続、最大1,024,000同時接続をサポートします。Settings をクリックすると詳細設定が可能で、Delete でリスナーを削除、+ Add Listener で新規リスナーを追加できます。

MQTT-SN リスナー

Add Listener をクリックすると Add Listener ページが開き、以下の設定が行えます。

基本設定

  • Name: リスナーの一意識別子を設定します。
  • Type: プロトコルタイプを選択します。MQTT-SN では udp または dtls が選択可能です。
  • Bind: リスナーが接続を受け付けるポート番号を設定します。
  • MountPoint(任意): パブリッシュやサブスクライブ時にすべてのトピックの前に付加される文字列を設定し、異なるプロトコル間でメッセージルーティングの分離を実現します。

リスナー設定

  • Acceptor(DTLS リスナーのみ): アクセプタープールのサイズを設定します。デフォルト:16
  • Max Connections: リスナーが処理可能な最大同時接続数を設定します。デフォルト:1024000
  • Max Connection Rate: リスナーが1秒あたり受け入れ可能な新規接続の最大レートを設定します。デフォルト:1000

UDP 設定

  • ActiveN: ソケットの {active, N} オプションを設定します。これはソケットが能動的に処理可能な受信パケット数です。詳細は Erlang Documentation - setopts/2 を参照してください。
  • Buffer: 受信および送信パケットを格納するバッファのサイズを KB 単位で設定します。
  • Receive Buffer: 受信バッファのサイズを KB 単位で設定します。
  • Send Buffer: 送信バッファのサイズを KB 単位で設定します。
  • SO_REUSEADDR: ローカルでのポート番号再利用を許可するかどうかを設定します。

DTLS 設定(DTLS リスナーのみ)

TLS Verify の有効化はトグルスイッチで設定できます。ただし、その前に関連する TLS CertTLS KeyCA Cert の情報をファイル内容の入力または Select File ボタンでアップロードして設定する必要があります。詳細は SSL/TLS 接続の有効化 をご参照ください。

続いて以下を設定できます。

  • DTLS Versions: サポートする DTLS バージョンを設定します。デフォルトは dtlsv1.2dtlsv1
  • Fail If No Peer Cert: クライアントが空の証明書を送信した場合に接続を拒否するかどうかを設定します。デフォルト:false。選択肢:truefalse
  • Intermediate Certificate Depth: ピア証明書に続く有効な認証パスに含まれる自己発行でない中間証明書の最大数を設定します。デフォルト:10
  • Key Password: プライベートキーがパスワード保護されている場合に使用するパスワードを設定します。

認証の設定

MQTT-SN プロトコルの接続メッセージはクライアントの Client ID のみを提供するため、MQTT-SN ゲートウェイは HTTP サーバー認証 のみをサポートしています。

クライアント情報の生成ルールは以下の通りです。

  • Client ID: CONNECT メッセージの Client ID フィールドを使用
  • Username: 未定義
  • Password: 未定義

以下はダッシュボードを例に認証設定方法を説明します。

Gateways ページで MQTT-SN を探し、Actions 列の Setup をクリックし、Authentication タブに入ります。

Create Authentication をクリックし、MechanismPassword-Based を選択、BackendHTTP Server を選択します。続いて Configuration タブで認証ルールを設定します。

mqttsn 認証設定

各項目の詳細は HTTP サーバー認証 をご参照ください。

上記の設定は REST API でも実行可能です。

例:

bash
curl -X 'POST' 'http://127.0.0.1:18083/api/v5/gateway/mqttsn/authentication' \
  -u <your-application-key>:<your-security-key> \
  -H 'Content-Type: application/json' \
  -d '{
  "method": "post",
  "url": "http://127.0.0.1:8080",
  "headers": {
    "content-type": "application/json"
  },
  "body": {
    "clientid": "${clientid}"
  },
  "pool_size": 8,
  "connect_timeout": "5s",
  "request_timeout": "5s",
  "enable_pipelining": 100,
  "ssl": {
    "enable": false,
    "verify": "verify_none"
  },
  "backend": "http",
  "mechanism": "password_based",
  "enable": true
}'