このページでは、ゲートウェイが MQTT ブリッジを使用して、Cloud IoT Core と通信し、バインドされたデバイスに代わってテレメトリー イベントをパブリッシュする方法について説明します。始める前に、Cloud IoT Core での MQTT ブリッジの使用に関する一般的な情報について、MQTT ブリッジの使用をご確認ください。
MQTT ブリッジとともにゲートウェイを使用する
- ゲートウェイを作成して構成したら、MQTT ブリッジを介して Cloud IoT Core に接続します。
- まだ作成していない場合は、デバイスを作成します。
省略可: デバイスをゲートウェイにバインドします。
MQTT ブリッジを使用する場合、独自の JWT を生成できない場合にのみ、デバイスをバインドする必要があります。
省略可: デバイス オペレーションが成功したかどうかについてのフィードバックを得るには、システムエラーのトピックに登録します。
ゲートウェイを使用して、デバイスの代わりにテレメトリー、デバイスの状態、構成メッセージをリレーします。エンドツーエンドのデモを使って、実際にやってみてください。
ゲートウェイ メッセージ
ゲートウェイは、MQTT ブリッジを介して Cloud IoT Core に接続した後、3 つのタイプのメッセージを送受信できます。
- 制御メッセージ: デバイスをゲートウェイに接続するか、ゲートウェイから接続解除します。これらのメッセージは、ゲートウェイと Cloud IoT Core の間で送信されます。Cloud IoT Core は、ゲートウェイからの制御メッセージのみを受け入れます。別の種類のデバイスがコントロール メッセージを送信しようとすると、Cloud IoT Core は接続を終了します。
- ゲートウェイやデバイスからのメッセージ: デバイスに代わってゲートウェイによってリレーされるか、ゲートウェイ自体から直接送信されます。
- システム エラー メッセージ: デバイスの代わりにゲートウェイを MQTT システムのエラー トピックに登録すると、デバイスでエラーが発生するたびに、Cloud IoT Core によってゲートウェイにエラー メッセージが送信されます。
ゲートウェイにデバイスを接続する
ゲートウェイが Cloud IoT Core とのデバイス通信をプロキシできるようにするには、MQTT ブリッジを介して QoS 1 /devices/{device_ID_to_attach}/attach
の制御メッセージをゲートウェイにパブリッシュします。
デバイスの JWT を使用してデバイスを認証するようにゲートウェイを構成している場合、接続メッセージのペイロードには JSON 形式のトークン({ "authorization" : "{JWT_token}" }
)を含める必要があります。それ以外の場合、Cloud IoT Core はデバイスのゲートウェイとの関連付けをチェックして、デバイスの認証を行います。
成功のレスポンス
デバイスが承認されると、Cloud IoT Core は接続メッセージへのレスポンスとして、ゲートウェイに PUBACK メッセージを送信します。ゲートウェイは、PUBACK メッセージを受信すると、デバイスの代わりに Cloud IoT Core トピック(テレメトリーや構成メッセージなど)をパブリッシュし、登録できます。
ゲートウェイが接続メッセージを送信したときにデバイスがすでに接続されている場合、Cloud IoT Core は PUBACK メッセージで応答します。
ゲートウェイからデバイスを切断する
ゲートウェイからデバイスを切断するには、ゲートウェイで MQTT ブリッジを介して QoS 1 /devices/{device_ID}/detach
制御メッセージをパブリッシュします。メッセージの送信時にデバイスが接続されていない場合、Cloud IoT Core は切断の制御メッセージを無視し、PUBACK メッセージを送信します。
トラブルシューティング
デバイスでエラーが発生した場合に通知を受け取るには、QoS レベル 0 を使用してゲートウェイを MQTT /devices/{gateway_ID}/errors
トピックに登録します。
Go
デバイスをerrors
トピックに登録する手順は、以下のハイライト表示のとおりです。
Java
デバイスをerrors
トピックに登録する手順は、以下のハイライト表示のとおりです。
Node.js
例として、デバイスをconfig
トピックに登録する手順を以下にハイライト表示しています。errors
トピックに登録するには、/devices/${gateway_ID}/errors
を指定します。
Python
デバイスをerrors
トピックに登録する手順は、以下のハイライト表示のとおりです。
Cloud IoT Core は、ベスト エフォート方式で、QoS 0 上の配信で、ゲートウェイ エラーを送信します。ゲートウェイが /devices/{gateway_ID}/errors
に登録されていない場合、Cloud IoT Core は失敗イベントをログに記録しますが、PUBACK メッセージを送信しません。
MQTT エラーの構造は次のとおりです。
string error_type; // A string description of the error type. string device_id; // The ID of the device that caused the error. string description; // A description of the error.
エラー メッセージが MQTT メッセージによってトリガーされた場合、次の情報も同様に添付されます。
string message_type; // The string MQTT message type. string topic; // The MQTT topic if applicable, otherwise it is empty. int packet_id; // The packet ID of the MQTT message if applicable, otherwise it is zero.
エラーコードとエラー処理
エラーコード | 説明 | 推奨される対応 |
---|---|---|
GATEWAY_ATTACHMENT_ERROR | ゲートウェイの接続リクエストが失敗しました。 | 問題を解決してから再試行します。 |
GATEWAY_DEVICE_NOT_FOUND | ゲートウェイは、受信メッセージを処理する接続済みデバイスを見つけられませんでした。 | 問題を解決してから再試行します。 |
GATEWAY_INVALID_MQTT_TOPIC | ゲートウェイは、指定された MQTT トピックを解析できませんでした。トピックは、形式が正しくないか、無効なデバイス ID または名前を含んでいました。 | 問題を解決してから再試行します。 |
GATEWAY_UNEXPECTED_PACKET_ID | ゲートウェイはパケット ID に基づいてメッセージを処理できませんでした。たとえば、PUBACK にはパケット ID が含まれているものの、レスポンスを待機しているものがありません。 | 問題を解決してから再試行します。 |
GATEWAY_UNEXPECTED_MESSAGE_TYPE | ゲートウェイが、サポートされていない PUBREL や PUBREC などの予期しないメッセージを受信しました。 | 問題を解決してから再試行します。 |
GATEWAY_DETACHMENT_DEVICE_ERROR | デバイスのエラーにより、ゲートウェイがデバイスの接続を解除しました。 | 問題を解決してから再試行します。 |
不明 | 不明なエラーです。 | 指数バックオフを使用して再試行します。 |
詳細については、メインのエラー メッセージのドキュメントと MQTT バージョン 3.1.1 の仕様をご覧ください。