
AWS IoT TwinMakerとIoT SiteWiseで風力発電タービンのデジタルツインを作成してみた
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、CX事業本部 IoT事業部の若槻です。
AWS IoT TwinMakerでデータソースをAWS IoT SiteWiseとする構成を作成する方法を調べていたところ次の公式Workshopを見つけました。
AWS IoT TwinMakerとIoT SiteWiseで風力発電タービンのデジタルツインを作成するハンズオンです。せっかくなのでやってみました。
やってみた
このハンズオンの最終的な構成は次のようになります。

Configure IoT SiteWise
IoT TwinMakerのデータソースとしてIoT SiteWiseを構成します。
modelの作成
AWS IoT SiteWise Models 作成コンソールで、[Model details > Name]でWindfarmと指定。

[Measurement definitions]で次のmeasurementを追加します。
- Name:
speed - Unit:
rpm - Data type:
Double

一番下の[Create model]をクリックして作成を完了します。
assetの作成
AWS IoT SiteWise Assets 作成コンソールで、[Model information > Model]でWindfarmを選択し、[Asset information > Name]でWindmill001を指定します。[Create asset]をクリックして作成を完了させます。

作成したassetで[Edit]をクリック。

[Measurement]の"speed"に/cleanenergy/milldata/speedを指定し、[MQTT Notification status]でENABLEDを選択して、変更を保存します。

データのローディングの開始
データをSiteWiseのエイリアス/cleanenergy/milldata/speedに10秒毎にロードするようにします。
push_data.shというファイル名で次のスクリプトを作成します。
#!/bin/bash
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
while true; do
speed=$(( $RANDOM % 197 ))
epoch=`date '+%s'`
echo "Data $speed at $epoch"
read -r -d '' VAR <<!
{
"entries": [
{
"entryId": "1575691200",
"propertyAlias": "/cleanenergy/milldata/speed",
"propertyValues": [
{
"value": {
"doubleValue": $speed
},
"timestamp": {
"timeInSeconds": $epoch
},
"quality": "GOOD"
}
]
}
]
}
!
echo $VAR > /tmp/122.json
aws iotsitewise batch-put-asset-property-value --cli-input-json file:///tmp/122.json #必要に応じてリージョンを指定
sleep 10
done
次のコマンドを実行してデータのローディングを開始します。nohupにより実行はバックグラウンドで継続されます。
# Change the script permissions to executable chmod +x push_data.sh # execute this script in nohup mode to leave it running in background as shown below nohup ./push_data.sh &

Setup TwinMaker workspace
SketchfabでWind Turbine - Download Free 3D model by MRowa (@MRowa) [2a83775]から風量タービンの3Dモデルをダウンロードします。
未作成の場合は無料でアカウントを作成できます。
glTF形式で3Dモデルをダウンロードします。

ダウンロードしたデータはunzipしておきます。

AWS IoT TwinMaker Workspaces 作成コンソールで、[Skip to review and create]をクリックして次に進み、[Create Workspace]をクリックしてワークスペースの作成を完了させます。
- Name:
Windfarm - S3 bucket:
Create an S3 bucket - Execution role:
Auto-generate a new role

作成したワークスペースの詳細で[Workspace information > S3 resource]で作成されたS3 Bucket名を確認します。

確認したS3 Bucketに先程unzipした3Dモデルデータのファイルおよびフォルダをすべてアップロードします。

するとワークスペースWindfarmの[Resource Library]でアップロードされたファイルが参照できるようになります。

Configure TwinMaker entity
Workspace Windfarm Entity 作成コンソールでWindmill001という名前のentityを作成します。

作成されたentityを選択して[Add component]をクリック。

[Component information]で次のように指定してcomponentの追加を完了します。
- Name:
WindMillMetrics - Type:
com.amazon.iotsitewise.connector - Asset Model:
Windfarm(Configure IoT SiteWise で作成したもの) - Asset:
Windmill001(Configure IoT SiteWise で作成したもの)

Compose TwinMaker scene
IoT TwinMakerのsceneを構成します。
Scene composition
Workspace Windfarm Scenes コンソールで[Create scene]をクリックし、[ID]でWindfarmを指定してシーンを作成します。

scene composerが開くので、[+ > Add 3D model]をクリック。

scene.gltfを選択して[Add]をクリック。

composer windowの中央あたりをクリック。

すると3Dモデルが追加されますが、画面に対してスケールが大きいので[Inspector > Transform > Scale]で[X]、[Y]および[Z]それぞれを0.001に変更します。

適当なスケールとなりました。

そして[Settings > Scene > Environment Preset]でNeutralを指定すると、ライトを設定しなくても3Dモデルが色がついて見えるようになります。

Link entity with Model
[+ > Add tag]をクリック。

