Azure IoT Hub使い方: メッセージ送信
Azure IoT Hubのメッセージの送信方法を学びつつ、メッセージ送信のAPI呼び出しをElixirで試してみる。
(記事作成にあたって画像の一部を透過処理しています)
記事作成時の環境
- EndeavourOS
- elixir 1.16.3-otp-26
- erlang 26.2.4
関連リポジトリ
目次
前提
下記リンクにリダイレクトしてAzureアカウント登録を行う
以後上記のURL先のAzureコンソールで操作を行う
Iot Hubを作成する
Iot Hubを作成するにはAzureのコンソールで次の操作を行う
- リソースの作成を選択する
- 「開始」-> 検索ボックスから「Iot Hub」を検索して選択
- IoT Hubを作成する
詳細は ## Iot Hub作成詳細を参照
IoT Deviceを作成する
IoT Deviceを作成するには、Azureのコンソールで次の操作を行う
- 「リソース」から「Iot Hubを作成する」で作成したリソースを選択
- 「デバイス管理」から「デバイス」を選択し、「デバイスの追加」をクリック
- 設定を入力して保存
詳細は ## Iot Device作成詳細を参照
SASトークンを生成する
SASトークンを作成するにはAzureのコンソールで次の操作を行う
- リソースの作成を選択する
- 「開始」-> 検索ボックスに「共有アクセス ポリシー」を検索して選択
メッセージを送信したいデバイス(ラズパイ等)で、次の作業を行う
- azure-cliをインストール
-
az login
でログインを行う -
az account set --subscription "<サブスクリプション ID>"
でサブスクリプションを指定 - "az iot hub generate-sas-token -n "を実行して、SASトークン生成
azure-cliはパッケージリポジトリにないので、下記のリンクからインストールを行う。
サブスクリプションIDは、Azureコンソールから次のようにして参照する
- リソースから作成したIoT Hubを選択
- 「概要」の「サブスクリプション」からサブスクリプション名をクリック
- 遷移先に「サブスクリプションID」があるのでそれをコピー
データを送信する
メッセージを送信するときに使用するAPIのエンドポイントは下記のようになる
"https://<IoT Hub名>.azure-devices.net/devices/<デバイスID>/messages/events?api-version=2018-06-30"
またヘッダーはSASトークンを含める必要がある。
Authorization: <SASトークン>
実行例
下記ブランチにAPIによるメッセージ送信を行うElixirコードをおいているので、そちらから実際のメッセージを試せる
iex -S mix
から関数を実行する前に、config.exs
に必要な設定を記述する。
次のような出力が出ると送信が成功している。
%HTTPoison.Response{
status_code: 204,
body: "",
headers: [
{"Content-Length", "0"},
{"Vary", "Origin"},
{"Server", "Microsoft-HTTPAPI/2.0"},
{"x-ms-request-id", "<リクエストID>"},
{"Date", "Wed, 03 Jul 2024 05:23:26 GMT"}
],
request_url: "https://<IoTHub名>.azure-devices.net/devices/<デバイスID>/messages/events?api-version=2018-06-30",
request: %HTTPoison.Request{
method: :post,
url: "https://<IoTHub名>.azure-devices.net/devices/<デバイスID>/messages/events?api-version=2018-06-30",
headers: [
{"Authorization", "SharedAccessSignature sr=<IoTHub名>.azure-devices.net&sig=<SASトークン>&se=<有効期限>&skn=iothubowner"},
{"Content-Type", "application/json"}
],
body: "{\"message\":\"<メッセージ>\"}",
params: %{},
options: []
}
}
Azure Potalのリソースからメッセージの送信を確認できる
結論
IoTデバイスからのメッセージ送信を実装する際には、下記を行う必要がある
- Azureアカウントを作成する
- IoT Hubを作成する
- IoT Deviceを作成する
- azコマンドをインストールする
- azコマンドでログインする
- azコマンドでサブスクリプションを設定する
- azコマンドでsasトークンを生成する
- メッセージ送信のAPI実行する
Iot Hub作成詳細
Iot Hub: 基本
次の設定項目が存在する
- プロジェクトの詳細
- サブスクリプション、リソースグループ
- インスタンスの詳細
- IotHub名、領域(ロケール)、レベル、1 日あたりのメッセージの制限
プロジェクト詳細ではサブスクリプションとリソースグループを設定する。
デフォルトでアカウントに紐付けされた「Azure subscription 1」というサブスクリプションがある。(あとから名前変更できる)
とりあえずそれをサブスクリプションに設定する。
リソースグループはデフォルトでは作成されていない。
ここでは「チュートリアル」という名前で作成し、これを指定する。
インスタンスの詳細ではIotHub名、領域(ロケール)、レベル、1 日あたりのメッセージの制限を設定する。
IotHub名は省略する。
領域(ロケール)は「Japan West」か「Japan East」どちらか。
今回はレベルを「無料」に指定。
その場合は1 日あたりのメッセージの制限は「8,000 ($0/月)」に指定されるのでそのまま。
Iotハブ: ネットワーク
この項目では接続の構成を設定する。
「パブリックアクセス」「プライベートアクセス」のどちらかを選ぶ。
今回はパブリックを選択。
Iotハブ: 確認および作成
あとの設定はデフォルトに指定すると「確認および作成」の項目は次のようになる。
Iot Device作成詳細
デバイスIDをIot Hub内で一意に設定する。
あとはデフォルトで良い
下記のような設定となる