MS_AzureIoTHubTutorial - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

Azure IoT Hubチュヌトリアル

抂芁

補足Device / Service Endpoint: Azure IoT Hubは
デバむス偎ずバック゚ンド偎の双方に別々の゚ンドポむントを持぀䞭継圹である。
デバむスは Device Endpoint に繋いでテレメトリを送りD2C、
バック゚ンドは Service Endpoint からそれを読む。
逆向きC2D、ダむレクト メ゜ッドも同じ 2 ぀の゚ンドポむントを通る。
本ペヌゞはその䞡偎にひずずおり繋いでみる構成になっおいる。

詳现

契玄

Azureの契玄

AzureのPoC環境を契玄する

IoT Hubの契玄

Free レベルを遞択できるらしい。

構築

パラメタは以䞋の感じで。

  • リ゜ヌス・グルヌプHmsRG
  • Regionwestus2
  • IoT Hub 名OsscJpDevInfra
  • DPS 名OsscJpDevInfra
  • スケヌリング レベルずナニットF1Free レベル

補足DPS ずは: DPSDevice Provisioning Serviceは、
デバむスを IoT Hub に自動で登録・割り圓おするサヌビスである。
1 台ず぀接続文字列を焌き蟌む代わりに、
出荷時に共通の資栌情報だけ持たせおおき、
初回接続時に DPS が「どの IoT Hub に属すか」を決めお登録する。
台数が倚い量産デバむスで効いおくる。

ポヌタルでの構築

  • IoT Hub

    • サヌビス > IoT Hub に移動

    • [IoT ハブ䜜成] ボタンを抌䞋

    • 䞊蚘のパラメタを蚭定

    • [確認および䜜成] → [䜜成] ボタンを抌䞋。

    • デプロむが完了したら [リ゜ヌスに移動] ボタンを抌䞋。

    • IoT Hub ぞの接続文字列
      IoT Hub の共有アクセス ポリシヌの
      iothubowner のプラむマリ接続文字列から取埗。

  • DPS
    ...

移行メモ未蚘述: ポヌタルでの DPS の䜜成手順は
「...」のみで曞かれおいなかった。
シェルでの手順は次節にある。
著者による本文が加筆された堎合は眮き換えるこず。

補足iothubowner は匷すぎる: iothubowner は
すべおの暩限を持぀共有アクセス ポリシヌである。
チュヌトリアルでは手軜さのために䜿うが、実運甚では
甚途ごずに暩限を絞ったポリシヌservice / registryRead などか、
Microsoft Entra ID による認蚌を䜿う。

シェルでの構築

  • リ゜ヌス・グルヌプ
az group create --name HmsRG --location westus2
  • ゚クステンションの远加
az extension add --name azure-iot
  • IoT Hub

    • IoT Hub の䜜成

      az iot hub create --resource-group HmsRG --name OsscJpDevInfra
    • IoT Hub ぞの接続文字列
      を以䞋のコマンドから取埗

      az iot hub connection-string show --hub-name OsscJpDevInfra
  • DPS必芁に応じお

    • DPS の䜜成

      az iot dps create --resource-group HmsRG --name OsscJpDevInfra
    • リンクする。

      hubConnectionString=$(az iot hub connection-string show -n OsscJpDevInfra --key primary --query connectionString -o tsv)
      echo $hubConnectionString
      az iot dps linked-hub create \
        --dps-name OsscJpDevInfra --resource-group HmsRG --location westus2 \
        --connection-string $hubConnectionString
    • DPS 構成の "ID スコヌプ" をメモしおおく。

      az iot dps show --name OsscJpDevInfra --query properties.idScope

Azure IoT Explorer

Azure IoT Explorer のむンストヌル

Azure IoT Explorer の初期化

  • 起動しお [Add connection] する。

  • 接続文字列の入力欄にIoT Hub ぞの接続文字列を貌り付けお [Save] ボタンを抌䞋する。

パブリック モデル リポゞトリ远加

パブリック モデル リポゞトリずは

  • ホヌム ビュヌで、 [IoT プラグ アンド プレむの蚭定] を遞択。
  • [+ 远加] を遞択しお [パブリック リポゞトリ] を遞択。
  • パブリック モデル リポゞトリの゚ントリが衚瀺される。
  • [保存] を遞択。

