💻

Azure Digital Twinsで出来ること

2024/04/01に公開

本記事について

一昨年から私がAzure Digital Twinsを触る機会が増えました。
Azure Digital Twinsを触って検証していくと、これで出来ることが少しずつ見えてきました。
本記事はAzure Digital Twinsでできることについてまとめた記事になります。

説明すること

  • Azure Digital Twinsについて
  • Azure Digital TwinsのAPIとSDK
  • Azure Digital Twinsでできること
  • できることで使用するツールやリソース

説明しないこと

  • できることを実現するためのソースコードについて

そもそもAzure Digital Twinsとは?

Microsoft公式ドキュメントでは以下のように説明されています。

Azure Digital Twins は、環境全体 (建物、工場、農場、エネルギー ネットワーク、鉄道、スタジアム、さらには都市全体など) のデジタル モデル に基づいてツイン グラフを作成できるようにするサービスとしてのプラットフォーム (PaaS) です。 これらのデジタル モデルを使用して、より優れた製品、最適化された操作、コストの削減、および画期的なカスタマー エクスペリエンスを実現する分析情報を得ることができます。
Azure Digital Twins を使用すると、より広範なクラウド ソリューションでの実際の IoT デバイスを表し、ライブ データを送受信するために IoT Hub デバイス ツインに接続するデジタル ツイン アーキテクチャを設計できます。
https://learn.microsoft.com/ja-jp/azure/digital-twins/overview

端的に言えば、リアル空間とクラウドを繋げてくれるもので、リアル空間で起きた事象や現在の状態をクラウド側で確認することができ、その内容を基にクラウド側で処理を行い、ユーザーへフィードバックすることができるようになるものです。

Azure Digital TwinsのAPIとSDKについて

Azure Digital Twinsには2種類のAPIが提供されています。
コントロールプレーンAPIとデータプレーンAPIです。

コントロールプレーンAPI

コントロール プレーン API は、ARM API であり、Azure Digital Twins インスタンス全体を管理するために使用されます。そのため、インスタンス全体の作成や削除などの操作に対応しています。 また、エンドポイントの作成と削除にもこれらの API を使用します。
https://learn.microsoft.com/ja-jp/azure/digital-twins/concepts-apis-sdks#control-plane-apis

