「IoTデバイスの状態を可視化する(前編)」の続きで、後編ではIoTデバイスからのデータでAzure Digital Twins(以下ADT)のツイン更新を行っていきます。
前編を読まれていないかたはこちらを先にお読みください。
【Azure Digital Twins】IoTデバイスの状態を可視化する(前編) - JBS Tech Blog
リソース作成
下記のように、IoT HUBとAzure Functionsのリソースを作成します。
IoT HUB
Azure Portalの検索ウィンドウにIotと入力し、IoT Hubサービスをクリックします。
+作成をクリックします。
以下のように必要な項目を選択、または入力して「確認および作成」ボタンをクリックし、次の画面で「作成」をクリックします。
(レベルは無料でも問題ありません)
Functinos
-
サンプルアプリのPublish
以下のサイトの上部にある「Browse code」をクリックします。
Azure Digital Twins end-to-end samples - Code Samples | Microsoft Learn
githubのページの「Code」をクリックし、Download ZIPをクリックしてファイルをダウンロードして解凍します。
コマンドプロンプトで、以下のようにdigital-twins-samples-main\AdtSampleApp\SampleFunctionsApp フォルダーに移動し、コマンドを実行します。
C:\digital-twins-samples-main>cd AdtSampleApp\SampleFunctionsApp C:\digital-twins-samples-main\AdtSampleApp\SampleFunctionsApp>dotnet publish -c Release
-
関数アプリの圧縮
\digital-twins-samples-main\AdtSampleApp\SampleFunctionsApp\bin\Release\netcoreapp3.1のpublishをzipで圧縮します。
例:
PS C:\digital-twins-samples-main\AdtSampleApp\SampleFunctionsApp\bin\Release\netcoreapp3.1> Compress-Archive -Path C:\digital-twins-samples-main\AdtSampleApp\SampleFunctionsApp\bin\Release\netcoreapp3.1\publish\* -DestinationPath .\publish.zip
-
関数アプリの作成
Azure Portalの検索ウィンドウにappと入力し、関数アプリサービスをクリックします。
以下のように必要な項目を選択、または入力して「確認および作成」ボタンをクリックし、次の画面で「作成」をクリックします。
-
関数アプリのアップロード
2で圧縮した関数アプリを下記のようにコマンドを実行してAzureにアップロードします。
az functionapp deployment source config-zip --resource-group ***** --name ********* --src "C:\digital-twins-samples-main\AdtSampleApp\SampleFunctionsApp\bin\Release\netcoreapp3.1\publish.zip
"Azure Portalで2つの関数がアップロードされたことを確認します。
設定
関数アプリをADTにアクセスできるようにする設定
関数アプリのメニューからIDを選択し、システム割り当て済の状態を”オン”にして保存します。
ADTのアクセス制御を開き+追加をクリックしてロール割り当ての追加を選択します。
「Digi」を検索ボックスに入力し、”Azure Digital Twinsデータ所有者”選択します。
マネージドIDにチェックをつけ、[+メンバーを選択する]をクリックし、右側のマネージドIDから関数アプリを選択し、関数アプリをクリックします。
レビューと割り当てをクリックし設定を追加します。
ADTのリソースの概要からホスト名をコピーします。
関数アプリのメニューの構成を選択し、+新しいアプリケーション設定をクリックし、アプリケーション設定の追加/編集の[名前]に”ADT_SERVICE_URL”、[値]に上記でコピーしたホスト名を貼り付けます。
IoT HubをAzure関数に接続する設定
以下の書式に従ってコマンドを実行します。
az eventgrid event-subscription create --name <name-for-hub-event-subscription> --event-delivery-schema eventgridschema --source-resource-id /subscriptions/<your-subscription-ID>/resourceGroups/<your-resource-group>/providers/Microsoft.Devices/IotHubs/<your-IoT-hub> --included-event-types Microsoft.Devices.DeviceTelemetry --endpoint-type azurefunction --endpoint /subscriptions/<your-subscription-ID>/resourceGroups/<your-resource-group>/providers/Microsoft.Web/sites/<your-function-app>/functions/ProcessHubToDTEvents
例:
Event Gridシステムトピックが作成されていることを確認します。
IoT Hubのメッセージルーティングにルートが作成されていることを確認します。
シミュレーターの準備
Iot Hubへのシミュレーターの登録
IoT Hubのリソース画面のメニューからデバイスを選択し、+デバイスの追加をクリックします。
画面のように入力して、保存をクリックします。
(シミュレーターデバイスのIDはthermostat1になります)
デバイスをクリックします。
プライマリ接続文字列をコピーします。
設定ファイルの修正
githubからダウンロードして展開したdigital-twins-samples-main\DeviceSimulator\DeviceSimulator フォルダーに移動します。
AzureIoTHub.cs ファイルの以下の箇所の<your-hub-connection-string>を、上記でコピーした接続文字列に置き換えます。
privateconststringiotHubConnectionString = "<your-hub-connection-string>";
データ送信
Power Shellが利用できる環境で、digital-twins-samples-main\DeviceSimulator\DeviceSimulatorに移動し、"dotnet run"を入力し、以下のようにSending messageが表示されていれば、IoT Hubへのデータ送信は完了です。
PS C:\digital-twins-samples-main\DeviceSimulator\DeviceSimulator> dotnet run
Press CTRL+C to exit
2023/09/14 13:22:20 > Sending message: {"Temperature":70.24501954170178}
Message received. Partition: 1 Data: '{"Temperature":70.00438749557566}'
Message received. Partition: 1 Data: '{"Temperature":67.56754419420265}'
Message received. Partition: 1 Data: '{"Temperature":67.73687968437414}'
Message received. Partition: 1 Data: '{"Temperature":69.27838534967898}'
2023/09/14 13:22:25 > Sending message: {"Temperature":68.92689291477524}
2023/09/14 13:22:30 > Sending message: {"Temperature":68.62956138776129}
2023/09/14 13:22:35 > Sending message: {"Temperature":69.17768981036623}
2023/09/14 13:22:40 > Sending message: {"Temperature":67.89582559321812}
2023/09/14 13:22:46 > Sending message: {"Temperature":68.30704980031915}
状態の確認
Azure Digital Twins Exploreで”Run Query”ボタンをクリックしてthermostat1ツインのTemperatureのプロパティ値が変更されることを確認します。
さいごに
デジタルツインは敷居が高いように感じられますが、実際に試してみると仕組み自体はシンプルなものだとお分かりいただけたかと思います。
本記事は前後編となりましたが、下記の2点を総括としてまとめさせていただきます。
- Azure Digital Twinsは現実世界のオブジェクトの状態を仮想環境に置き換えるサービス
- 更新されたプロパティを確認(可視化)するものなので、データを蓄積するわけではなく、分析する場合には別途データを収集しておく環境が必要
土山 和也(日本ビジネスシステムズ株式会社)
ユーザーサポート、開発、運用、構築業務を経験し、現在はアーキテクトとして提案・プロジェクト支援に従事。専門はデータベースでDBA歴十数年。Azure/AWSを担当。
担当記事一覧