IoT Centralの認知度が上がってきたのか、最近、いくつか質問が来ます。
都度、答えていると回答がブレる回答に時間がかかるので、、、ちょっと取りまとめておきます。
デバイスからAzure IoT Centralに接続するには?
公式には、IoT Centralのデバイス受け口にCloud Gatewayがあり、実体はIoT Hubであることが書かれています。
しかし、デバイスの接続情報を見ると、(みんな大好き)IoT Hub接続文字列ではなくて、スコープIDやデバイスIDなんです。
スコープIDとかで、どうやってIoT Hubに接続するの!?となりますが、、、
公式には書かれていませんが、IoT CentralのIoT Hubのデバイスに接続するには、IoT Hub DPSでプロビジョニングをするのが正しい形なのです。
図にするとこんな感じ。
- IoT Hub DPSのglobal.azure-devices-provisioning.net(グローバルデバイスエンドポイントと呼ばれている)に接続して、スコープIDやデバイスID、資格情報を渡します
- IoT Hub DPSから、IoT Hub接続文字列が返ります
- 受け取ったIoT Hub接続文字列を使って、IoT Hubに接続します
Azure IoT SDKを使う(使うべき!)なら、
します。
Provisioning client SDKをインプリせずに接続
ここでちょっと問題が。
デバイスによってはAzure IoT SDKがポーティングされていないようです。
2が多いみたい。
そんなデバイスにオススメなのが、コマンドラインツールでプロビジョニングだけ行う方法です。
dps_cstrコマンドを使うと、デバイスのプロビジョニングを実行して、IoT Hub接続文字列を得ることができます。
C:\>dps_cstr 0ne0005C434 34f65b8f-6c9f-43ad-a7bd-XXXXXXXXXXXX 3p4z+hFUOB5kvtn2aElI14M4Fa7vmw6mXXXXXXXXXXXX ... Registration Information received from service: iotc-bc1c5eb9-e03c-4657-b971-XXXXXXXXXXXX.azure-devices.net! Connection String: HostName=iotc-bc1c5eb9-e03c-4657-b971-XXXXXXXXXXXX.azure-devices.net;DeviceId=34f65b8f-6c9f-43ad-a7bd-XXXXXXXXXXXX;SharedAccessKey=3p4z+hFUOB5kvtn2aElI14M4Fa7vmw6mXXXXXXXXXXXX C:\>
予めPCでdps_cstrコマンドでIoT Hub接続文字列を取得して、これを使ってデバイスからIoT Hubに接続する、、、なら、IoT Hubの知識だけでデバイスとIoT Centralを連携することができます。お手軽ですね。
た・だ・し!
作法としては、デバイスが接続する都度、IoT Hub DPSとやりとりするのが正しいので、この方法は開発時だけにとどめておきましょう。
まとめ
- デバイスからIoT Centralへの接続は、IoT Hub DPS -> IoT Hub
- IoT Hub DPSをスキップしたいときは、dps_cstrコマンドで
余談
わたしがIoT Centralの動きを調べるときに使うデバイスは、、、
プロビジョニング以外の部分は、MT3620開発ボード。(Azure Sphere)
プロビジョニングを含むときは、ReButton。
を使っています。
この話は、機会があればどこかで。