1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

環境センサーを使ってAzure IoT Hub Device Provisioning Serviceを試してみる

Posted at

はじめに

IoT Hub Device Provisioning Service(以下DPS)というのがありまして、IoTHubへの接続情報をデバイス側にハードコードしないで済みそうなサービスがあったので試してみました。

以下のような構成ではIoTHubのEndpointがデバイス側にべた書きになるので、IoTHubのEndpointを変更する場合はデバイス側にも手を入れなければならなかったり、動的にEndpointを取得する仕組みが必要でした。

IoTHub.drawio.png

DPSはデバイスの検証・IoTHubへのデバイスの登録など一連のプロセスを行ってくれるので、デバイス側はDPSのEndpointや認証情報だけ知っておけばよいことになります。DPSのエンドポイントは全世界共通というのがポイントなわけです。
このエンドポイントをグローバル デバイス エンドポイントと呼び、global.azure-devices-provisioning.netになります。

image.png

大量のデバイスを扱う場合はもちろん便利ですが、少ないデバイスでも接続先のIoTHubを簡単に切り替えられる状況は色々と考えられるので利用しない手はなさそうです。

前準備

デバイスの準備

M5StickCPlusと気温、湿度、気圧が取れるHATを使いました。5000円くらいかかりました。

デバイス側のコーディング

  • UIFlowを使いました。
  • ビジュアルプログラミング言語Blocklyというのを使って、簡単にデバイス側のプログラミングができます。子供と一緒にscratchをやったことがあったので特にハードルはなくすんなりとは入れました。
  • こいつがすごいのはAWSやAzureに接続するブロックがあらかじめ用意されていることです。DPSに接続するにはAzure IoTHub SDKを使うわけですがもちろん組み込み済です。ありがたい・・・・。

IoTHubとDPSを用意しておく

IoTHubとDPSを作ります。名前以外は迷う部分がないので省略。

IoT Explorerのインストール・設定

IoT ExplorerでTelemetryを確認したいので、インストールしておきます。私はChocolateyでインストールしました。

IoT Explorerに設定する接続文字列は共有アクセスポリシーからiothubownerとか選択すれば接続文字列が拾えますので設定しておきましょう

image.png

DPS経由でデバイスを接続してIoTHubにTelemetryを流す

DPSの設定(IoTHub & デバイス)

DPSにIoTHubを紐づけます

image.png

DSP経由でデバイスを登録します

image.png

デバイス側の設定

DPS接続に必要なIDスコープ, デバイスID, 主キーを取得します。

IDスコープをコピー

image.png

デバイスIDと主キーをコピーする
先ほどデバイスIDは明示しませんでしたので、m5stickcplus-uzresk-001が使われます

image.png

UIFlowに設定していきます。IoTCentralはDPS接続なのでIoTCentralの部品をそのまま使います。

image.png

10秒間隔で室温、湿度、気圧をmapにしてjsonに変換してIoTHubに送ります

image.png

これをjsonにするとこんな感じ

{
    "humidity": 36.43397,
    "pressure": 100459.4,
    "temperature": 35.63592
}

IotHub Explorerで覗いてみる

RefreshするとIoTHubExplorerでデバイスが出てきた!

image.png

左メニューから「Telemetry」を選択してイベントを拾ってみます。ちゃんと送信されてきてますね

image.png

DPSに複数のIoTHubを紐づけてみる

2つ目のIoTHubを作ります

image.png

DPSに先ほど作ったIoTHubを紐づけます

image.png

デバイスにIoTHubを紐づけます

image.png

デバイスをIoTHubに割り当てる方法は色々あります

  • 「加重が均等に分布」とうのはデバイスとIoTHubの分布が均等という意味です。はじめ通常のHTTPロードバランサと同じで、デバイスから送られてくるリクエストごとに接続先のIoTHubが変わるのかと勘違いしてました・・・。
  • 「静的な構成」というのは接続先のIoTHubを固定化するという意味です。
  • 「最短待機時間」というのは近いIoTHubに繋ぐ。という意味になるのでリージョンごとにIoTHubをデプロイしておいた場合、距離の近いほうに優先して接続する方法です

このほかFunctionに振り分けをお願いする方法もあるようです。ここは色々と妄想が膨らみそうですね

フェイルオーバー?

IoTHub Aがなんらかの理由で利用できなくなり、「静的な構成」でIoTHub Bに設定しなおしたら自動的にそちらにテレメトリが送信されるのかな?と気になって試してみました。

  • 結果、IoTHubBに自動でテレメトリが送信されるということはありませんでした(そりゃそうだ)。デバイスとDPSの検証時にどのIoTHubに接続されるかが決められるので、デバイスを再起動(IoTHubSDKで初回接続したとき)しないと接続先は変わりませんでした。

おわりに

  • デバイス側でSDKが使えることっていうのが前提としてありますが、デバイスの管理・接続先の管理をDPSにお任せできるのはすごく魅力的ですね。

参考

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?