Windows 上で MQTT.fx を使用して、デバイスの Alibaba Cloud IoT Platform への接続をシミュレートし、コアメッセージング機能をテストします。
前提条件
-
プロダクトとデバイスが作成済みで、MQTT 接続パラメーターが取得済みであること。 詳細については、「プロダクトとデバイスの作成」および「MQTT 接続パラメーターの取得」をご参照ください。
この例で使用するデバイス証明書と MQTT 接続パラメーターを次の表に示します。 パラメーターの詳細については、「MQTT-TLS 接続」をご参照ください。
パラメーター
値
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 モデルを定義」をご参照ください。
この例では、次のプロパティを定義します:
LightCurrent(動作電流、浮動小数点、範囲 0~9) およびLightSwitch(メインライトスイッチ、ブール値、1 = オン、0 = オフ)。
MQTT.fx でシミュレートされたデバイスは、非パススルーデータのみ使用できます。 パススルーデータをテストするには、物理デバイスまたは SDK を使用してください。
MQTT.fx 接続の設定
-
MQTT.fx をダウンロードしてインストールします。 インストールと使用方法については、「MQTT.fx」をご参照ください。
このトピックでは、mqttfx-5.2.0-windows-x64 を例として使用します。 バージョンのアップデートにより、UI が異なる場合があります。
説明MQTT.fx ツールを使用するには、ライセンスを申請する必要があります。
-
MQTT.fx ソフトウェアを開き、メニューバーで [エクストラ] をクリックして、[接続プロファイルの編集] を選択します。
-
[接続プロファイルの編集] ページで、以下のパラメーターを設定します。
-
基本情報を設定します。
パラメーター
説明
Profile Name
任意の名前を入力します (例: iot connection)。
Profile Type
[MQTT ブローカー] を選択します。
Broker Address
MQTT 接続エンドポイントです。 「前提条件」セクションの mqttHostUrl を入力します: a1***.iot-as-mqtt.cn-shanghai.aliyuncs.com。
-
a1*** はプロダクトの ProductKey です。
-
cn-shanghai はリージョン ID です。
ポート番号は含めず、ドメイン名のみを入力してください。
Broker Port
1883 に設定します。
Client 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}: セキュリティモード。 ダイレクト TLS ([SSL/TLS] 設定が必要) の場合は 2 を、ダイレクト TCP ([SSL/TLS] 設定不要) の場合は 3 を設定します。
-
${SignMethod}: 署名アルゴリズム。 hmacsha256、hmacmd5、hmacsha1 がサポートされています。
-
${timestamp}: 現在の時刻 (ミリ秒単位)。 timestamp パラメーターはオプションです。
デフォルトでは、IoT Platform は ${ClientId} を
${ProductKey}.${DeviceName}に、${Mode} を 2 に、${SignMethod} を hmacsha256 に設定します。 必要に応じてこれらの値を変更してください。重要-
MQTT.fx の [Client ID] フィールドを、デバイスの ${ClientId} の値と混同しないでください。
-
パラメーター間の縦棒 (|) や文字列の末尾の縦棒を省略しないでください。
-
パラメーター値の先頭または末尾にスペースがないことを確認してください。
-
[クライアント ID] 情報を入力した後、[生成] をクリックしないでください。
General
この例ではデフォルト設定を使用します。 シナリオに応じて変更してください。
-
-
[ユーザー資格情報] をクリックし、[ユーザー名/パスワードを使用] チェックボックスを選択し、[ユーザー名] と [パスワード] を設定します。
パラメーター
説明
User Name
ユーザー名は、デバイスの DeviceName、アンパサンド (&)、プロダクトの ProductKey を
${DeviceName}&${ProductKey}の形式で連結したものです。「前提条件」セクションの username を入力します: device1&a1***。
-
device1はデバイスの DeviceName です。 -
a1***はプロダクトの ProductKey です。
Password
パスワードは、連結されたパラメーターを、選択した署名アルゴリズムを使用して DeviceSecret をキーとして暗号化することで生成します。
「前提条件」セクションの passwd を入力します: 86761***21d。
重要-
一部の MQTT.fx バージョンでは、貼り付け後にパスワードがマスクされます。 カーソルが末尾に移動した場合は、貼り付けは成功です。 再度貼り付けないでください。
-
パラメーターとその値では、大文字と小文字が区別されます。
-
[Client ID] で ${ClientId} または ${SignMethod} を変更した場合は、署名の値が [Client ID] の値と一致することを確認してから、パスワードを再計算してください (Node.js スクリプトを使用してパスワードを計算する)。
-
-
直接 TLS 接続 (securemode=2) の場合、[SSL/TLS] をクリックし、[SSL/TLS を有効にする] を選択して、[プロトコル] を [TLSv1.2] に設定します。
重要TCP ダイレクト接続 (
securemode=3) の場合、SSL/TLS 設定を行う必要はありません。 次のステップに進んでください。
-
-
右下隅の [OK] をクリックします。
-
[接続] をクリックします。
緑色のインジケーターは、IoT Platform への接続が成功したことを示します。
IoT Platform コンソールでデバイスのステータスを確認してください。 お使いのインスタンスで、に移動し、製品を選択して、デバイスのステータスが[オンライン]であることを確認します。
以降のセクションでは、カスタムトピックと TSL 通信トピックを使用して、アップストリームおよびダウンストリームメッセージングをテストします。 結果が異なる場合は、接続に失敗しています。ログ情報に基づいて設定を修正してください。
カスタムトピックを使用した通信
カスタムトピックの詳細については、「カスタムトピックを使用した通信」をご参照ください。 この例では、IoT Platform によって提供されるデフォルトのカスタムトピックを使用します:
|
トピック |
権限 |
説明 |
|
|
[公開] |
アップストリームメッセージング: デバイスはこのトピックで IoT Platform にメッセージを送信します。 |
|
|
[サブスクライブ] |
ダウンストリームメッセージング: デバイスはサブスクライブして IoT Platform からのメッセージを受信します。 |
アップストリームメッセージング
-
MQTT.fx で、[公開] をクリックします。[公開] テキストボックスに、[公開] 権限を持つトピック
/a1***/device1/user/update/errorを入力します。 -
テキストエディターにメッセージ本文を入力し、[公開] をクリックします。
[QoS] が [QoS 0] に設定されていること、およびメッセージ本文が、例えば
This is a publish test.であることを確認します。 -
IoT Platform コンソールで、インスタンスの [デバイスログ] ページを開き、[デバイスからクラウドへのメッセージ] ログを確認します。 クラウド側の実行ログを照会する。
ログエントリの [表示] をクリックします。 [詳細の表示] ダイアログボックスで、[トピック] が
/a[ProductKey]/device1/user/update/errorであり、メッセージ内容がThis is a publish test.であることを確認します。
ダウンストリームメッセージング
-
MQTT.fx で [サブスクライブ] をクリックし、[サブスクライブ] テキストボックスに [サブスクライブ] 権限を持つトピック
/a1***/device1/user/getを入力します。 -
[サブスクライブ] をクリックします。
サブスクライブ後、トピックがリストに表示されます。
-
IoT Platform コンソールで、インスタンスの に移動します。
-
デバイスの「操作」列で、[表示] をクリックして [デバイス詳細] ページを開きます。
-
[Topic List] タブをクリックし、サブスクライブしたトピックの Actions 列で [Publish Message] をクリックします。
-
これはテストです。などのメッセージを入力し、[OK] をクリックします。
-
MQTT.fx に戻り、受信したメッセージを表示します。
[Subscribe] タブで、トピック
/a{ProductKey}/device1/user/getがメッセージThis is a test.を受信します (QoS 0、Plain Text Decoder でデコード)。
TSL 通信のためのトピックの使用
TSL 通信トピックの詳細については、「トピックとは」をご参照ください。 この例では、次の TSL 通信トピックを使用します:
|
トピック |
権限 |
説明 |
|
|
[公開] |
アップストリームメッセージング: デバイスはこのトピックを使用して、プロパティデータを IoT Platform に報告します。 |
|
|
[サブスクライブ] |
ダウンストリームメッセージング: デバイスはサブスクライブして、プロパティデータを報告した後の応答を受信します。 |
|
|
[サブスクライブ] |
ダウンストリームメッセージング: デバイスはサブスクライブして、IoT Platform からのプロパティ設定コマンドを受信します。 |
デバイスプロパティの報告
-
MQTT.fx で [サブスクライブ] をクリックし、[サブスクライブ] テキストボックスに、[サブスクライブ] 権限があるトピック
/sys/a1****/device1/thing/event/property/post_replyを入力します。 -
MQTT.fx で、[パブリッシュ] をクリックし、[パブリッシュ] テキストボックスに、[publish] 権限を持つトピック
/sys/a1****/device1/thing/event/property/postを入力します。 -
テキストエディターにプロパティデータを入力し、[公開] をクリックします。
プロパティデータは、標準の Alink JSON 形式を使用する必要があります。 詳細については、「デバイスによるプロパティの報告」をご参照ください。 この例では、LightCurrent および LightSwitch プロパティを報告します。 トピックは
/sys/${ProductKey}/device1/thing/event/property/postで、JSON ペイロードの例は次のとおりです:{"method":"thing.event.property.post","id":"162277852","params":{"LightSwitch":1,"LightCurrent":1.4},"version":"1.0.0"}。 -
IoT Platform コンソールのインスタンスで、 に移動します。
-
デバイスの「操作」列で [表示] をクリックします。[デバイス詳細] ページで、[TSL データ] タブをクリックして、報告されたデータを表示します。
デバイスプロパティの設定
-
MQTT.fx で、[サブスクライブ] をクリックします。[サブスクライブ] テキストボックスに、[サブスクライブ] 権限があるトピック
/sys/a1****/device1/thing/service/property/setを入力します。 -
IoT Platform コンソールで、インスタンス内の に移動します。
-
デバイスを選択し、[プロパティのデバッグ] タブで LightSwitch を [0] に設定します。
-
[設定] をクリックしてコマンドを送信します。
-
MQTT.fx の [サブスクライブ] タブで、受信したメッセージを確認します。
/sys/a1***/device1/thing/service/property/set {"method":"thing.service.property.set","id":"2016306076","params":{"LightSwitch":0},"version":"1.0.0"}
ログの表示
-
IoT プラットフォームコンソールでインスタンスの [デバイスログ] ページを開くと、時刻、TraceID、ビジネスタイプなどのランタイムログメッセージを表示できます。 クラウド側の実行ログを照会する。
-
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 : successfully published message test to topic /a1***/device1/user/get INFO --- PublishController : publish INFO --- MqttFX ClientModel : attempt to add PublishTopic INFO --- MqttFX ClientModel : successfully published message test to topic /a1***/device1/user/get INFO --- PublishController : publish INFO --- MqttFX ClientModel : attempt to add PublishTopic INFO --- MqttFX ClientModel : successfully published message test to topic /a1***/device1/user/get INFO --- BrokerConnectorController : onDisconnect INFO --- ScriptsController : Clear console. INFO --- ScriptsController : Cancel script excution. INFO --- ScriptsController : Clear console. INFO --- ScriptsController : Cancel script excution. INFO --- ScriptsController : Clear console. INFO --- ScriptsController : Cancel script excution. 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.Topic INFO --- MqttFX ClientModel : attempt to add PublishTopic INFO --- MqttFX ClientModel : addPublishTopic : /a1***/device1/user/get INFO --- MqttFX ClientModel : successfully 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/... INFO --- PublishController : publish INFO --- MqttFX ClientModel : attempt to add PublishTopic INFO --- MqttFX ClientModel : addPublishTopic : /a1***/device1/user/update/error INFO --- MqttFX ClientModel : successfully published message This is a publish test. to topic /a1***/device1/user/update/error
関連ドキュメント
-
IoT Platform は、リソースに制約のある低帯域幅環境の IoT で広く使用されている MQTT プロトコルをサポートしています。 詳細については、「MQTT プロトコル仕様」をご参照ください。
-
デバイスを IoT Platform に接続するには、「デバイス接続ガイド」をご参照ください。
-
トピックは、MQTT メッセージのパブリッシュとサブスクライブの仲介役として機能します。 トピックの概念と定義については、「トピックとは」をご参照ください。