英語版はこちら
これはソリューションガイダンスの実装例で、建物データを収集・可視化し、エネルギー使用量、コスト、関連する温室効果ガス(GHG)排出量を最適化するための洞察を得て運用を自動化する方法を示しています。
このガイダンスでは、インフラストラクチャ資産のデプロイにAWS Cloud Development Kit (AWS CDK)を使用し、エッジデバイスにコンポーネントをデプロイするためにAWS IoT Greengrassを使用しています。
- このサンプルシナリオでは、暖房と換気システムを備えた2つの建物があります。目的は、エネルギー使用を最適化しながら、建物を望ましい温度と空気品質に保つことです。
- 暖房器具のエネルギー使用量を測定するプラグインセンサーを設置し、APIを介してアクセス可能な外部サービスにデータを保存します。
- AWS IoT Greengrassコンポーネントを搭載したエッジIoTデバイスを設置します。1つのコンポーネントは温度とCO2 ppmセンサーデータを収集しAWS IoT Core に送信し、もう1つのコンポーネントはCO2 ppmが高いためにIoT Thingsデバイスシャドウをモニタリングして換気の必要性を示す場合に自動的に建物を換気します。
- AWS IoT Coreはセンサーデータを収集し、AWS Lambdaにルーティングしてから、リアルタイムデータ分析のためにAmazon Timestreamに保存します。
- Amazon EventBridgeは定期的にAWS Lambdaをトリガーして、エネルギー使用量や気象データサービスなどの外部サービスからデータを収集します。
- Amazon Managed GrafanaはAmazon Timestreamに接続してリアルタイムでデータを可視化します。
このガイダンスのサンプルコードを実行する際のAWSサービスの費用はお客様の負担となります。
注意: 実際のコストは、デバイス数、Amazon Managed Grafanaのユーザー数、Amazon Timestreamのクエリ頻度などによって異なる場合があります。
2024年8月時点で、us-west-2 (オレゴン) リージョンで以下の前提条件においてこのソリューションを実行する場合の推定コストは、月額約$122.43 (USD)です。
このコストシナリオは、以下の構成に基づいています:
- 2台のIoT Greengrassデバイスから10秒間隔でIoTセンサーデータを取り込む(月518,400リクエスト)
- 1分間隔でエネルギー使用量APIデータを収集(月43,200リクエスト)
- 5分間隔で気象データを収集(月10,800リクエスト)
AWS サービス | 構成 | 月額コスト [USD] |
---|---|---|
AWS IoT Greengrass | 2台のアクティブデバイス | $0.33 |
AWS IoT Core | 86,400接続分、518,400メッセージ、518,400デバイスシャドウ操作、518,400ルールエンジンアクション | $1.42 |
AWS Lambda (IoT データ収集) | 518,400リクエスト、128 MBメモリ、200 ms実行時間 | $0.32 |
AWS Lambda (デバイスシャドウ) | 518,400リクエスト、128 MBメモリ、1s実行時間 | $1.18 |
AWS Lambda (電力消費データ収集) | 43,200リクエスト、128 MBメモリ、200 ms実行時間 | $0.19 |
AWS Lambda (天気データ収集) | 10,800リクエスト、128 MBメモリ、1s実行時間 | $0.02 |
Amazon Timestream | 1KBレコードサイズ、0.62 GBメモリストア書き込み、4 TCU x 40時間、3日間のメモリ保持、3ヶ月の磁気ストレージ保持 | $84.77 |
Amazon Managed Grafana | 2 エディタ、2 ビューワー | $28 |
Amazon DynamoDB | 100万読取リクエスト | $0.13 |
AWS Secrets Manager | 2 シークレット, 54,000 APIコール | $1.07 |
合計月額コスト試算 | $117.43 |
2024年8月時点で、us-west-2 (オレゴン) リージョンで以下の前提条件においてこのソリューションを実行する場合の推定コストは、月額約$4,671.12 (USD)です。
このコストシナリオは、以下の構成に基づいています:
- 1,000 台のIoT Greengrassデバイスから10秒間隔でIoTセンサーデータを取り込む(月259,200,000リクエスト)
- 1分間隔でエネルギー使用量APIデータを収集(月43,200リクエスト)
- 5分間隔で気象データを収集(月10,800リクエスト)
- 1つの建物あたり10台のデバイスが設置され、各建物には1 Amazon Managed Grafanaビューワーを割り当て
- Amazon Timestreamへのクエリは、1日8時間、月30日間、平均4 TCU(Timestream Capacity Unit)で実行
AWS サービス | 構成 | 月額コスト [USD] |
---|---|---|
AWS IoT Greengrass | 1,000 台のアクティブデバイス | $163.60 |
AWS IoT Core | 43,200,000接続分、259,200,000メッセージ、259,200,000デバイスシャドウ操作、259,200,000ルールエンジンアクション | $703.34 |
AWS Lambda (IoT データ収集) | 259,200,000リクエスト、128 MBメモリ、200 ms実行時間 | $159.84 |
AWS Lambda (デバイスシャドウ) | 259,200,000リクエスト、128 MBメモリ、1s実行時間 | $591.84 |
AWS Lambda (電力消費データ収集) | 43,200リクエスト、128 MBメモリ、100s実行時間 | $9.01 |
AWS Lambda (天気データ収集) | 10,800リクエスト、128 MBメモリ、100s実行時間 | $2.25 |
Amazon Timestream | 1KBレコードサイズ、310.80 GBメモリストア書き込み、4 TCU x 730時間、3日間のメモリ保持、3ヶ月の磁気ストレージ保持 | $2,459.67 |
Amazon Managed Grafana | 2 エディタ、100 ビューワー | $518.00 |
Amazon DynamoDB | 100万読取リクエスト | $62.5 |
AWS Secrets Manager | 2 シークレット, 54,000 APIコール | $1.07 |
合計月額コスト試算 | $4,671.12 |
smart-and-sustainable-buildings/
├── bin
│ └── smart-and-sustainable-buildings-demo.ts (CDKメインアプリ)
├── docs (ドキュメント)
│ ├── README-ja.md (日本語README)
│ └── DEVICE_SETUP.md (デバイスのセットアップ方法)
├── imgs (スクリーンショットなどの画像)
├── lib
│ ├── construct (CDKコンストラクト)
│ │ ├── gdk-publish (Greengrass Development Kit関連コンストラクト)
│ │ ├── datastore.ts (Timestream)
│ │ ├── greengrass-bootstrap.ts (Greengrassのブートストラップ)
│ │ ├── iot.ts (AWS IoT CoreルールとAWS Lambda)
│ │ ├── power-data-collection.ts (エネルギー使用量の収集)
│ │ └── weather-data-collection.ts (気象データの収集)
│ ├── gg_components (AWS IoT Greengrassコンポーネント)
│ │ ├── automate-ventilation (自動換気コンポーネント)
│ │ └── sensor-data-collection (センサーデータ収集コンポーネント)
│ ├── grafana (Grafanaダッシュボード)
│ │ └── dashboard.json (Grafanaダッシュボードテンプレート)
│ ├── lambda (Lambda関数アセット)
│ │ ├── external-data-collection (外部サービスからデータを収集するAWS Lambda関数)
│ │ ├── gdk-publish (Greengrass Development Kitを公開するAWS Lambda)
│ │ ├── iot (IoTデータを処理するAWS Lambda)
│ │ └── layer (AWS Lambdaレイヤー)
│ ├── data-collection.ts (バックエンドリソースをデプロイするスタック)
│ └── greengrass-stack.ts (AWS IoT Greengrassコンポーネントを公開するスタック)
├── tools
│ ├── dynamodb (デバイス情報を Amazon DynamoDBに登録するスクリプト)
│ └── secrets-manager (シークレットを Secrets Managerに登録するスクリプト)
├── .gitignore
├── .npmignore
├── LICENSE
├── README.md (このドキュメント)
├── cdk.json (CDK設定)
├── jest.config.js (テスト設定)
├── package-lock.json (関連パッケージ情報)
├── package.json (関連パッケージ情報)
└── tsconfig.json (TypeScript設定)
これらのデプロイ手順はMacOSでの使用を想定しています。異なるオペレーティングシステムを使用してデプロイする場合は、追加の手順が必要になる場合があります。
このプロジェクトは外部API(OpenWeatherMap、SwitchBotなど)や他社が提供する製品を利用しています。これらのサービスを使用する際は、各サービスの利用規約に従ってください。本プロジェクトは、これらの外部サービスの使用に起因するいかなる問題についても責任を負いません。
このガイダンスで提供されているサンプルコードをデプロイして実行するには、以下のパッケージを環境にインストールする必要があります:
- お好みのIDE
- 最新バージョンのPython
- AWS CDKでインフラストラクチャをデプロイするためのNode.jsとTypeScript
- OpenWeather Map APIキー
このリポジトリの全アセットを楽しむには、以下のハードウェアまたは同等の代替品が必要です。 異なるオプションを使用する場合は、追加または手順の変更が必要になる場合があります。
- お好みのIoTデバイス(Raspberry Pi 4 Model B)
- 温度センサー(BME280)
- CO2センサー(MH-Z19)
- サーボモーター(SG90)
- プラグインセンサー(SwitchBot Plug MiniとAPIキー)
- SwitchBot アプリからAPI Token とデバイスIDを取得してください。デバイスIDはSwitchBotアプリの「デバイス情報」の「BLE MAC」から取得できます(コロンは不要です)。
IAMユーザーは、AWS CDKを使用してスタックをデプロイするための権限が必要です。インフラストラクチャをデプロイするために付与する必要があるアクションについては、AWS Cloudformation権限のドキュメントを参照してください。
ユーザーは、このガイダンスで使用される以下のリソースをデプロイするための権限も必要です:
例示リソース:
- Amazon DynamoDB
- Amazon S3
- AWS Lambda
- AWS IoT
- Amazon Timestream
- AWS Secrets Manager
- AWS CodeBuild
- Amazon SNS
- AWS IAM
- AWS IAM Identity Center
- このデプロイをサポートするリージョンへのアクセス [デフォルト:US West 2(オレゴン)]
- Amazon Managed Grafana
このセクションでは、AWS CDKを使用してインフラストラクチャをデプロイする前に環境を設定するために必要な手順を提供します。これらの手順には以下が含まれます:
- このガイダンスのリポジトリをクローンする
- ノード依存関係をインストールする
- AWS IAM認証情報を設定する
- CDKをブートストラップする
1. このガイダンスのリポジトリをクローンする
git clone https://github.com/aws-solutions-library-samples/guidance-for-smart-and-sustainable-buildings-on-aws.git
2. ノード依存関係をインストールする
npm ci
3. 特定の権限を持つAWS IAM認証情報を設定する AWS CDKを使用するためのAWS IAM認証情報を初めて設定する場合は、AWS CDKの使用開始を参照して詳細を確認してください。
export AWS_ACCESS_KEY_ID=<insert your access key>
export AWS_SECRET_ACCESS_KEY=<insert secret access key>
export AWS_SESSION_TOKEN=<insert session token>
4. リソースをデプロイするAWSリージョンを設定する
- 以下のコマンドを使用して、リソースをデプロイするAWSリージョンを設定します。以下の例では、AWSリージョンをオレゴン(us-west-2)に設定しています。
export AWS_REGION=us-west-2
- GDK Config配下の各コンポーネント(自動換気コンポーネントとセンサーデータ収集コンポーネント)の
gdk-config.json
ファイル内の{aws_region}
を変更します。
...
"publish": {
"bucket": "gdk-components",
"region": "us-west-2"
}
...
このガイダンスのサンプルコードをデプロイするには6つの手順があります:
- AWS Lambda の依存関係をインストールする
- AWS CDKでインフラストラクチャをデプロイする
- デバイス情報をDynamoDBに登録する
- シークレットをAWS Secrets Managerに登録する
- デバイスを設定する
- Amazon Managed Grafanaダッシュボードをセットアップする
chmod +x tools/install.sh
./tools/install.sh
リポジトリのルートディレクトリで以下のコマンドを実行します。
npm ci
AWSアカウントでCDKを初めて使用する場合は、一度ブートストラップする必要があります。アカウントがすでにCDKブートストラップされている場合は、以下のコマンドを実行する必要はありません。
cdk bootstrap
次に、以下のコマンドを実行してAWSリソースをデプロイします。時間がかかる場合があります。
cdk deploy --all
後続の手順で必要になるリソースIDを含むコマンドの出力をメモしてください。 出力例は以下の通りです。
✅ SustainableBuilding
✨ Deployment time: 53.85s
SustainableBuilding.DatastorelocationTable0A158CD4 = SustainableBuilding-DatastorelocationB25ECCC2-1F13H7MQ5JGUT
SustainableBuilding.PowerDataCollectionswitchBotApiSecretName96638740 = PowerDataCollectionswitchBo-p8emQ8cnT8SV
SustainableBuilding.WeatherDataCollectionOpenWeatherMapApiSecretNameCC86E358 = WeatherDataCollectionOpenWe-c1gS1OBWCXo8
...
✅ GreengrassStack
✨ Deployment time: 87.13s
Outputs:
GreengrassStack.AutomateVentilationComponentName = automateVentilation
GreengrassStack.AutomateVentilationComponentVersion = 1.0.0
GreengrassStack.SensingDevice1GreengrassInstallCommandforLinuxCD1E1E30 = sudo -E java "-Droot=/greengrass/v2" "-Dlog.store=FILE" -jar ./GreengrassInstaller/lib/Greengrass.jar --aws-region us-west-2 --thing-name SensingDevice1 --thing-policy-name SensingDevice1ThingPolicy --tes-role-name GreengrassStack-SensingDevice1GreengrassTESRole5551-5P3cYy7LMKix --tes-role-alias-name GreengrassStack-SensingDevice1GreengrassTESRole5551-5P3cYy7LMKixAlias --component-default-user ggc_user:ggc_group --provision true --setup-system-service true --deploy-dev-tools true
GreengrassStack.SensingDevice2GreengrassInstallCommandforLinuxB03CE7B0 = sudo -E java "-Droot=/greengrass/v2" "-Dlog.store=FILE" -jar ./GreengrassInstaller/lib/Greengrass.jar --aws-region us-west-2 --thing-name SensingDevice2 --thing-policy-name SensingDevice2ThingPolicy --tes-role-name GreengrassStack-SensingDevice2GreengrassTESRole9F2A-fvugXegtX4Bx --tes-role-alias-name GreengrassStack-SensingDevice2GreengrassTESRole9F2A-fvugXegtX4BxAlias --component-default-user ggc_user:ggc_group --provision true --setup-system-service true --deploy-dev-tools true
GreengrassStack.sensorDataCollectionComponentName = collectSensorData
GreengrassStack.sensorDataCollectionComponentVersion = 1.0.0
以下のコマンドを実行する前に、次の変更を行ってください:
- {locationTable}を
cdk deploy --all
を実行した後の出力値SustainableBuilding.DatastorelocationTable~
に置き換えてください。 - /tools/dynamodb/locations_1.jsonと/tools/dynamodb/locations_2.jsonを、あなたの場所とデバイス(SwitchBot Plug MiniとEdgeデバイス)の情報に合わせて修正してください。{SwitchBotDeviceID} は、前提条件 - ハードウェアで取得したデバイスIDに置き換えてください。.
bash tools/dynamodb/add_location.sh {locationTable}
以下のコマンドを実行する前に、次の変更を行ってください:
{secretid}
をcdk deploy --all
を実行した後の出力値SustainableBuilding.WeatherDataCollectionOpenWeatherMapApiSecretName~
に置き換えてください。- {apikey}を前提条件 - ハードウェアで取得したOpenWeather Map APIキーに置き換えてください。
bash tools/secrets-manager/register-openweathermap-secret.sh {secretid} {apikey}
以下のコマンドを実行する前に、次の変更を行ってください:
{secretid}
をcdk deploy --all
を実行した後の出力値SustainableBuilding.PowerDataCollectionswitchBotApiSecretName~
に置き換えてください。- {apikey}を前提条件 - ハードウェアで取得したSwitchBot API Tokenに置き換えてください。
DEVICE_SETUPを参照してAWS IoT Greengrassデバイスをセットアップしてください。
前述の手順に従えば、Amazon Timestreamにデータが蓄積され始めます。 リアルタイムで保存されたAmazon Timestreamデータベースのデータを可視化するためのAmazon Managed Grafanaダッシュボードを構築しましょう。
Amazon Managed Grafanaリソースの作成と使用方法については、Amazon Managed Grafanaリソースの作成と使用方法を学ぶを参照してください。
以下は、リソースをセットアップしサンプルダッシュボードを作成するための手順例です。 AWSマネジメントコンソールにログインした後、これらの手順を実行してください。
-
AWSマネジメントコンソールにログインし、CDKリソースをデプロイしたリージョンを選択します。
-
Amazon Managed Grafanaにアクセスできるユーザーを管理するためにIAM Identity Centerをセットアップします。
-
IAM Identity Centerにユーザーを追加します。
-
Amazon Managed Grafanaワークスペースを作成します。以下は設定例のスクリーンショットです。 Grafana のバージョンを10.4に設定します。
IAM Identity Center を認証方法として有効化します。
「Turn plugin management」を有効化します。
-
Amazon Timestreamをデータソースとして設定します。
-
ワークスペースに適切な役割(Admin、Viewer)でIAM Identity Centerユーザーを追加します。 「Assign new user or group」をクリックします。
-
ワークスペースURLにIAM Identity Centerユーザーでログインします。
-
Amazon Managed GrafanaでAmazon Timestream DBをデータソースとして設定します。 サイドバーから Apps -> AWS Data Sources -> Data sources を開きます。
AWS services タブで Timestream の「Install now」をクリックします。
右上の「Install [version]」をクリックします。
右上の「Add new data source」をクリックします。
デフォルトのリージョンを設定し、「Save & Test」をクリックします。
-
テンプレート(EN, JP) からダッシュボードを作成するためにJSONファイルをインポートします。
- 以下のスクリーンショットのように、エネルギー使用量、CO2 ppm、温度、気象データなどのすべてのメトリクスがAmazon Managed Grafanaダッシュボードに表示されていることを確認します。
- CO2 ppmがしきい値(デフォルト800 ppm)を超えたときにIoT ThingsデバイスシャドウShadowが更新され、サーボを回転させて建物のドアを換気することを確認します。
デプロイが完了すると、すべてが自動的に実行されるはずです。これで、Amazon Managed Grafanaダッシュボードを監視し、運用を最適化することでエネルギー、コスト、関連するGHG排出量をどのように最適化できるかをテストできます。
このガイダンスの実装例は、複数の建物からエネルギー使用量を最適化するための洞察を得るためのデータ収集、可視化、運用の自動化の基礎を提供します。このサンプルを修正して、あなたの環境に合わせることができます。これには以下が含まれる場合があります:
- エッジデバイスとコンポーネントをカスタマイズし、増やして、ビルディング管理システムやスマートメーターなど他のソースからデータを収集する。
- Amazon AthenaとAmazon QuickSightを使用して、過去のデータ分析とレポート作成を行う。
- AWS IoT TwinMakerを使用してデジタルツインを作成し、物理的な資産の状態を可視化・監視する。
クリーンアップするには、以下の順序でスタックを削除してください:
- Amazon Managed Grafanaリソース。
- AWS IAM Identity Center
- CDKリソース AWS CDKによって作成されたリソースを削除するには、以下のコマンドを実行してスタックを削除します。
cdk destroy --all
お客様は、本ガイダンスの情報を独自に評価する責任があります。本ガイダンスは:(a) 情報提供のみを目的としており、(b) AWSの現在の製品提供とプラクティスを表しており、予告なく変更される場合があり、(c) AWSおよびその関連会社、サプライヤー、またはライセンサーからのコミットメントや保証を作成するものではありません。AWS製品やサービスは、明示または黙示を問わず、いかなる保証、表明、条件なしに「現状のまま」提供されます。お客様に対するAWSの責任と義務は、AWS契約によって管理され、本文書はAWSとお客様との間のいかなる契約の一部でもなく、それを変更するものでもありません。
本プロジェクトは 佐藤 賢太 にて開発、メンテナンスしています。