主にインスタンス管理にコントロールプレーンAPIが使用されます。
SDK言語としては.NET(C#)、Java、JavaScript、Python、Goが提供されています。

データプレーンAPI

データ プレーン API は、Azure Digital Twins API であり、Azure Digital Twins インスタンス内の要素を管理するために使用されます。
https://learn.microsoft.com/ja-jp/azure/digital-twins/concepts-apis-sdks#data-plane-apis

データプレーンAPIで出来ることは主に以下の通りです。

  • DTDLで作成したモデルのアップロード、検証、取得、削除
  • デジタルツインとデジタルツイン間のリレーションシップの作成、変更、削除
  • ダウンストリーミングサービス(Event Hubs、Event Grid、Service Bus)にデータをルーティング
  • モデル、ツイン、リレーションシップの一括インポート
  • モデル、ツイン、リレーションシップの削除

SDK言語としては.NET(C#)、Java、JavaScript、Pythonが提供されています。
また、CLIを使用してデータプレーンAPIを実行することもできます。

Azure Digital Twinsでできること

ここからは具体的にAzure Digital Twinsで出来ることを3つ紹介します。

1. Raspberry Piなどのデバイスに送られたセンサーで取得した情報をAzure Digital Twinsに登録する


一般的な流れは以下の通りです。

  1. Raspberry Piに接続されたセンサーで取得した情報(温度、湿度、照度など)をIoT Hubの対象のデバイスに送る
  2. IoT HubデバイスでD2Cメッセージを受け取ったことをEvent Grid検知して、Azure FunctionsのEvent Gridトリガー関数を動かす
  3. 特定のAzure Digital Twinsのデジタルツインのプロパティに登録する

上記の図は、Raspberry Piに取り付けられた温度センサーから取得した温度をIoT HubデバイスへD2Cメッセージを送り、その温度を特定のAzure Digital Twinsのツインのtemperatureプロパティに登録するフローになります。

こちらを用いると、センサーから取得した情報をAzure Digital Twinsにリアルタイムで登録することができるようになります。

また、Data Explorerというデータ分析サービスと連結させることで登録された情報を履歴として登録することもできます。

※参考記事
https://learn.microsoft.com/ja-jp/azure/digital-twins/how-to-ingest-iot-hub-data

2. Azure Digital Twinsに登録した内容をSignalRで送り、リアルタイムでWebアプリに表示される


一般的な流れは以下の通りです。

  1. Azure Digital Twinsの特定のツインのプロパティを更新する
  2. Azure Digital Twinsのツインのプロパティが更新されたことをEvent Gridが検知して、Azure FunctionsのEvent Gridトリガー関数を動かす
  3. SignalRの認証を行い、認証が通ればSignalRを通じてエンドポイントへメッセージを送信する
  4. エンドポイント側でAzure Digital Twinsで更新した内容がWebアプリで表示される

上記の図は、Azure Digital Twinsの特定のツインのtemperatureが更新されたら、そのtemperatureをリアルタイムでWebアプリに送るフローになります。

こちらを用いると、Azure Digital Twinsに登録された/されている内容を任意のWebアプリやスマートフォンアプリなどでリアルタイムで確認することができるようになります。

※参考記事
https://learn.microsoft.com/ja-jp/azure/digital-twins/how-to-integrate-azure-signalr

3. Azure Digital Twinsに登録した内容を基に、IoT HubデバイスにC2Dメッセージを送り、リアル空間のデバイスを動かす


一般的な流れは以下の通りです。

  1. Azure Digital Twinsの特定のツインのプロパティを更新する
  2. Azure Digital Twinsのツインのプロパティが更新されたことをEvent Gridが検知して、Azure FunctionsのEvent Gridトリガー関数を動かす
  3. 特定のIoT HubデバイスへC2DメッセージをAzure Functionsの関数から送る
  4. デバイス側は受け取った指示を基に制御を行う

上記の図は、Azure Digital Twinsの特定のツインのtemperatureが更新されたら、IoT HubデバイスとなっているRaspberry PiにC2Dメッセージを送り、Raspberry Piに取り付けられているLEDがtemperatureによって点灯/消灯を行うというフローになります。

こちらを用いると、Azure Digital Twinsに登録された内容に応じてリアル空間のデバイスに対して制御指示を送ることができるようになります。 例ではRaspberry Piに取り付けられたLEDの制御を上げましたが、APIが公開されているIoTデバイスを用いれば、「Azure Digital Twinsに登録された内容を基にリアル空間の家電を制御する」ということも可能です。

また、1番目の例と組み合わせることによって、リアル空間で起こった変化をAzure Digital Twinsに登録して、登録された内容を基にリアル空間のデバイスを制御する、といったこともできるようになります。

例で使用しているダウンストリーミングサービスについて

上記の例ではダウンストリーミングサービスとしてEvent Gridを用いていますが、「データプレーンAPI」で記載した通りEvent HubsやService Busなど他のダウンストリーミングサービスでも使用可能です。Azure Digital TwinsなどのAzureリソースと繋げる仕様は各サービスによって異なります。詳しくは公式ドキュメントをご確認ださい。

最後に

一昨年から触ってみて、Azure Digital TwinsはIoT HubとAzure Functionsとの親和性が非常に高いと感じています。

紹介した事例ではIoT Hubから取得したデータをリアルタイムで格納しておけるため、例えば現実空間の特定の箇所に温度センサーを置いておいてAzure Digital Twinsの特定のツインの温度をリアルタイムで登録しておけば、わざわざ現地に行かなくても「現実空間のこの場所がX℃」ということがわかるようになります。

紹介した例以外にもまだまだできることがありそうなAzure Digital Twinsです。
今後も個人的に注目していきたいAzureリソースの1つです。

ヘッドウォータース

Discussion