MQTT.fx は、Eclipse Paho をベースに構築された Java ベースの MQTT クライアントで、Windows、Mac、Linux をサポートしています。 MQTT.fx を使用して、IoT Platform とのデバイス接続を検証し、トピックをサブスクライブし、メッセージをパブリッシュします。 このトピックでは、Windows 上の MQTT.fx を使用して、IoT Platform への MQTT デバイス接続をシミュレーションします。
前提条件
- プロダクトとデバイスを作成し、MQTT 接続パラメーターを取得します。 詳細については、「プロダクトとデバイスの作成」、「MQTT 署名パラメーターの値の取得」をご参照ください。
この例では、「MQTT-TLS 接続」で説明されているように、次の表のデバイス証明書と MQTT 接続パラメーターを使用します。
パラメーター 値 ProductKey a1***DeviceName device1DeviceSecret f35***d9eclientId a1***.device1|securemode=2,signmethod=hmacsha256,timestamp=2524608000000|username device1&a1***passwd 86761***21dmqttHostUrl a1***.iot-as-mqtt.cn-shanghai.aliyuncs.comport 1883 - アップリンク/ダウンリンク通信をテストするための TSL モデルプロパティを定義します。 詳細については、「プロダクトの TSL モデルの定義」をご参照ください。この例では、次の図に示す TSL モデルを定義します:

