2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Azure IoT Hub使い方: メッセージ送信

Posted at

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のコンソールで次の操作を行う

  1. リソースの作成を選択する
  2. 「開始」-> 検索ボックスから「Iot Hub」を検索して選択
  3. IoT Hubを作成する

詳細は ## Iot Hub作成詳細を参照

IoT Deviceを作成する

IoT Deviceを作成するには、Azureのコンソールで次の操作を行う

  • 「リソース」から「Iot Hubを作成する」で作成したリソースを選択
  • 「デバイス管理」から「デバイス」を選択し、「デバイスの追加」をクリック
  • 設定を入力して保存

詳細は ## Iot Device作成詳細を参照

SASトークンを生成する

SASトークンを作成するにはAzureのコンソールで次の操作を行う

  1. リソースの作成を選択する
  2. 「開始」-> 検索ボックスに「共有アクセス ポリシー」を検索して選択

メッセージを送信したいデバイス(ラズパイ等)で、次の作業を行う

  1. azure-cliをインストール
  2. az loginでログインを行う
  3. az account set --subscription "<サブスクリプション ID>"でサブスクリプションを指定
  4. "az iot hub generate-sas-token -n "を実行して、SASトークン生成

azure-cliはパッケージリポジトリにないので、下記のリンクからインストールを行う。

サブスクリプションIDは、Azureコンソールから次のようにして参照する

  1. リソースから作成したIoT Hubを選択
  2. 「概要」の「サブスクリプション」からサブスクリプション名をクリック
  3. 遷移先に「サブスクリプション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のリソースからメッセージの送信を確認できる

使用されたメッセージの数.png

結論

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/月)」に指定されるのでそのまま。

ここまでで以下のように設定できる
IotHub設定_基本 (1 をコピー).png

Iotハブ: ネットワーク

この項目では接続の構成を設定する。
「パブリックアクセス」「プライベートアクセス」のどちらかを選ぶ。

今回はパブリックを選択。

Iotハブ: 確認および作成

あとの設定はデフォルトに指定すると「確認および作成」の項目は次のようになる。

Iotハブ確認 (1 をコピー).png

Iot Device作成詳細

デバイスIDをIot Hub内で一意に設定する。
あとはデフォルトで良い

下記のような設定となる

Iotデバイス作成 (1 をコピー).png

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?