【Azure Digital Twins】IoTデバイスの状態を可視化する(前編)

デジタルツインという用語を聞いたことがあるという人は多いと思いますが、実務で使う機会がある人は限られている事もあり、敷居が高そうと考えている方も多いのではないでしょうか。

本記事では、そういった方を対象に、デジタルツインについて簡単に説明します。

また、Azureで実際に環境を構築し、データを可視化するまでの流れも簡潔に記載してますので、試してみたい方の参考になれば幸いです。

デジタルツイン概要

デジタルツインはWikipediaでは以下のように定義されております。

「デジタルツイン(英: Digital twin)とは、さまざまな目的で使用できる物理的資産、プロセス、人、場所、システムおよびデバイスのデジタル複製を指す

出典: フリー百科事典『ウィキペディア(Wikipedia)』

ということで、まずはAzure Digital Twins(以下ADT環境を構築するうえで最低限知っておくべき用語を簡単に説明します。

モデル

現実世界にある様々なオブジェクトやプロセスを定義したものになります。

ADTでは後述のツインを作成するための定義情報であり、リレーションも含まれます。

ツイン

モデル情報から作成されるオブジェクトの実体になり、ツインのプロパティに対してデータを更新します。

ちなみにツインは双子のツインが由来で、現実世界のものを仮想世界で表現したものになります。

インスタンス

オブジェクトの実体という意味なのですが、ADTの実行環境(リソース)ととらえておくとよいかと思います。

シナリオ

部屋に設置した温度計センサー(IoTデバイスを想定した仮想シミュレーター)からAzureへデータを送りADTを更新して結果を可視化する、というシナリオを実践していきます。

参考:Azure Digital Twins のドキュメント - チュートリアル、API リファレンス | Microsoft Learn

Azure Digital Twins操作(ADTの準備)

まずはデータを入れるための器を作っていきます。

Azure Digital Twins(インスタンス)作成

Azure Portalの検索ウィンドウで”Digital”と入力し、サービスの”Azure Digital Twins”をクリックします。

”+作成”をクリックします。

以下のように必要な項目を選択、または入力して「確認および作成」ボタンをクリックし、次の画面で「作成」をクリックします。

数分でデプロイが完了します。

モデル作成

次にモデルを作成していきます。

モデルはDigital Twins Definition Language(DTDL)を使用しますが、本記事では触れません。

詳細は下記を参照してください。

opendigitaltwins-dtdl/DTDL/v3/DTDL.v3.md at master · Azure/opendigitaltwins-dtdl · GitHub

事前に、PowerShellが使える環境でAzureにログインした状態にします。(本記事ではVisual Studio Code、以下VSCodeを使用)

Azure PortalのADTの画面からホスト名をコピーします。

以下のJSONファイルを作成します。

Room.json
{
  "@id": "dtmi:sample:Room;2",
  "@type": "Interface",
  "displayName": "Room",
  "contents": [
    {
      "@type": "Property",
      "name": "Temperature",
      "schema": "double"
    },
    {
      "@type": "Property",
      "name": "RoomName",
      "schema": "string"
    },
    {
      "@type": "Relationship",
      "name": "contains"
    }
  ],
  "@context": "dtmi:dtdl:context;2"
}
Thermostat.json
{
  "@id": "dtmi:sample:DigitalTwins:Thermostat;1",
  "@type": "Interface",
  "displayName": "Thermostat",
  "@context": "dtmi:dtdl:context;2",
  "contents": [
    {
      "@type": "Property",
      "name": "DisplayName",
      "schema": "string"
    },
    {
      "@type": "Property",
      "name": "Temperature",
      "schema": "double"
    },
    {
      "@type": "Relationship",
      "name": "contains",
      "displayName": "contains",
      "properties": [
        {
          "name": "ownershipUser",
          "@type": "Property",
          "schema": "string"
        },
        {
          "name": "ownershipDepartment",
          "@type": "Property",
          "schema": "string"
        }
      ]
    },
    {
      "@type": "Relationship",
      "name": "serves",
      "displayName": "serves",
      "properties": [
        {
          "name": "ownershipUser",
          "@type": "Property",
          "schema": "string"
        },
        {
          "name": "ownershipDepartment",
          "@type": "Property",
          "schema": "string"
        }
      ]
    }
  ]
}

次にターミナルで以下のように2つのコマンドを実行し、結果が返ってくることを確認します。-nの引数はADTのホスト名を使用してください。

※実行するディレクトリはJSONファイルを保存した場所になります

PS C:\Users\********> az dt model create -n ********.api.jpe.digitaltwins.azure.net --models Room.json
[
  {
    "decommissioned": false,
    "description": {},
    "displayName": {
      "en": "Room"
    },
    "id": "dtmi:sample:Room;2",
    "uploadTime": "2023-09-04T04:54:38.088474+00:00"
  }
]
PS C:\Users\********> az dt model create -n ********.api.jpe.digitaltwins.azure.net --models Thermostat.json 
[
  {
    "decommissioned": false,
    "description": {},
    "displayName": {
      "en": "Thermostat"
    },
    "id": "dtmi:sample:DigitalTwins:Thermostat;1",
    "uploadTime": "2023-09-04T05:03:16.453916+00:00"
  }
]

これでモデルの作成は完了です。続いてツインを作成します。

ツイン作成

下記のコマンドを実行します。

PS C:\Users\********> az dt twin create -n ********.api.jpe.digitaltwins.azure.net --dtmi "dtmi:sample:Room;2" --twin-id room1
PS C:\Users\********> az dt twin create -n *****.api.jpe.digitaltwins.azure.net --dtmi "dtmi:sample:DigitalTwins:Thermostat;1" --twin-id thermostat1

それぞれエラーにならなければ完了です。続いてリレーションを作成します。

リレーション作成

PS C:\Users\********> az dt twin relationship create -n ********.api.jpe.digitaltwins.azure.net --relationship-id room --relationship contains --twin-id room1 --target thermostat1

これまでと同様にエラーにならなければ完了です。

作成結果はコマンドでも確認できますがGUIで確認します。

ADTの画面から”Azure Digital Twins Exploreを開く”をクリックします。(しばらくすると別タブでAzure Digital Twins Exploreが開きます)

「Run Query」ボタンをクリックすると、ツインが作成され、リレーションが張られていることが確認できます。

ツインのthemostat1をクリックし、Temperatureプロパティに”1”を入力して、右上の変更の保存ボタンをクリックしてください。(後編でプロパティの自動アップデートを行うために必要になります)

以上でリソースの作成と準備が整いました。

まとめ

わずかな操作でツインを更新するための構成が完了しましたが、デジタルツインの概念を理解しつつ設定を行うことが大切です。

IoTデバイスからのデータ送信は後編に続きます。

執筆担当者プロフィール
土山 和也

土山 和也(日本ビジネスシステムズ株式会社)

ユーザーサポート、開発、運用、構築業務を経験し、現在はアーキテクトとして提案・プロジェクト支援に従事。専門はデータベースでDBA歴十数年。Azure/AWSを担当。

担当記事一覧