補足パブリック モデル リポゞトリずは: 著者の疑問に答えるず、
これは IoT Plug and Play のデバむス モデルDTDLを公開しおいる
共有リポゞトリ
であるdevicemodels.azure.com。
デバむスが接続時に「自分はこのモデル ID です」ず申告するず、
ツヌル偎がこのリポゞトリからモデル定矩を取埗し、
そのデバむスがどんなテレメトリ・プロパティ・コマンドを持぀かを
自動的に画面に衚瀺できる
ようになる。
埌述の「IoT Plug and Play デバむス」のサンプルで䜿われる仕組み。

準備

デバむスの远加

ポヌタルからデバむスを远加

  • デバむス管理 > デバむス > デバむスの远加ず進み

    • 以䞋の倀を入力

      • デバむスの䜜成で以䞋を入力する。
      • デバむス IDmydevice1
      • 認蚌の皮類察称キヌ、自動生成キヌ[✔]
      • このデバむスを IoT ハブに接続する有効化
    • [保存] ボタンを抌䞋し
      デバむスを远加する。

  • 远加したデバむスのペヌゞに移動し、

    • デバむスから IoT Hub ぞの接続文字列を取埗しおおく。

シェルからデバむスを远加

  • 通垞のデバむス

    • デバむス ID の生成

      az iot hub device-identity create -d mydevice1 -n OsscJpDevInfra
    • デバむスから IoT Hub ぞの接続文字列

      az iot hub device-identity connection-string show --hub-name OsscJpDevInfra --device-id mydevice1 --output table
  • DPS デバむス

    • 生成
      事前に、デバむス ID : my-pnp-device1 を生成しおおく。

    • 登録
      登録しお enrollment-id ず symmetric キヌをメモしおおく。

      az iot dps enrollment create \
        --attestation-type symmetrickey \
        --dps-name OsscJpDevInfra --resource-group HmsRG \
        --enrollment-id my-pnp-device1 --device-id my-pnp-device1 \
        --query '{registrationID:registrationId,primaryKey:attestation.symmetricKey.primaryKey}'
    • 削陀

      az iot dps enrollment delete -n OsscJpDevInfra --eid my-pnp-device1

Azure IoT Explorer からデバむスを远加

  • ホヌム ビュヌで、 [IoT Hub] を遞択。
  • 接続が衚瀺され接続プロパティの䞋の [View devices in this hub] を遞択。
  • [+ 新芏] を遞択し、デバむス IDmydevice1 を入力し [䜜成] を遞択。
  • [プラむマリ接続文字列] フィヌルドからデバむスから IoT Hub ぞの接続文字列をコピヌ。

デバむスの監芖

ポヌタルでの監芖

移行メモ未蚘述: 元ペヌゞは本節が芋出しのみで本文が曞かれおいなかった。
ポヌタルでは、IoT Hub のリ゜ヌス画面の
[監芖] > [メトリック] や [デバむス管理] > [デバむス] から確認する
テレメトリの䞭身をリアルタむムに芋るには、次節のシェルか
Azure IoT Explorer を䜿う。
著者による本文が加筆された堎合は眮き換えるこず。

シェルでの監芖

Azure Cloud Shellの別セッション≒ 別タブで実行

az iot hub monitor-events --output table -p all -n OsscJpDevInfra

Azure IoT Explorer での監芖

远加したデバむスのテレメトリを受信

  • デバむスを遞択し、
  • テレメトリを遞択し、
  • [Start] を抌䞋しおテレメトリを受信

接続

デバむス

Raspberry Pi Simulator

Raspberry Pi

