AWS IoT TwinMakerで自分の部屋のデジタルツインを作ってみた
Author : 飯塚 将太
こんにちは、IoT ソリューションアーキテクトの飯塚です。
皆さんはご自身の部屋の中の状態を 3 次元的かつリアルタイムに可視化や同期してみたい、と考えたことはないでしょうか ?
例えば各場所ごとの
- 室温や湿度、照度などの環境
- 動体の検出
などの情報を 3 次元的にマッピングし可視化することです。デジタルツインとも呼ばれています。
というのは建前で、AWS IoT TwinMaker を使用してみたい、というのが本音です。そこで本記事では AWS IoT TwinMaker を活用し、自分の部屋と 3D 仮想空間の状態をリアルタイムに同期してみようと思います。完璧に同期取れていませんが、完成物の動画を載せておきます。
今回の構成はこのようになります。
目次
1. 使用するデバイス
2. 注意事項
3. デバイス側の実装
3-1. AWS IoT Core : モノの作成
3-2. 開発環境のセットアップ
3-3. ファイルのアップロード
3-4. サンプルコードの変更
3-5. サンプルコードの書き込み
3-6. デバイス動作の確認
3-7. メッセージ送信の確認
4. クラウド側の実装
4-1. AWS IAM : ロールの作成
4-2. AWS IoT Core : ルールの作成
4-3. AWS IoT SiteWise : アセットモデルの作成
4-4. AWS IoT SiteWise : アセットの作成
4-5. AWS IoT TwinMaker : ワークスペースの作成
4-6. AWS IoT TwinMaker : エンティティの作成
4-7. AWS IoT TwinMaker : コンポーネントの追加
4-8. AWS ioT TwinMaker : 3D モデルの追加
4-9. AWS IoT TwinMaker : シーンの作成
4-10. Amazon Managed Grafana 用のユーザー認証の設定
4-11. Amazon Managed Grafana : ワークスペースの作成
4-12. Amazon Managed Grafana : ユーザーの追加と設定
4-13. Amazon Managed Grafana : データソースの追加
4-14. Amazon Managed Grafana : ダッシュボードの作成
5. まとめ
ご注意
本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。
このクラウドレシピ (ハンズオン記事) を無料でお試しいただけます »
毎月提供されるクラウドレシピのアップデート情報とともに、クレジットコードを受け取ることができます。
1. 使用するデバイスとサービス
今回のハンズオンでは以下のデバイスを使用します。
なお、本記事内では 1 センサーだと面白くないため、M5StickC と人感センサーは 2 セット用いています。もちろん 1 セットでも本内容を実施し、実現したいことを確認できます。複数セットを用いる方はその数分だけ手順を実施ください。
また、使用するサービスは以下のとおりです。
- AWS IoT Core : デバイスをクラウドに安全かつ簡単に接続し、センサデータをクラウドへアップロード、そしてAWS IoT SiteWise に転送するために用います。
- AWS IoT SiteWise : 今回はデータを収集・保存するために用います。その他にも産業機器を接続し、収集・集計・保存・可視化することも可能です。
- AWS IoT TwinMaker : 自分の部屋を仮想空間内で 3 次元的に可視化するために使います。デジタルツインを実現するサービスとして産業用途などで活用いただけます。
- Amazon Managed Service for Grafana : デジタルツインを表示するために用います。それだけでなく様々な種類のグラフでの可視化が可能です。
- AWS Single Sign-on : Amazon Managed Service for Grafana でのユーザー認証を担います。他にも多くのサービスやアプリとの連携が可能です。
2. 注意事項
本記事のハンズオンは、2022 年 2 月時点の以下の環境で行なっています。
- ブラウザ : Google Chrome
- リージョン : us-east-1
- AWS コンソールの表示言語 : English (US)
3. デバイス側の実装
まず、デバイス側の実装をしていきましょう。下記の手順で 2 セット分実施ください。
3-1. AWS IoT Core : モノの作成
こちらの手順 の IoT ポリシーの作成 から 証明書とキーをダウンロード までを実施して、下記の名前で 2 つのモノを作成し、証明書と秘密鍵を PC にダウンロードしてください。この手順では東京リージョンでの作業となっていますが、AWS IoT TwinMaker が使用可能なリージョンで確実に作成ください。
- モノの名前 : PIR1
- 証明書 : PIR1.pem.crt
- 秘密鍵 : PIR1.pem.key
- モノの名前 : PIR2
- 証明書 : PIR2.pem.crt
- 秘密鍵 : PIR2.pem.key
3-2. 開発環境のセットアップ
UIFlow 公式の手順 の Driver Installation から API KEY pairing までを実施してください。
Firmware burning では、左のデバイス種類から STICKC を選択し、その画面で UIFLOW(StickC) を選択してください。
3-3. ファイルのアップロード
- サンプルコード : PIR.m5f.zip をダウンロードします。
- ダウンロードした圧縮ファイルを解凍して、右上の「フォルダを開く」ボタンから PIR.m5f をアップロードします。
- 証明書と秘密鍵を M5StickC にアップロードします。
- keyFile と certFile の下にあるファイルの追加ボタンからファイルをそれぞれ追加します。
- これもデバイス毎に実施する必要があります。
3-4. サンプルコードの変更
こちらの画像のように、サンプルコードの前半にある以下の箇所を変更します。
- センサー名 : PIR1 または PIR2
- host : AWS IoTの設定画面上部にあるエンドポイントを確認し、変更
- keyFile : .pem.key を選択します。
- certFile : .pem.crt を選択します。
クリックすると拡大します
3-5. サンプルコードの書き込み
右下の Run ボタンを押してサンプルコードをデバイスへ転送してください。
複数台分書き込む必要があります。
3-6. デバイス動作の確認
人感センサに
- 反応していないときは M5StickC の液晶が、青
- 反応すると M5StickC の液晶が、赤
になります。センサの前で手や体を動かして、色が変化するか確認してください。
3-7. メッセージ送信の確認
メッセージが正しく送信されるか確認します。AWS IoT のテスト画面 を開いて、以下のように設定、確認を行います。
- Topic filter に、room/# と入力します。
- Subscribe ボタンをクリックします。
- 画面下の Subscriptions に 2 つのデバイスから毎秒メッセージが届くことを確認してください。
- status: true がセンサ反応あり、status: false がセンサ反応なしを意味します。
クリックすると拡大します
4. クラウド側の実装
4-1. AWS IAM : ロールの作成
ここからは、複数のサービスが利用する共通のロールを作成します。今回はお試しなので、複数サービス向け & 管理者権限を付与するロールを作成しています。本番では、各サービス毎に最小権限でロールを作成してください。
後述の「4-2. AWS IoT : ルールの作成」 で使用するロールについては こちら が、「4-5. AWS IoT TwinMaker : ワークスペースの作成」で使用するロールについては こちら、「4-11. Amazon Managed Grafana : ワークスペースの作成」使用するロールについては こちら が最小権限の参考になります。
- ロール作成の画面 を開きます。
- Trusted entity type : Custom trust policy
- Custom trust policy : 以下の JSON を貼り付けます。
- 「Next」 ボタンをクリックします。
- ポリシーを追加する画面で AdministratorAccess を検索し、チェックボックスをクリックします。
- 「Next」 ボタンをクリックします。
- Role name : Smart_3D_Home と入力します。
- Create role ボタンをクリックします。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"iottwinmaker.amazonaws.com",
"grafana.amazonaws.com",
"iot.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
クリックすると拡大します
4-2. AWS IoT Core : ルールの作成
AWS IoT Core のルールの作成を行なっていきます。
ルールの作成画面 を開き、以下のように設定していきます。
- Name : Smart_3D_Home と入力します。
- Rule query statement : SELECT * FROM 'room/#' と入力します。
- Set one or more actions : Add action ボタンをクリックします。(Error action の箇所ではありませんので注意してください)
- SiteWise アクションを選択し、Configure action ボタンをクリックします。
- Configure action の画面で画像のように以下を設定します。
- By property alias を選択
- Property alias : ${propertyAlias}
- Time in seconds : ${timestamp()/1000}
- Value : ${status}
- Data type : Boolean
- Role (Requires AWS IoT SiteWise access) : Smart_3D_Home
- 上記以外は設定せず、Add action ボタンをクリックします。
- Create rule ボタンをクリックします。
- ルールの一覧に作成したルールができていて、Enable になっていることを確認してください。
クリックすると拡大します
クリックすると拡大します
4-3. AWS IoT SiteWise : アセットモデルの作成
次に、AWS IoT SiteWise でアセットモデルの作成を行います。モデルの作成画面 を開き、アセットモデルを以下のように作成します。
- Model details には以下を設定します。
-
- Name : PIR と入力します。
- Measurement definitions には以下を設定します。
- Name : status と入力します。
- Data type : Boolean を選択します。
- その他は変更せずに一番下の Create model ボタンをクリックします。
クリックすると拡大します
4-4. AWS IoT SiteWise : アセットの作成
- Model : PIR を選択します。
- Name : PIR1 または PIR2 と入力します。
- 作成したアセットの画面右上の Edit ボタンをクリックします。
- こちらの画像のように、Measurement の ”status” のプロパティエイリアス に /room/PIR1 または /room/PIR2 と入力します。
- Save ボタンをクリックします。
- 数秒待って、各アセットの画面の Measurements タブ内の Latest value に true または false の値が入っているか確認します。
空白の場合、データが届いていないため、ルールやアセット、アセットモデルの設定を確認してください。
これをもう1つ分繰り返します。これで AWS IoT SiteWise の設定は終了です。
クリックすると拡大します
4-5. AWS IoT TwinMaker : ワークスペースの作成
AWS IoT TwinMaker でワークスペースを作成します。
ワークスペースの作成画面 を開き、以下のように設定します。
- Name : Smart_3D_Home と入力します。
- S3 bucket : Create an S3 bucket を選択します。
- Execution Role : Smart_3D_Home を選択します。
- これらを設定したら画面下の Create Workspace ボタンをクリックします。
クリックすると拡大します
4-6. AWS IoT TwinMaker : エンティティの作成
次にエンティティを作成していきます。作成したワークスペースのエンティティの画面 を開いて、以下のように設定します。
Create an entity の画面で以下を設定します。
- Entity name : PIR と入力します。
- Create entity ボタンをクリックします。
- 作成したエンティティ (PIR) を選択します。
- 右側の Add component をクリックします。
クリックすると拡大します
4-7. AWS IoT TwinMaker : コンポーネントの追加
- 作成したエンティティの画面 のまま、右側の Add component ボタンをクリックします。
- こちらの画像のように設定し、Add component をクリックします。
- この作業を 2 つ分行い、作成していきます。
クリックすると拡大します
結果、こちらのような設定になります。
クリックすると拡大します
4-8. AWS ioT TwinMaker : 3D モデルの追加
ここから、3D モデルを作成していきます。
本記事では既に GLB ファイルを用意しています。それをお使いいただいても良いですし、ご自身で用意いただいたものをお使いいただいても大丈夫です。
- room.glb.zip をダウンロードし、解凍します。
- 作成したワークスペースのリソースライブラリ画面 を開き、Add resources 画面を開きます。
- Choose files をクリックして、解凍した room.glb を選択します。
- Add resources (1) ボタンを押して追加します。
- アップロードが完了したら Close ボタンをクリックします。
クリックすると拡大します
4-9. AWS IoT TwinMaker : シーンの作成
シーンを作成していきます。作成したワークスペースのシーンの作成画面 を開いて、Create scene ボタンをクリックします。
- ID : Smart_3D_Home を入力して、Create scene ボタンをクリックします。
- シーンが作成され、作成されたシーンの画面に遷移します。
- 左上の Settings タブを選択します。
- Environment Preset : Neutral を選択します。
- 中央のシーンビュー左上の十字ボタンから Add 3D model をクリックします。
- room.glbを選択し、Add ボタンをクリックします。
- 左上の Hierarchy タブを選択します。
- 左のサイドバー内の room を選択します。
- 右の Inspector 内の Transform の Rotation の Y のみを -90 に設定します。
- 左上の Rules タブを選択
- 左のサイドバー内の Rule id に PIR と入力し、Add New Rule ボタンを押す。
- 作成された PIR を展開します。
- Add new statement ボタンをクリックして、以下のように設定します。
- Expression : status
- Target : Icon、Error
- Add new statement ボタンをクリックして、以下のように設定します。
- Expression : !status
- Target : Icon、Info
- 中央のシーンビュー左上の十字ボタンから Add tag を選択して画像のように設定します。
- Name : PIR1 または PIR2
- Default Icon : Info
- EntityId : PIR
- ComponentName : PIR1 または PIR2
- PropertyName : status
- Rule Id : PIR
- 上記を繰り返し、2 つのタグを追加します。
- タグの位置は好きな位置へ配置していただいた大丈夫です。
さてこれでもう 3D の仮想空間上に情報を表示するタグの配置まで完了しました。しかし AWS IoT TwinMaker のシーンビュー上ではデータによってタグの表示は変わりません。そこで Amazon Managed Grafana にこのシーンビューを埋め込むことによって、リアルタイムにデータが反映されることを次に確認していきます。
今回は部屋のモデルデータとタグで階層構造を作りませんでしたが、部屋の子の階層にタグを配置することもできます。このようにすることで、部屋のモデルを移動させた際に、子要素であるタグも追従するようになり、配置作業の際に便利です。
また、今回は部屋全体のモデルデータを用いて、そこにタグを配置して状態の変化を可視化しています。一方で部屋や各家具をそれぞれ別々の 3D モデルとしてインポートすることで、タグの代わりに各家具全体の色を変更することも可能です。
クリックすると拡大します
4-10. Amazon Managed Grafana 用のユーザー認証の設定
AWS SSO もしくは SAML での認証方法が提供されています。
今回はこの手順の説明は省略します。既にあるユーザーを使用するか、新規にユーザーを作成しておいてください。
4-11. Amazon Managed Grafana : ワークスペースの作成
Amazon Managed Grafana のワークスペースを作成していきます。
今回は、SSO での認証で進めていきます。
ワークスペースの作成画面 を開いて以下のように設定します。
- Workspace name : Smart_3D_Home
- Next ボタンをクリックします。
- Configure settings では以下のように設定します。
- Authentication access : 先ほど用意した認証方法を選択します。
- Permission type : Customer managed を選択します。
- Select an existing role : Smart_3D_Home を選択します。
- Next ボタンをクリックします。
- Service managed permission settings : Next ボタンをクリックします。
- Review and create : Create workspace ボタンをクリックします。
- 作成したワークスペースの画面に自動遷移します。
クリックすると拡大します
4-12. Amazon Managed Grafana : ユーザーの追加と設定
作成したワークスペースの画面の Authentication タブでユーザーの追加や SAML の設定を実施してください。SSO の場合は AWS Managed Grafana ワークスペースの画面で以下の手順を進めていきます。
- Assign users and groups ボタンをクリックします。
- ユーザーを選択し、Assign users and groups をクリックします。
- Assigned users の画面でユーザーを選択します。
- Make admin ボタンをクリックします。
- User Type が Admin に変更になったことを確認します。
Admin にすることで後述の AWS Managed Grafana でダッシュボードが作成できるようになります。
クリックすると拡大します
クリックすると拡大します
4-13. Amazon Managed Grafana : データソースの追加
次にデータソースを追加します。ここではデータソースは AWS IoT TwinMaker となります。
Amazon Managed Grafana に既にインストール済みの AWS IoT TwinMaker プラグインを使用して、AWS IoT TwinMaker をデータソースとして以下の手順で設定します。
- 作成したワークスペースの画面から AWS Managed Grafana workspace URL をクリックします。
- SSO でユーザー認証し、ログインすると、AWS Managed Grafana のホーム画面が開きますので、左のサイドバーから、Configuration 内の Data sources を選択します。
- Add data source をクリックします。
- Add data source 画面の検索バーに TwinMaker と入力後、検索し、AWS IoT TwinMaker を指定し Select ボタンをクリックします。
- こちらの画像のように設定し、Save & test をクリックします。
クリックすると拡大します
4-14. Amazon Managed Grafana : ダッシュボードの作成
最後にダッシュボードの作成を行なっていきます。以下の手順で進めてください。
- 左のサイドバー内の十字ボタン上で、Import を選択します。
- Import 画面で、Upload JSON file ボタンをクリックします。
- こちら から Grafana_Dashboard.json.zip ファイルをダウンロード後、解凍し、Grafana_Dashboard.json ファイルを選択し、Import ボタンをクリックします。
- Smart 3D Home というダッシュボードの画面が開きます。
- 上部にある Time Series History パネルの名前の右のプルダウンを開き、Edit ボタンをクリックします。
- 編集画面下部の Entity、Component Name、Selected Properties を選択し直します。(2 種類あるので、PIR1 と PIR2 それぞれ選択し直します)
- 画面右上の Apply ボタンをクリックします。
- ダッシュボードの画面で、下部にある TwinMaker Scene Viewer パネルの名前の右のプルダウンを開き、Edit ボタンをクリックします。
- 画面右側の Scene から Smart_3D_Home を選択し直します。
- 編集画面下部の Entity、Component Name、Selected Properties を選択し直します。(2 種類あるので、PIR1 と PIR2 それぞれ選択し直します)
- 画面右上の Apply ボタンをクリックします。
- ダッシュボードの画面上の Save dashboard ボタンをクリックします。
- Save ボタンをクリックします。
これで全て完成です。動画でダッシュボードの動きを見てみましょう。
6. まとめ
現実世界と仮想世界がつながり、自身の部屋の状態を 3 次元的かつリアルタイムに同期し可視化することができました。これにより場所ごとの状態や状況の把握が可能となり、自宅環境の改善や見守り、防犯などに役に立つかもしれません。
また今回は非常にシンプルなセンサーを用いていますが、他にも温度や湿度、環境光センサーなどの情報を同期させることも可能です。M5StickC の場合であれば多くの種類のハットが販売されているため、今回のように簡単にセンサーを接続することができます。ぜひ本記事の構成をカスタムして、お好きなデータをぜひ同期させてみてください。
筆者プロフィール
飯塚 将太
アマゾン ウェブ サービス ジャパン合同会社
IoT ソリューションアーキテクト
IoT のワークロードを持つお客様の技術支援しています。
自宅のスマートホーム化が趣味です。
AWS を無料でお試しいただけます