3Dモデル上の適当な場所をクリック。

するとtagが追加されました。

scene nodeを展開してtagをその中にドラッグし、scene配下に移動させます。(これより深い階層配下に配置するとGrafana dashboard上でtagのiconが表示されなくなります。)

tagを選択したまま、[Inspector]でtagを次の通り設定します。
- Name:
speed - Default Icon:
Info - Entity Id:
Windmill001 - Component Name:
WindmillMetrics - Property Name:
speed - Rule Id:
sampleAlarmIconRule

[Rules]タブのsampleAlarmIconRuleで既存のRuleを削除した上で、次のRuleを作成します。これによりspeedの値に応じてアイコンが変わるようになります。
- Expression:
speed <= 100 - Target:
Icon Error

[Hierarchy]タブに戻り、sceneを展開してSketchfab_Sceneの[+]をクリック。

Sketchfab_Sceneのnodeが作成されるのでそれを選択したまま[+ > Add model shader]をクリック。

[Inspector]でmodel shaderを次の通り指定します。
- Entity Id:
Windmill001 - Component Name:
WindmillMetrics - Property Name:
speed - Rule Id:
sampleTimeSeriesColorRule

[Rules]タブのsampleTimeSeriesColorRuleで既存のRuleを削除した上で、次のRuleを作成します。これによりspeedの値に応じてモデルの色(shader)が変わるようになります。
- Expression:
speed <= 100 - Target:
Color #d13212

これでIoT TwinMakerのsceneが作成できました。
Visualize and Monitor
Amazon Managed GrafanaでTwinMakerで作成したsceneを可視化します。
Grafanaワークスペースは以前に下記で作成したものを使用しました。
Setting up Amazon Managed Grafana
Amazon Grafana Workspaces コンソールで、作成済みのワークスペースの[IAM role]を確認します。

ここでAWS IoT TwinMaker Workspaces Windfarm Dashboard settingsにアクセスし、先程確認したGrafanaダッシュボードのIAMロールを[Grafana authentication provider]に指定し、[Next]をクリック。

[Create dashboard policy]に表示されるpermissionの構文をコピーし、[Create policy in IAM]をクリック。

先程コピーしたPermissionを指定したIAMポリシーを作成します。

また[AWS IoT TwinMaker Workspaces Windfarm Dashboard settings]に戻り、[Update dashboard role policy]のpolicy構文をコピーし、[Create dashboard role in IAM]をクリック。

先程コピーしたpolicyを[Trust relationships]に指定したIAM Roleを作成します。

また同Roleには先程作成したIAMポリシーをアタッチします。

[AWS IoT TwinMaker Workspaces Windfarm Dashboard settings]に戻り、先程作成したIAM Roleを[Dashboard role]に指定し、[Next]をクリックし、[Save changes]をクリックして変更を保存します。

Grafanaワークスペースにサインインし、[gear > Data Sources]をクリック。

Data sourceとしてAWS IoT TwinMakerを追加します。すでに他のTwinMakerのData sourceが追加済みの場合は名前末尾に-{連番}と付きます。

[Assume Role ARN]で先程作成したDashboard roleを指定し、[Workspace]にWindfarmを指定して、[Save & Test]をクリックしてテストが成功することを確認します。

[+ > Add a new panel]をクリック。

VisualizationでAWS IoT TwinMaker Scene Viewerを選択します。

[Workspace]および[Scene]でWindfarmを指定すると、sceneと風力発電タービンの3Dモデルが表示されます。

[Query]で次のように指定し、[Apply]をクリック。
- Data source:
AWS IoT TwinMaker-1(先程追加したData Sourceを選択) - Query Type:
Get Property value History By Entity - Entity:
Windmill001 - Component Name:
WindMillMetrics - Selected Properties:
Speed (DOUBLE)

[Save dashboard]をクリックし、名前をつけてダッシュボードを保存します。

これでGrafanaダッシュボードが作成できました。
SiteWiseのassetWindmill001でspeedが100以上の時は、Grafanaダッシュボード上で3Dモデルのiconおよびshaderが正常な表示となります。

100より小さい時は、iconおよびshaderがエラー表示となります。

おわりに
AWS IoT TwinMakerとIoT SiteWiseで風力発電タービンのデジタルツインを作成してみました。
re:Invent 2022で参加した下記の2つのWorkshopセッションの合わせ技のようなWorkshopでした。TwinMakerとSiteWiseを連携する方法を改めて確認したかったのでとても有意義でした。
- [レポート] ワークショップ #AER305 Use AWS IoT TwinMaker to easily create digital twins for aerospace uses に参加しました #reinvent | DevelopersIO
- [レポート] ワークショップ #ENU301 Get hands-on and unlock renewable energy data with AWS IoT に参加しました #reinvent | DevelopersIO
以上