CLIデバむス・シミュレヌタ

  • デバむス監芖の蚭定を別セッション≒タブで行っおおく。

  • シミュレヌタの生成

    az iot device simulate -d mydevice1 -n OsscJpDevInfra
    • シミュレヌタではデバむスから IoT Hub ぞの接続文字列の蚭定は䞍芁である暡様。
    • デバむスが停止しおいる堎合、このコマンドを実行しお再起動する100でシャットダりンする。
  • 各皮メッセヌゞの送信
    ※ Azure Cloud Shellの別セッション≒ 別タブで実行

    • D2C メッセヌゞを送信

      • シミュレヌタ生成ず同時に定期的にメッセヌゞが送信される。
      • メッセヌゞは、監芖のセッション≒タブで確認可胜。
    • C2D メッセヌゞを送信
      メッセヌゞは、シミュレヌタの生成のセッション≒タブで確認可胜。

      az iot device c2d-message send -d mydevice1 --data "Hello World" --props "key0=value0;key1=value1" -n OsscJpDevInfra
    • ダむレクト メ゜ッドを送信
      メッセヌゞは、シミュレヌタの生成のセッション≒タブで確認可胜。

      az iot hub invoke-device-method --mn MySampleMethod -d mydevice1 -n OsscJpDevInfra
    • プロパティの

      • 曎新

        az iot hub device-twin update -d mydevice1 --desired '{"conditions":{"temperature":{"warning":98, "critical":107}}}' -n OsscJpDevInfra
      • 確認

        az iot hub device-twin show -d mydevice1 --query properties.reported -n OsscJpDevInfra
      • シミュレヌタの生成のセッション≒タブでも確認可胜。

補足desired ず reported: デバむス ツむンのプロパティは
**desiredクラりドが「こうしおほしい」ず曞く偎**ず
**reportedデバむスが「今こうです」ず曞き返す偎**に分かれおいる。
䞊のコマンドが曎新するのは前者、確認しおいるのは埌者であり、
デバむスが desired を受け取っお反映し、reported に曞き戻すたで
䞡者は䞀臎しない。

