このトピックでは、デバイス、IoT Platform、およびサーバー間の通信でよくあるメッセージングの問題とソリューションについて説明します。
|
カテゴリ |
質問 |
|
アップリンクメッセージとダウンリンクメッセージ |
|
|
トピックのサブスクリプション |
|
|
メッセージ転送 |
|
|
メッセージの保存 |
|
|
メッセージのクエリ |
重複メッセージの処理
QoS レベル 1 は、少なくとも 1 回の配信を保証するため、デバイスが重複メッセージを受信することがあります。これらの重複メッセージには同じメッセージ ID が含まれており、デバイスはこの ID を使用して重複排除を行うことができます。また、IoT Platform は、重複した QoS レベル 1 メッセージの送信を最小限に抑えます。
MQTT デバイスがデータを受信できない
デバイスがデータを受信できない場合は、次の項目を確認して原因を特定してください:
-
デバイスが正しいトピックにサブスクライブしているかどうかを確認してください。MQTT デバイスは、サブスクライブしているトピックからのみメッセージを受信できます。
-
デバイスが断続的にメッセージを見逃す場合:デバイスアプリケーションのコールバックに時間のかかるロジックがないか確認してください。ある場合は、コールバックをブロックしないように、このロジックを別のスレッドに移動してください。
-
アプリケーションが初期化中にトピックにサブスクライブするようにしてください。サブスクリプションが完了する前に送信されたメッセージは、失われる可能性があります。
-
デバイスがオフライン中に送信された QoS 1 メッセージを受信するには、MQTT 接続パラメーター cleanSession を false に設定してください (つまり、cleanSession は false でなければなりません)。
メッセージストレージ
メッセージがトピックにパブリッシュされると、IoT Platform は直ちに、そのトピックにサブスクライブしているデバイスにメッセージを転送します。
-
QoS 0 メッセージ:IoT Platform は保存しません。
-
QoS 1 メッセージ:IoT Platform は 7 日間保存します。
デバイスのデータ保持期間
-
QoS 0 メッセージ: IoT Platform では保存しません。
-
QoS 1 メッセージ: IoT Platform では 7 日間保存します。
過去 7 日間の通信ログは、インスタンスの IoT Platform コンソールの ページで確認できます。詳細については、「ログサービス」をご参照ください。
メッセージ配信の遅延またはタイムアウト
不安定なネットワーク接続は、この問題の一般的な原因です。
デバイスのネットワーク接続をテストするには、次の手順を実行します。
-
IoT Platform コンソールにログインします。
-
[概要] ページで、インスタンスを見つけ、その [ID] またはエイリアスをクリックします。
-
左側のナビゲーションペインで、[デバイス > デバイス] を選択します。
-
[デバイス] ページで、[デバイス名] または [エイリアス] でデバイスを検索します。
-
デバイスの[操作]列で、[表示]をクリックします。
-
[デバイス情報] タブで、[リアルタイム遅延] の横にある [テスト] をクリックします。
-
[OK] をクリックしてテストを開始します。
手順 6 と 7 を繰り返して、より多くのデータを収集してください。レイテンシーが常に高い場合は、ネットワーク接続が不安定であることを示しています。
Will メッセージおよび Retained メッセージのサポート
はい。IoT Platform は、MQTT 5.0 で Will メッセージおよび Retained メッセージをサポートしています。詳細については、「IoT Platform でサポートされている MQTT 5.0 の機能」をご参照ください。
サーバー側のメッセージ取得
サーバーは、次の 2 つの方法でデバイスメッセージを取得できます。
-
サーバー側サブスクリプション: IoT Platform のサーバー側サブスクリプションを使用して、1 つ以上のメッセージタイプにサブスクライブします。サブスクリプション設定に基づき、IoT Platform はプロダクト配下のすべてのデバイスから、指定したタイプのメッセージをサーバーに転送します。IoT Platform は、次のサーバー側サブスクリプションタイプをサポートしています:
-
AMQP サーバー側サブスクリプション: AMQP SDK を使用して、IoT Platform が転送するデバイスメッセージを受信します。
-
MNS サーバー側サブスクリプション: MNS SDK を使用して、IoT Platform が Simple Message Queue (formerly MNS) (SMQ) のキューに転送するデバイスメッセージを受信します。
-
-
データ転送:データ転送ルールに基づき、指定したデバイスのデータを Simple Message Queue (formerly MNS) (SMQ) のキューまたは Message Queue for Apache RocketMQ のキューにルーティングするには、データ転送を使用します。サーバーは、MNS SDK または Message Queue for Apache RocketMQ SDK を使用してメッセージを消費します。詳細については、「データ転送の概要」をご参照ください。
SMQ キューにコンソールメッセージが届かない
IoT Platform は、コンソールまたはクラウド API から送信されたメッセージをサーバー側のメッセージと見なすため、Simple Message Queue (formerly MNS) (SMQ) キューに転送しません。アップストリームデバイスメッセージ、デバイスステータス変更の通知、デバイスタグ変更など、デバイスから発信されたメッセージのみが SMQ キューにルーティングされます。
ソース トピックの特定
Simple Message Queue (formerly MNS) (SMQ) 内のメッセージは、次のフォーマットです。
{
"messageid": "12345",
"messagetype": "status/upload",
"topic": "null/topic",
"payload": {},
"timestamp": 1469564576
}
topic フィールドは、ソース トピックを示します。
デバイスへのコマンド送信
次の IoT Platform API を呼び出して、デバイスにメッセージを送信できます。
|
API |
説明 |
|
カスタムトピックを使用して、指定されたデバイスにメッセージを送信します。 |
|
|
カスタムトピックを使用して、指定されたプロダクト内の複数のデバイスにメッセージを送信します。 |
|
|
指定されたプロダクト内のオンラインデバイスにメッセージをブロードキャストします。 すべてのオンラインデバイスを対象にすることも、特定のトピックをサブスクライブしているデバイスのみを対象にすることもできます。 |
|
|
指定されたデバイスにリクエストメッセージを送信し、レスポンスを同期的に返します。 |
|
|
指定されたデバイスについて、Thing Specification Language (TSL) プロパティの値を設定します。 |
|
|
指定されたプロダクト内の複数のデバイスについて、Thing Specification Language (TSL) プロパティの値を設定します。 |
|
|
単一のデバイスで、指定された Thing Specification Language (TSL) サービスを呼び出します。 |
|
|
指定されたプロダクト内の複数のデバイスで、指定された Thing Specification Language (TSL) サービスを呼び出します。 |
デバイス間通信
はい。同じインスタンス内のデバイスは相互に通信できます。
データ転送またはメッセージルーティング機能を使用して、一方のデバイスのトピックから別のデバイスのトピックへメッセージを転送し、デバイス間通信を実現できます。
-
Thing-Model データのレポート用トピックなど、デバイスのトピックから他のトピックへデータを転送できます。詳細については、「他のトピックにデータを転送する」をご参照ください。
-
データ転送を介してスマートライトをモバイルアプリに接続するには、「データ転送を使用したデバイス間のM2M 通信」をご参照ください。
-
メッセージルーティングを介してスマートライトをモバイルアプリに接続するには、「メッセージルーティングを使用したデバイス間のM2M 通信」をご参照ください。
QoS 2 メッセージの失敗
IoT Platform は QoS 0 と QoS 1 をサポートしていますが、QoS 2 はサポートしていません。
詳細については、「MQTT プロトコル仕様」をご参照ください。
デバイス接続とステータスの同期
サーバー側サブスクリプションを使用してデバイスのステータスの更新メッセージをサブスクライブし、デバイスの接続情報とステータス情報の同期を保ちます。
詳細については、「サーバー側サブスクリプション」をご参照ください。
デバイスデータの可視化
-
サーバー側サブスクリプションまたはデータ転送を使用して、デバイスデータをサーバーまたはデータベースに転送できます。その後、独自のデータ可視化ソリューションを構築できます。
詳細については、「サーバー側サブスクリプション」および「データ転送 (新バージョン)」をご参照ください。
-
IoT Platform のサーバー側 SDK を使用して API を呼び出し、デバイスから報告されたデータを取得してから、独自のデータ可視化ソリューションを構築します。
デバイスデータを取得するために、次の API を使用できます:
API
説明
指定されたデバイスのプロパティスナップショットを照会します。
デバイスから報告されたロープロパティスナップショットを照会します。これには、Thing モデル の検証に合格したプロパティと失敗したプロパティが含まれます。
デバイスから報告されたロープロパティレコードを照会します。これには、Thing モデル の検証に合格したレコードと失敗したレコードが含まれます。
デバイスから報告されたローイベントレコードを照会します。これには、Thing モデル の検証に合格したイベントと失敗したイベントが含まれます。
デバイスによって開始されたサービス呼び出しのローレコードを照会します。これには、Thing モデル の検証に合格した呼び出しと失敗した呼び出しが含まれます。
デバイスの期待されるプロパティ値を照会します。
指定された時間範囲内のデバイスの単一プロパティのデータを照会します。
指定された時間範囲内のデバイスの複数のプロパティのデータを照会します。
デバイスのイベントレコードを照会します。
デバイスのサービス呼び出しレコードを照会します。
データサービスに保存されている時系列データを照会します。
データサービスに保存されている時系列データのスナップショットデータを照会します。
API による 16 進数メッセージのパブリッシュ
IoT Platform コンソールでは、[オンラインデバッグ]、[デバイスシミュレーター]、またはデバイス詳細ページの[Topicリスト] タブを使用して 16 進数メッセージを送信することはできません。
Pub、BatchPub、またはPubBroadcast API を使用して 16 進数メッセージを送信できます。MessageContent パラメーターは、Base64 エンコードされた元のメッセージ (文字列または 16 進数のバイト配列) である必要があります。
お使いのビジネスサーバーが API 経由でメッセージを送信すると、IoT Platform はデバイスに転送する前に、そのメッセージを自動的に Base64 デコードします。
デバイスデータのエクスポート
IoT Platform は、QoS 0 メッセージを最大 1 日間、QoS 1 メッセージを最大 7 日間保存します。
Data Service のデータストレージ機能を使用して、オフラインのデバイスデータと時系列データを保存できます。オフラインデータには、プラットフォームシステムテーブル、時系列テーブル、スナップショットテーブル、カスタムストレージテーブルが含まれます。デバイスの時系列データには、デバイスから報告された Thing Model データ (プロパティ、サービス、イベント) と、時系列データストレージルールで構成されたカスタムトピックデータが含まれます。詳細については、「データストレージの設定」をご参照ください。
-
デバイスデータを取得するには、API を使用してデータを照会し、独自のサーバーにプッシュします。
-
カスタムトピックデータ
-
時系列データの照会: QueryDevicesHotStorageData。
-
スナップショットデータのステータスの照会: QueryDevicesHotStorageDataStatus。
-
-
Thing Model データ
-
デバイスまたはデジタルツイン ノードのすべてのプロパティスナップショット: QueryDevicePropertyStatus。
-
デバイスから報告された元のプロパティのスナップショット (Thing Model の検証の成否にかかわらず、すべてのプロパティ): QueryDeviceOriginalPropertyStatus。
-
デバイスから報告された元のプロパティのレコード (Thing Model の検証の成否にかかわらず、すべてのプロパティ): QueryDeviceOriginalPropertyData。
-
デバイスから報告された元のイベントのレコード (Thing Model の検証の成否にかかわらず、すべてのイベント): QueryDeviceOriginalEventData。
-
デバイスが呼び出した元のサービスのレコード (Thing Model の検証の成否にかかわらず、すべてのサービス): QueryDeviceOriginalServiceData。
-
-
Data Service のストレージテーブルのデータ
-
プラットフォームシステムテーブルと時系列またはスナップショットテーブルのデータの照会: CreateDownloadDataJob および GetDownloadFile。
-
-
Data Service の Data API
Data Service API でクエリタスクを実行して、データソースから特定のデータを取得します: ListAnalyticsData。
-
-
デバイスデータを長期間保存したり、ストレージコストを削減したり、さらにデータ処理 (SQL 分析、Data API など) を実行したりする必要がある場合は、デバイスデータソースをバックアップできます。プロダクトのデータバックアップを有効にすると、IoT Platform は [オフラインストレージ] にプロダクトに対応する [時系列/スナップショットテーブル] を自動的に作成します。これらのテーブルには、[プロダクトプロパティ時系列テーブル]、[プロダクトプロパティスナップショットテーブル]、[プロダクトイベントテーブル] が含まれます。
16 進数データの AMQP サブスクリプション
はい。
16 進数データを転送するには、次の手順に従います。
-
カスタムトピックを使用して、16 進数フォーマットでデータをアップロードするようにデバイスを設定します。詳細については、「カスタムトピックを使用した通信」をご参照ください。
-
カスタムトピックのデバイス報告メッセージをサブスクライブするように、メッセージ転送を設定します。
-
AMQP サーバーサイドサブスクリプションを設定する: Alibaba Cloud IoT Platform で、[プッシュメッセージタイプ] を [デバイスが報告したメッセージ] に設定します。
-
AMQP サーバー側コンシューマーグループへのデータ転送: メッセージパーサーで、
payload('binary')関数を使用し、デバイスから報告されたデータをバイナリデータとしてパススルーします。データ転送パーサーがサポートする関数の詳細については、「関数一覧」をご参照ください。
-
-
AMQP クライアント SDK を使用して、デバイスからのカスタムメッセージを取得します。
Alibaba Cloud IoT Platform は、次の言語の AMQP SDK のサンプルコードを提供しています。
Python 3 および PHP 用の AMQP クライアント SDK は、STOMP プロトコルを使用して Alibaba Cloud IoT Platform と通信します。これらの SDK を使用する場合、プッシュする前にペイロードを Base64 エンコードする必要があります。そうしないと、ペイロードが切り捨てられる可能性があります。
SDK の使用方法の詳細については、「AMQP クライアント接続」をご参照ください。
コンシューマーグループと AMQP メッセージキューのマッピング
はい。
最大 128 の AMQP クライアントが、単一の AMQP メッセージキューからメッセージを消費できます。
デバイスの単一 AMQP キューへのマッピング
はい。
ルールエンジンを使用して、AMQP サーバーにサブスクライブするコンシューマーグループへのデータ転送を設定します。メッセージ転送パーサーでは、topic(number) や deviceName() などの関数を if 文で使用して、デバイスを選択し、そのメッセージを AMQP メッセージキューに転送します。
以下に、パーサースクリプトのサンプルを示します:
// デバイスのメッセージペイロードを取得し、JSON として解析します。
var data = payload("json");
// デバイス名を取得します。
var dn = deviceName();
// メッセージが 'device01' からの場合、そのデータを転送します。
if (dn == 'device01') {
writeAmqp(1000, data, "Debug");
}
パーサースクリプトの詳細については、「スクリプト構文」をご参照ください。メッセージ転送パーサーの設定手順については、「AMQP サーバーにサブスクライブするコンシューマーグループへのデータ転送」をご参照ください。
アプリへのデバイスオンラインステータスの通知
IoT Platform のサーバー側サブスクリプション機能を使用すると、デバイスステータス変更メッセージを受信できます。この機能を使用するには、アプリまたはミニアプリをホストするサーバーに AMQP クライアントをデプロイして起動します。
実装は次のとおりです:
-
AMQP サーバー側サブスクリプションの設定:IoT Platform コンソールで、デバイスステータス変更メッセージをプッシュするようにサーバー側サブスクリプションのコンシューマーグループを設定します。
-
AMQP クライアントの統合:アプリまたはミニアプリをホストするサーバーで、AMQP クライアントをデプロイして起動し、IoT Platform に接続します。
デバイスステータス変更メッセージのデータフォーマットについては、「デバイスのオンライン/オフラインステータス」をご参照ください。AMQP クライアントがメッセージを受信した後、アプリまたはミニアプリにメッセージを表示するロジックを実装する必要があります。
-
デバイス接続:デバイスが IoT Platform に接続すると、プラットフォームはそのステータス情報を消費のために AMQP クライアントに転送します。
Pub API 呼び出し後にメッセージが受信されない
デバイスは、Pub API 呼び出しで指定されたトピックをサブスクライブしていません。
デバイスがトピックからメッセージを受信するには、そのトピックをサブスクライブしている必要があります。トピックをサブスクライブするには、SubscribeTopic API を呼び出してください。
トピックのサブスクライブと表示
-
デバイスは、能動的にトピックをサブスクライブする必要があります。サブスクリプションが成功すると、IoT Platform コンソールのインスタンスの [デバイス] 詳細ページにある [トピックリスト] にトピックが表示されます。
-
デバイスがどのトピックにもサブスクライブしていない場合、その詳細ページの [トピックリスト] タブは空になります。
トピックのサブスクライブ
デバイスは、次の方法でトピックをサブスクライブできます:
-
IoT プラットフォームが提供する C Link SDK (バージョン 3.1、3.2、および 4.x) または Python Link SDK を使用する場合、デバイスは [サブスクライブ] 権限を持つ基本的な通信トピックおよび Thing Model トピックに自動的にサブスクライブします。
[サブスクライブ] 権限を持つカスタムトピックを作成した後、SDK の以下の API を使用してカスタムトピックをサブスクライブできます:
-
C Link SDK バージョン 3.1 および 3.2 の場合: IOT_MQTT_Subscribe。
-
C Link SDK バージョン 4.x の場合: aiot_mqtt_sub。
-
Python Link SDK の場合: lk.subscribe_topic(topic, qos=1) 。
カスタムトピックの作成時にプロキシサブスクリプションを有効にすると、デバイスが接続を確立した際に、IoT Platform はデバイスをそのトピックに自動的にサブスクライブさせます。
カスタムトピックを追加するには、「カスタムトピックを使用した通信」をご参照ください。
-
-
デバイスシミュレーターの起動:IoT Platform が提供するデバイスシミュレーター機能を使用すると、デバイスは基本的な通信トピックと Thing モデルトピックに自動的にサブスクライブします。
[サブスクライブ] 権限を付与したカスタムトピックを作成すると、アップストリームコマンドデバッグ機能を使用してそのトピックにサブスクライブできます。
-
MQTT.fx を使用して IoT Platform に接続する:デバイスがオンラインになった後、[サブスクライブ] 機能を使用してデバイストピックをサブスクライブします。
-
SubscribeTopic:デバイスが IoT Platform に接続した後、この API を呼び出してデバイストピックにサブスクライブします。
[サブスクライブ] 権限を持つカスタムトピックを作成した後、SubscribeTopic API を呼び出してトピックをサブスクライブできます。
サブスクライブしたトピックの表示
以下のいずれかの方法で表示できます:
-
QueryDeviceSubTopic API を呼び出して、デバイスのサブスクライブ済みトピックをクエリします。
AMQP サブスクリプションで RRPC メッセージを受信できない理由
RRPC 通信は同期プロセスです。サーバー側がデバイスにリクエストを送信し、応答を待機します。IoT Platform は、RRPC 通信メッセージに対する AMQP のサーバー側サブスクリプションをサポートしていません。
RRPC 通信の詳細については、「MQTT 同期通信 (RRPC)」をご参照ください。
カスタムトピックの標準 JSON フォーマット
IoT Platform は、カスタムトピック経由の通信に特定のデータフォーマットを要求しません。フォーマットはユーザーが定義します。
トピック、およびデバイスと IoT Platform 間の通信に必要な [Alink JSON] 形式の詳細については、「Alink プロトコル」ドキュメントをご参照ください。
プロダクトを作成するときに [データフォーマット] を [パススルー/カスタム] に設定した場合、メッセージ解析を設定する必要があります。 この設定により、デバイスがカスタムトピックを介して送信するカスタム形式のペイロードが JSON 形式に解析されます。 詳細については、「カスタムトピックのメッセージ解析」をご参照ください。
Thing モデル通信エラー: "5092 - property not found"
このエラーは、アップリンクまたはダウンリンク メッセージ内のプロパティが Thing モデルで定義されていないことを意味します。
考えられる原因:
-
プロパティが Thing モデルで定義されていません。IoT Platform コンソールに移動してプロパティ定義を確認し、必要なプロパティを追加してください。「Thing モデルの追加」をご参照ください。
-
プロパティがカスタムモジュールで定義されています。アップリンクおよびダウンリンク通信の場合、プロパティの前にカスタムモジュールの識別子を次のフォーマットで付加する必要があります:
{tsl.functionBlockId}:{tsl.properties.identifier}
Thing モデルのフィールドの詳細については、「Thing モデルの TSL フィールドリファレンス」をご参照ください。メッセージ関連のエラーコードの詳細については、「クラウドランタイムログのエラーコード」をご参照ください。
プロパティ設定: デバイスの応答エラー 6335
Thing モデルでは、プロパティ設定メソッドの応答が空であると定義されています。そのため、IoT Platform がプロパティ設定コマンドをデバイスに送信する場合、デバイスの応答メッセージ内の data フィールドは空でなければなりません。data が空でない場合、エラーが発生します。
エラーコードの詳細については、「クラウド側の実行ログのエラーコード」をご参照ください。
デバイスのトピックマッチング
はい。物理デバイスのトピックは、プロダクト内の対応するデバイスのものと一致する必要があります。
クロスデバイスでのトピックのサブスクリプション
いいえ。デバイスは、自分自身のトピックにしかサブスクライブできません。
すべてのデバイスからのメッセージ受信
サーバーでデバイスメッセージを受信するには、AMQP サーバー側サブスクリプションを使用します。 詳細については、「AMQP サーバー側サブスクリプションの使用」をご参照ください。
共有デバイス証明書によるサブスクリプションの失敗
-
1 つのデバイス証明書は、同時に 1 台のデバイスでのみ使用できます。ハードウェアデバイスと MQTT クライアントは、別々のデバイス証明書を使用して IoT Platform に接続する必要があります。
-
デバイスは自身のトピックにのみサブスクライブでき、他のデバイスのトピックにメッセージをパブリッシュすることはできません。
-
データ転送 機能または トピックベースのメッセージルーティング 機能を使用して、あるデバイスのトピックから別のデバイスのトピックへメッセージを転送し、デバイス間の通信を実現できます。
例:
-
モノのモデルデータをレポートするトピックから他のトピックへデバイスデータを転送するには、「他のトピックにデータを転送する」をご参照ください。
-
データ転送 機能を使用してスマートライトをモバイルアプリに接続するには、「メッセージ転送に基づく M2M デバイス通信」をご参照ください。
-
トピックベースのメッセージルーティング 機能を使用してスマートライトをモバイルアプリに接続するには、「トピックメッセージルーティングに基づく M2M デバイス通信」をご参照ください。
-
トピックの操作権限
-
IoT Platform は、基本トピックとモノモデルトピックの操作権限を事前定義しており、変更することはできません。これらの権限を表示するには、次の手順に従います。
-
IoT Platform コンソールにログインします。
-
コンソールの左上隅で、インスタンスが配置されているリージョンを選択します。
-
[インスタンスの概要] タブの [すべての環境] で、インスタンスを見つけてそのカードをクリックします。
-
左側のナビゲーションペインで、を選択します。
-
[製品] ページで、製品を見つけ、[アクション] 列の [表示] をクリックします。
-
[製品詳細] ページで、[トピックカテゴリリスト] タブをクリックします。 [基本トピック] タブと [物モデルトピック] タブでトピックリストを表示できます。
トピックリストの[操作権限]列には、各トピックの[発行]および[サブスクライブ]権限が表示されます。
[モノモデルトピック] タブの表には、[機能]、[トピックカテゴリ]、[操作権限]、[説明] の列があります。この表には、プロパティのレポート、プロパティの設定、イベントのレポート、サービスの呼び出し などの機能に対応するトピックパス (
/sys/${ProductKey}/${DeviceName}/thing/event/property/postなど) と、それぞれのパブリッシュ権限またはサブスクライブ権限が一覧表示されます。
-
-
QueryProductTopic API を使用して、プロダクトのカスタムトピックカテゴリの詳細を照会します。
クラウド側の実行ログのエクスポート
いいえ、できません。
-
Log Service を有効化 し、IoT Platform コンソールでクラウド側の実行ログの転送を有効にすることができます。これにより、ログを Log Service の Logstore にエクスポートして長期保存できます。手順については、「クラウド側の実行ログの転送」をご参照ください。
ログ転送機能を有効にすると、Log Service はログを保存するために次のリソースを自動的に作成します。その後、転送されたクラウド側の実行ログを Log Service で表示できます。
-
プロジェクト:
iot-log-${uid}-${regionId}。このフォーマットでは、${uid}は Alibaba Cloud アカウント ID で、${regionId}は IoT Platform サービスのリージョン ID です。 -
Logstore: [iot-logs]。
-
IoT Platform: 単一のデバイスメッセージを複数のサーバーに配信
AMQP サーバー側サブスクリプションの場合、コンシューマーグループは単一の AMQP メッセージキューにマッピングされます。複数のコンシューマーを起動して同じコンシューマーグループにバインドすると、各デバイスメッセージはランダムにそのうちの 1 つにのみ配信されます。すべてのメッセージのコピーを各コンシューマーに送信するには、各コンシューマーを異なるコンシューマーグループにバインドしてください。
詳細については、次のトピックをご参照ください。
-
AMQP サーバー側コンシューマーグループの設定:「AMQP サーバー側サブスクリプションの設定」または「コンシューマーグループへのデータ転送」
-
サーバーでの AMQP コンシューマーの起動:「AMQP クライアントの接続」
複数デバイスへのブロードキャストメッセージ
IoT Platform の PubBroadcast インターフェイスでは、特定のプロダクト内の複数のオンラインデバイスにブロードキャストメッセージをパブリッシュできます。対象は、すべてのオンラインデバイス、または指定のトピックをサブスクライブしているデバイスのみとすることができます。
IoT Platform サーバー側サブスクリプションエラー 9203
このエラーは、サーバー側サブスクリプションの AMQP クライアントまたは Simple Message Queue (formerly MNS) (SMQ) クライアントがオフラインであることが原因です。AMQP クライアントを接続するには、「AMQP クライアントの接続」をご参照ください。MNS クライアントを接続するには、「MNS コンシューマークライアントの開発」をご参照ください。
デバイスのサブスクリプション頻度
デバイスは 1 回のサブスクライブで十分ですが、電源投入のたびにサブスクライブすることを推奨します。これにより、コード内の対応するコールバックが確実にトリガーされます。
サブスクリプション前のメッセージ送信
いいえ。デバイスは、通信トピックにサブスクライブして初めて、その通信トピックからメッセージを受信します。詳細については、「通信トピックの使用」をご参照ください。
クライアントの接続とプロパティ変更のサブスクリプション
-
AMQP サーバー側サブスクリプションの構成:IoT Platform で、[メッセージタイプ] を [デバイスが報告したメッセージ] に設定します。
-
AMQP クライアント SDK を使用して IoT Platform に接続し、サブスクライブした、デバイスプロパティデータを含むデバイスが報告したメッセージを受信します。
Alibaba Cloud IoT Platform は、以下の言語向けの AMQP クライアント SDK のサンプルコードを提供しています:
Python 3 および PHP 向けのクライアント SDK は、STOMP プロトコルを使用して IoT Platform と通信します。これらの SDK を使用する場合は、プッシュする前にメッセージの内容を Base64 エンコードする必要があります。そうしないと、メッセージの内容が切り捨てられる可能性があります。
SDK の使用方法の詳細については、「AMQP クライアントの接続手順」をご参照ください。
クロスアカウント権限付与
-
デバイス配布機能を使用して、ソースインスタンスから別のアカウントのターゲットインスタンスにデバイスを配布します。これにより、ターゲットアカウントはこれらのデバイスのデータを表示できるようになります。使用制限と詳細な手順については、「デバイス配布」をご参照ください。