MQTT.fx 接続の設定
- MQTT.fx をダウンロードしてインストールします。
このトピックでは、mqttfx-5.2.0-windows-x64 を例として使用します。 実際の UI はスクリーンショットと異なる場合があります。説明 必要に応じて、MQTT.fx ツールのライセンスをリクエストしてください。
- MQTT.fx を開きます。 メニューバーで [Extras] をクリックし、[Edit Connection Profiles] を選択します。
- [Edit Connection Profiles] ページで、次のパラメーターを設定します。
- 基本情報を設定します。
パラメーター 説明 プロファイル名 任意の名前 (例:iot connection) を入力します。 プロファイルタイプ ApsaraMQ for MQTT クライアント接続の場合は、[MQTT Broker] を選択します。 ブローカーアドレス MQTT 接続ドメインです。 [前提条件] セクションの mqttHostUrl の値 a1***.iot-as-mqtt.cn-shanghai.aliyuncs.com を使用します。 - a1*** は、この例のプロダクトの ProductKey です。
- cn-shanghai は、この例のリージョンです。
ポート番号は含めないでください。
ブローカーポート これを 1883 に設定します。 クライアント ID MQTT のプロトコルフィールドです。 フォーマット:
${ClientId}|securemode=${Mode},signmethod=${SignMethod}|timestamp=${timestamp}|[前提条件] セクションで取得した clientId の値 a1***.device1|securemode=2,signmethod=hmacsha256,timestamp=2524608000000| を入力します。
パラメーターの説明:
- ${ClientId}:デバイス、アプリ、または Web クライアントのクライアント ID です。重要 この値はカスタムで、長さは 64 文字以内である必要があります。 デバイスの場合は、その MAC アドレスまたはシリアル番号 (SN) を使用します。 これにより、異なるデバイスを識別できます。
- ${Mode}:セキュリティモードです。 有効な値は、2 (TLS ダイレクト接続モード。[SSL/TLS] 設定が必要) と 3 (TCP ダイレクト接続モード。[SSL/TLS] 設定は不要) です。
- ${SignMethod}:アルゴリズムの種類です。 サポートされている値は hmacsha256、hmacmd5、hmacsha1 です。
- ${timestamp}:ミリ秒単位の現在の時刻です。 timestamp は空のままにすることができます。
IoT Platform によって提供される接続パラメーターでは、${ClientId} のデフォルトは
${ProductKey} + '.' + ${DeviceName}で構成される文字列で、${Mode} のデフォルトは 2、${SignMethod} のデフォルトは hmacsha256 です。 必要に応じて変更できます。重要- MQTT.fx の [Client ID] とデバイスの ${ClientId} を混同しないようにしてください。
- パラメーター間または文字列の末尾にある縦棒 (|) を省略しないでください。
- パラメーターを設定する際、パラメーター値の中や前後にスペースがないことを確認してください。
- [Client ID] を入力した後、[Generate] をクリックしないでください。
General デフォルト値を使用します。 要件に基づいて調整してください。 - [User Credentials] をクリックし、[Use Username/Password] チェックボックスを選択して、[User Name] と [Password] を設定します。
パラメーター 説明 ユーザー名 フォーマット: ${DeviceName}&${ProductKey}。[前提条件] セクションで取得した username の値 device1&a1*** を入力します。
device1はデバイスの DeviceName です。a1***はデバイスの ProductKey です。
パスワード DeviceSecret と選択した署名方式を使い、連結したパラメーターを暗号化して生成します。 [前提条件] セクションで取得した passwd の値 86761***21d を入力します。
重要- 一部の MQTT.fx バージョンでは、貼り付け後にパスワード文字列が表示されません。 カーソルがテキストボックスの末尾に移動した場合、貼り付けは成功しています。 パスワードを再度貼り付けないでください。
- パラメーターとその値では、大文字と小文字が区別されます。
- [Client ID] の ${ClientId} または ${SignMethod}[Client ID] の設定を変更した場合、パスワードを再計算する必要があります。 新しいパスワードが、更新されたパラメーターを使用して正しく計算されていることを確認してください。 パラメーター設定と計算方法の詳細については、「Node.js スクリプトを使用したパスワードの計算」をご参照ください。
- TLS ダイレクト接続モード (securemode=2) の場合は、[SSL/TLS] をクリックし、[Enable SSL/TLS] チェックボックスを選択して、[Protocol] を [TLSv1.2] に設定します。
重要 TCP ダイレクト接続モード (
securemode=3) の場合は、SSL/TLS 設定は不要です。 次のステップに進んでください。
- 基本情報を設定します。
- 設定が完了したら、右下隅の [OK] をクリックします。
- [Connect] をクリックします。
右側のランプが緑色に点灯すると、接続が成功したことを示します。
IoT Platform コンソールで、対象インスタンスの を選択します。 プロダクトを選択して、デバイスのステータスを表示します。 デバイスのステータスが [オンライン] になっていることを確認します。
次のセクションでは、カスタムトピックと TSL モデルトピックを使用してアップリンクおよびダウンリンク通信をテストする方法について説明します。 結果がこの例と異なる場合、接続は失敗しています。 ログ情報に基づいて設定を修正してください。
カスタムトピックを使用した通信
| トピック | 権限 | 説明 |
/a1***/device1/user/update/error |
[パブリッシュ] | アップリンク: デバイスは IoT Platform にメッセージをパブリッシュします。 |
/a1***/device1/user/get |
[サブスクライブ] | ダウンリンク: デバイスは IoT Platform からのメッセージを受信するためにサブスクライブします。 |
アップリンク通信
- MQTT.fx で [Publish] をクリックします。 [Publish] テキストボックスに、[Publish] 権限を持つトピック
/a1***/device1/user/update/errorを入力します。 - テキストエディターペインにメッセージの内容を入力し、[Publish] をクリックします。
[Topic] テキストボックスに、カスタムトピックパス (例:
/${ProductKey}/${DeviceName}/user/update/error) を入力します。 [QoS] を [QoS 0] に設定します。 メッセージエディターペインに、テストコンテンツ (例:This is a publish test.) を入力します。 - IoT Platform コンソールにログインします。 インスタンスの [Simple Log Service] ページで、[Device-to-Cloud Messages] ログを表示します。 詳細については、「IoT Platform ログの照会」をご参照ください。
ログリストで、対象のログエントリの [View Details] をクリックして、メッセージの [Topic] (例:
/${ProductKey}/${DeviceName}/user/update/error) と [Content] (例:This is a publish test.) を表示します。 ログステータスが 200 の場合、メッセージは正常に送信されています。
ダウンリンク通信
- MQTT.fx で [Subscribe] をクリックします。 [Subscribe] テキストボックスに、[Subscribe] 権限を持つトピック
/a1***/device1/user/getを入力します。 - [Subscribe] をクリックします。
サブスクリプションが成功すると、トピックがリストに表示されます。
- IoT Platform コンソールにログインします。 インスタンスの下で、 を選択します。
- デバイスの [操作] 列で [表示] をクリックして、[デバイス詳細] ページに移動します。
- [Topic リスト] タブをクリックします。 サブスクライブしたトピックの [操作] 列で、[メッセージをパブリッシュ] をクリックします。
- メッセージの内容 (例:This is a test.) を入力し、[OK] をクリックします。
- MQTT.fx に戻り、受信したメッセージを表示します。
[Subscribe] タブで、サブスクライブしたカスタムトピック
/${ProductKey}/device1/user/getが 1 件のメッセージを受信しました。 メッセージの内容はThis is a test、QoS は 0、Content Type はtext/plainであり、デバイスメッセージがカスタムトピック経由で正常に配信され、クライアントが受信したことを示します。
TSL モデルトピックを使用した通信
| トピック | 権限 | 説明 |
/sys/a1****/device1/thing/event/property/post |
[パブリッシュ] | アップリンク: デバイスは IoT Platform にプロパティデータを報告します。 |
/sys/a1****/device1/thing/event/property/post_reply |
[サブスクライブ] | ダウンリンク: デバイスは IoT Platform からのプロパティ報告応答を受信するためにサブスクライブします。 |
/sys/a1****/device1/thing/service/property/set |
[サブスクライブ] | ダウンリンク: デバイスは IoT Platform からのプロパティ設定コマンドを受信するためにサブスクライブします。 |
デバイスによるプロパティ報告
- MQTT.fx で [Subscribe] をクリックします。 [Subscribe] テキストボックスに、[Subscribe] 権限を持つトピック
/sys/a1****/device1/thing/event/property/post_replyを入力します。 - MQTT.fx で [Publish] をクリックします。 [Publish] テキストボックスに、[Publish] 権限を持つトピック
/sys/a1****/device1/thing/event/property/postを入力します。 - テキストエディターペインに報告したいプロパティデータを入力し、[Publish] をクリックします。
報告するプロパティデータは、デバイスによるプロパティ報告で説明されているように、標準の Alink JSON 形式を使用する必要があります。 この例では、LightCurrent と LightSwitch プロパティのデータを報告します。
Alink JSON メッセージ本文には、
method(thing.event.property.postに設定)、id、params(LightSwitch と LightCurrent のプロパティ値を含む)、およびversionが含まれます。 - IoT Platform コンソールにログインします。 インスタンスの下で、 を選択します。
- デバイスの [操作] 列で [表示] をクリックします。 [デバイス詳細] ページで、[TSL モデルデータ] をクリックしてデバイスデータを表示します。
デバイスプロパティの設定
- MQTT.fx で [Subscribe] をクリックします。 [Subscribe] テキストボックスに、[Subscribe] 権限を持つトピック
/sys/a1****/device1/thing/service/property/setを入力します。 - IoT Platform コンソールにログインします。 インスタンスで、 を選択します。
- デバッグするデバイスを選択します。 [プロパティデバッグ] タブで、[メインライトスイッチ] を [オフ-0] に設定します。
- [設定] をクリックして命令を送信します。
- MQTT.fx の [Subscribe] タブで、デバイスが受信したメッセージを表示します。
以下は受信メッセージの例です:
/sys/a1****/device1/thing/service/property/set {"method":"thing.service.property.set","id":"2016306076","params":{"LightSwitch":0},"version":"1.0.0"}
ログの表示
- IoT Platform コンソールにログインします。 インスタンスの [Simple Log Service] ページで、時刻、TraceID、ビジネスタイプなどの操作ログを表示します。 詳細については、「IoT Platform ログの照会」をご参照ください。
- MQTT.fx で [Log] をクリックして、操作ログとエラーログを表示します。 以下はログ出力の例です:
INFO --- MqttFX ClientModel : messageArrived() with topic: /ext/error/a1***/device1 INFO --- PublishController : publish INFO --- MqttFX ClientModel : attempt to add PublishTopic INFO --- MqttFX ClientModel : addPublishTopic : /a1***/device1/user/get INFO --- MqttFX ClientModel : sucessfully published message test to topic /a1***/device1/user/get INFO --- PublishController : publish INFO --- MqttFX ClientModel : attempt to add PublishTopic INFO --- MqttFX ClientModel : sucessfully published message test to topic /a1***/device1/user/get INFO --- PublishController : publish INFO --- MqttFX ClientModel : attempt to add PublishTopic INFO --- MqttFX ClientModel : sucessfully published message test to topic /a1***/device1/user/get INFO --- BrokerConnectorController : onDisconnect INFO --- ScriptsController : Clear console. INFO --- MqttFX ClientModel : Cancel script excution. INFO --- ScriptsController : Clear console. INFO --- MqttFX ClientModel : Cancel script excution. INFO --- ScriptsController : Clear console. INFO --- ScriptsController : Clear console. INFO --- BrokerConnectorController : onConnect INFO --- ScriptsController : Clear console. INFO --- MqttFX ClientModel : MqttClient with ID a1***.device1|securemode=2,signmethod=hmacsha INFO --- MqttFX ClientModel : session present: false INFO --- SubscribeController : onSubscribe INFO --- MqttFX ClientModel : rebuildMessagesList() INFO --- MqttFX ClientModel : attempt to addRecentSubscriptionTopic INFO --- MqttFX ClientModel : addRecentSubscriptionTopic : de.jensd.mqttfx.entities.Topixxx1 INFO --- MqttFX ClientModel : attempt to add PublishTopic INFO --- MqttFX ClientModel : addPublishTopic : /a1***/device1/user/get INFO --- MqttFX ClientModel : sucessfully subscribed to topic /a1***/device1/user/get (QoS 0) INFO --- MqttFX ClientModel : messageArrived() with topic: /a1***/device1/user/get INFO --- MqttFX ClientModel : messageArrived() added: message #1 to topic '/a1***/device1/user/get' INFO --- PublishController : publish INFO --- MqttFX ClientModel : attempt to add PublishTopic INFO --- MqttFX ClientModel : addPublishTopic : /a1***/device1/user/update/error INFO --- MqttFX ClientModel : sucessfully published message This is a publish test. to topic /a1***/device1/user/update/error