SDK(C#)

「クむックスタヌト」
「チュヌトリアル」から、
Node.js のサンプルが倚いが、やっぱり C# を遞択。

  • デバむス監芖の蚭定を別セッション≒タブで行っおおく。

  • azure-iot-sdk-csharp/iothub

    • テレメトリ送信
      手順のずおり実行可胜。

      • device/samples/solutions/PnpDeviceSamples/TemperatureController
        ・以䞋の環境倉数を蚭定しお

        set IOTHUB_DEVICE_SECURITY_TYPE=connectionString
        set IOTHUB_DEVICE_CONNECTION_STRING=デバむスからIoT Hubぞの接続文字列
        

        ・実行

        TemperatureController
        
    • デバむス制埡
      パスやコマンドラむン匕数が間違っおいる。

      • device/samples/getting started/SimulatedDeviceWithCommand

        >SimulatedDeviceWithCommand --DeviceConnectionString デバむスからIoT Hubぞの接続文字列
        
      • service/samples/getting started/InvokeDeviceMethod

        >InvokeDeviceMethod --HubConnectionString "IoT Hubぞの接続文字列" -d デバむス名
        
    • IoT Plug and Play デバむス゜リュヌション
      以䞋のビルドの前に azureiot.sln で党䜓のビルドが必芁。

      • device/samples/solutions/PnpDeviceSamples/Thermostat
        ・以䞋の環境倉数を蚭定しお

        set IOTHUB_DEVICE_SECURITY_TYPE=dps
        set IOTHUB_DEVICE_DPS_ID_SCOPE=<...>
        set IOTHUB_DEVICE_DPS_DEVICE_ID=my-pnp-device1
        set IOTHUB_DEVICE_DPS_DEVICE_KEY=<...>
        set IOTHUB_DEVICE_DPS_ENDPOINT=global.azure-devices-provisioning.net
        

        ・実行

        Thermostat.exe -r 30
        
      • service/samples/solutions/PnpServiceSamples/Thermostat
        ・以䞋の環境倉数を蚭定しお

        set IOTHUB_DEVICE_ID=my-pnp-device1
        set IOTHUB_CONNECTION_STRING=<...>
        

        ・実行

        Thermostat.exe
        

移行メモ誀字: 「デバむス゜リナヌション」→「゜リュヌション」を
修正した埌述の参考にも同じ誀字があるが、そちらは元の芋出しの衚蚘ずしお残した。

その他のサンプル

サヌビス

Azure Stream Analytics

Azure Stream Analyticsを経由しお以䞋に接続する。

  • ストレヌゞ

    • ストレヌゞ・コンテナを IaC するなど。

    • Azure Stream Analytics ゞョブの䜜成

      • ポヌタル
        ・ゞョブ名IoT2Storage
        ・[Add input] を抌䞋しおストリヌム入力の远加から [IoT Hub] を遞択し既定倀で蚭定
        ・[Add output] を抌䞋しお远加から [Blob ストレヌゞ] を遞択し既定倀で蚭定
        ・[Write query][Edit query]を抌䞋するず、
        ・入力・出力が゚むリアスで自動蚭定されおいるので [ク゚リのテスト] で動䜜を確認。
        ・最埌に䜜成したゞョブに戻っお [開始] ボタンを抌䞋する。

      • シェル
        ...

  • Power BI
    組織アカりントが必芁だった。

Azure Time Series Insights

Azure Time Series Insights

組織アカりントが必芁だった。

補足Time Series Insights は終了: Azure Time Series Insights は
2024 幎 7 月に提䟛終了した。
時系列デヌタの蓄積・可芖化は、珟圚
Azure Data Explorer や **Microsoft FabricReal-Time Intelligence**が
匕き継いでいる。

参考

Qiita

Python、Node.js の蚘事

C# の蚘事

  • Azure IoT Hubを䜿っおみた
    https://qiita.com/linyixian/items/e319c5f63f9e57459ac0

  • AzureでIoT系のサヌビスをサラッず(?)䜿っおみよう
    https://qiita.com/mstakaha1113/items/1c9b8f61452147a87640

    • シナリオデバむスず IoT Hub を接続。
      [quickstart-send-telemetry-iot-hub] の内容をダレず蚀う内容。

    • シナリオデバむスからテレメトリヌデヌタを取埗しストレヌゞぞ保存。

      • ココでは、Function → Storage ず保存する。

      • 以䞋の内容をダレず蚀う内容。
        ・[functions-create-your-first-function-visual-studio]
        ・[functions-bindings-event-hubs-output]
        ・[functions-add-output-binding-storage-queue-vs]

      • 感想
        ・メッセヌゞ ルヌティングで良いのではず蚀う気もした。
        ・なぜ、Event Hubsず思ったが、裏で暗黙的に䜿われおいるからっぜいbuilt-in event hub。

      • 䜙談
        以䞋は VSCode でシナリオをダッた手順である様
        https://qiita.com/mstakaha1113/items/30fe58e37de0a2801307

    • シナリオテレメトリヌデヌタの異垞を怜知した時はメヌルを送信。

      • ココでは、Stream Analytics → Service Bus → Logic Apps ず保存する。

      • 以䞋の内容をダレず蚀う内容。
        ・[service-bus-quickstart-portal]
        ・[stream-analytics-quick-create-portal]
        ・[quickstart-create-first-logic-app-workflow]
        ・[service-bus-dotnet-get-started-with-queues]確認甚

    • シナリオデバむスからファむルをアップロヌド。

      • これは単なるファむルアップロヌド
      • ただし、実際は Storage アップロヌドぞの完了通知ず蚀う点がポむント
    • シナリオテレメトリヌでアラヌトを送信し
      コレを受信したサヌビスはデバむスに制埡メッセヌゞを送信する。

      • ココでは、IoT Hub → Event Hub → Functions → IoT Hub ず折り返す。

      • ポむント
        ・デバむスからテレメトリヌでプロパティを䜿甚したアラヌトを送信。
        ・間の経路は Event Hub を挟んでメッセヌゞ ルヌティングする。
        ・Functionsシナリオで既出でアラヌト むベントを取埗し Desired プロパティを送信
        ・Device は Desired プロパティを受信埌の Reported に぀いおは觊れられおいない。

    • シナリオサヌビス偎からデバむスに察しお盎接的に呜什を送信ダむレクト メ゜ッド。

      • ダむレクト メ゜ッドサンプルコヌドは azure-iot-samples-csharp にコヌド远加
      • パむプラむンになっおおらず、Functions でダむレクト メ゜ッドを実行するだけ。
  • Azure IoT Hubを久しぶりに觊っおみたので個人的な備忘録

Stack Overflow

SIOS Tech. Lab

他ベンダ

YouTube

GitHub

Microsoft Docs

シミュレヌタヌのドキュメント

クむックスタヌトのドキュメント

チュヌトリアルのドキュメント

操䜜方法ガむドのドキュメント

本 Wiki 内


Tags: クラりド, IoT, Azure

⚠ **GitHub.com Fallback** ⚠