メインコンテンツに移動
日常で楽しむクラウドテクノロジー

スマート x サステナブルビル管理をミニチュア建物で実現してみよう!

2024-11-01 | Author : 戸塚 智哉, 石渡 嘉之, 沢田 吉伯, 佐藤 賢太

はじめに

ビルダーのみなさま、こんにちは !

サステナビリティを意識したミニチュア倉庫のデモを作ってみた ! をお届けしてから、約 1 年が経ちました。

前回の記事では、現実の建物環境を再現したミニチュアモデルにおいて、室温や空気の質をデータに基づいて適切に管理することで省エネルギーにつながり、エネルギー利用にともなう費用や温室効果ガスの排出削減につながる過程を紹介しました。室温・空気の質はセンサーで計測し、室温をコントロールするためにヒーターを用い、空気の質をコントロールするためにドアの開閉を行います。空気の質の変化は、CO2 濃度を変化させ、人の出入りを擬似的に表現するようにしました。

従来のデモ環境

A demonstration room featuring a smart sustainable building dashboard displayed on a large screen. The dashboard shows real-time environmental and energy data, while two sensor boxes with artificial grass tops are placed on a table, illustrating IoT integration for smart building solutions.

ヒーターの消費電力、温度、CO2濃度などのデータをIoTデバイスやセンサーで収集し、AWSサービス(IoT Core、EventBridge、Lambda、CloudWatch、DynamoDB、Timestream、Grafanaなど)を使ってリアルタイムで分析・可視化する、スマートでサステナブルなビル管理の構成を示した日本語のアーキテクチャ図。

刷新されたデモ環境

従来のデモについてお客様と会話する中で「同じようなシステムを作ってみたいのでオープンソース化して欲しい」という嬉しいお声や、「ドアの開閉が面倒に見えるけど自動化できないの ?」などのご指摘を踏まえて改善できるポイントが見えてきました。

そこで、読者の皆様がご自身で環境を構築できるように以下のポイントでデモ環境の刷新を行いました。

 

前回の課題

今回の改善ポイント

ハードウェア面

端材を活用した DIY の場合、再構築が困難

汎用のレゴセットでデモを作り替えることで、誰でも再現できるように変更

ソフトウェア開発面

IoT エッジ側、クラウド側をそれぞれ複数人で分業して手作業で構築していたため、全体の環境を把握している人がおらず、再現することが困難
属人化しており、機能追加や改善を行うことも難しい状況

AWS Cloud Development Kit (AWS CDK) をベースに AWS IoT Greengrass Development Kit (GDK) を活用することで、IoT エッジ側もクラウド側もほとんどの作業を自動で簡単にデプロイできるような コードアセットを開発し、公開
ドアの自動開閉のような新しい機能を追加したい場合も、IoT エッジサイドもAWS IoT Greengrass のコンポーネントを追加し、対応する AWS 側の開発をすることで、容易に機能追加、保守性を向上。

機能追加

ドアの開閉が面倒

ドアの開閉の自動化については、新しい AWS IoT Greengrass コンポーネントを実装し、CO2 濃度が閾値を超えた場合に AWS IoT Device Shadow を用いてドアの開閉を制御。

本記事では、皆様のお手元で Guidance for Smart and Sustainable Buildings on AWS のサンプル実装をお試しいただく手順をお届けします。なお、CDK 実装により多くの手順を自動化できたため、Raspberry Pi デバイスの初期設定とレゴの組み立て部分を除けば、トータルで約 1 時間で構築できる内容になっております。

それでは、サステナブルビル管理のサンプル環境構築をお楽しみください !


X ポスト » | Facebook シェア » | はてブ »

A demonstration setup of a smart sustainable building management system, featuring IoT sensor models and a digital dashboard displaying energy usage, CO2 emissions, and environmental analytics data in Japanese. The photo shows physical models connected to sensors and a wall-mounted dashboard for real-time monitoring and visualization.

ご注意

本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。

*ハンズオン記事およびソースコードにおける免責事項 »

builders.flash メールメンバー登録

builders.flash メールメンバー登録で、毎月の最新アップデート情報とともに、AWS を無料でお試しいただけるクレジットコードを受け取ることができます。

今すぐ登録 »

1. デプロイ方法

1-1. クラウド側

それでは、クラウド側の構築をしていきましょう。前提として、git や Node.js、npm のインストール済みであることとします。また、今回のデプロイ先はオレゴンリージョン (us-west-2) に設定します。

CDK の設定 ※CDK の設定がすでに済んでいる方は不要になります。

今回のアセットを一通り CDK 化してるため、環境を CDK を使ってクイックに立ち上げていきましょう。実際みなさんが新規ソリューションを開発する場合においても、アセットをコード化しておき、環境の複製を簡素化しておくことは重要です。

レポジトリをクローン

まず、このガイダンスのレポジトリをクローンしてきます。

bash
git clone https://github.com/aws-solutions-library-samples/guidance-for-smart-and-sustainable-buildings-on-aws

Node.js パッケージをインストール

問題なくローカルに git レポジトリをクローンできたら、対象ディレクトリに移動して、Node.js パッケージをインストールします。

bash
npm ci

IAM 認証情報を登録

IAM 認証情報を登録をします。CDK を使用するための AWS IAM 認証情報を初めて設定する場合は、AWS CDK の使用開始 を参照してください。

bash
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>

AWS リージョンを設定

リソースをデプロイする AWS リージョンを設定します。扱いたいリージョンを設定してください。

bash
export AWS_REGION=us-west-2

GDK の設定

ここで、Greengrass のデプロイを効率化する GDK の設定を行います。 GDK Config 配下の各コンポーネント (自動換気コンポーネントとセンサーデータ収集コンポーネント) の gdk-config.json ファイル内の {aws_region} を変更します。ここも扱いたいリージョンを設定してください。

bash
...
      "publish": {
        "bucket": "gdk-components",
        "region": "us-west-2"
      }
...

1-2. デプロイ手順

ここからクラウド側に CDK を用いてデプロイしてきます。

1-2-1. AWS Lambda レイヤーの Python 依存関係をインストール

今回 open-weather-map のライブラリを新たにインストールする必要があるため、requirements.txt 含めて設定していきます。Python ライブラリをローカルに設定しておく必要があります。

python
pip install -t lib/lambda/layer/open-weather-map/python -r lib/lambda/layer/open-weather-map/requirements.txt
pip install -t lib/lambda/layer/requests/python -r lib/lambda/layer/requests/requirements.txt

※ 前提として、以下 Lambda で使うパッケージをインストールするローカル端末と、クラウド側の Lambda の CPU アーキテクチャが揃うようにしてください。

1-2-2. AWS CDK でインフラストラクチャをデプロイする

続いて、AWS CDK でインフラ側をデプロイしてきます。 まず、リポジトリのルートディレクトリで以下のコマンドを実行します。

python
npm ci

ブートストラップ (AWS アカウントで CDK を初めて使用する場合)

AWS アカウントで CDK を初めて使用する場合は、一度ブートストラップする必要があります。アカウントがすでに CDK ブートストラップされている場合は、以下のコマンドを実行する必要はありません。

python
cdk bootstrap

AWS リソースをデプロイ

次に、以下のコマンドを実行して AWS リソースをデプロイします。時間がかかる場合があります。

python
cdk deploy --all

コマンドの出力をメモ

後続の手順で必要になるリソース ID を含むコマンドの出力をメモしてください。

bash
出力例は以下の通りです。
 ✅  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

1-2-3. デバイス情報を Amazon DynamoDB に登録

本ソリューションは Amazon DynamoDB にマスター情報を設定しています。以下のコマンドを実行する前に、次の変更をご自身の環境に合わせて行なってください。

  • {locationTable} をcdk deploy --all を実行した後の出力値 SustainableBuilding.DatastorelocationTable~ に置き換えてください。

  • tools/dynamodb/locations_1.json と tools/dynamodb/locations_2.json を、あなたの場所とデバイス (SwitchBot Plug Mini と Edge デバイス) の情報に合わせて修正してください。

デバイス情報を Amazon DynamoDB に登録

コマンド

bash
bash tools/dynamodb/add_location.sh {locationTable}

1-2-4. シークレットを AWS Secret Manager に登録する

以下のコマンドを実行する前に、次の変更をご自身の環境に合わせて行なってください。

  • {secretid} cdk deploy --all を実行した後の出力値 SustainableBuilding.WeatherDataCollectionOpenWeatherMapApiSecretName~ に置き換えてください。

  • {apikey} を OpenWeather Map API キー から取得して、置き換えてください。

  • OpenWeatherMap の利用にあたっては、そちらの利用規約を参照の上ご利用ください。

AWS Secrets Managerに OpenWeatherMap API キーを登録

コマンド

bash
bash tools/secrets-manager/register-openweathermap-secret.sh {secretid} {apikey}

1-3. IoT デバイスの設定

IoT デバイス (Raspberry Pi 4 Model B) の初期セットアップと、センサーとモーターを動作させるために必要な設定を行っていきます。

1-3-1. Raspberry Pi OS の設定

Raspberry Pi のウェブサイトにある「Raspberry Piをセットアップする」を参考に、デバイスを設定します。

  • Raspberry Pi Imager 使用して Raspberry Pi OS (64-bit) を SD カードに書き込みます。

    • 今回は「リリース日時: 2024-07-04」を用いました

  • Raspberry Pi Imager で設定を編集し ユーザー名とパスワード、Wi-Fi の設定、SSH の有効化 を設定しておくと、この後の作業がスムーズに進みます。

  • 今回は 2 台 の Raspberry Pi を以下のホスト名で設定します。

    • SensingDevice1

    • SensingDevice2

1-3-2. センサーとモーターのセットアップ

温度センサー、CO2 センサー、サーボモーターの組み込みを行っていきます。

1. I2C、シリアルポートの有効化

SSH などでログインし、Raspberry Pi 4 Model B GPIO のピンレイアウトを pinout コマンドで確認します。モジュールを繋ぐときに参照するので、メモしておきます。

bash
pinout

---------------------------------------------

...
J8:
   3V3  (1) (2)  5V    
 GPIO2  (3) (4)  5V    
 GPIO3  (5) (6)  GND   
 GPIO4  (7) (8)  GPIO14
   GND  (9) (10) GPIO15
GPIO17 (11) (12) GPIO18
GPIO27 (13) (14) GND   
GPIO22 (15) (16) GPIO23
   3V3 (17) (18) GPIO24
GPIO10 (19) (20) GND   
 GPIO9 (21) (22) GPIO25
GPIO11 (23) (24) GPIO8 
   GND (25) (26) GPIO7 
 GPIO0 (27) (28) GPIO1 
 GPIO5 (29) (30) GND   
 GPIO6 (31) (32) GPIO12
GPIO13 (33) (34) GND   
GPIO19 (35) (36) GPIO16
GPIO26 (37) (38) GPIO20
   GND (39) (40) GPIO21
...

raspi-config

raspi-config で I2C、シリアルポートを有効にします。

bash
sudo raspi-config

I2C を有効化します。

  • 3 Interface Options を選択

  • I5 I2C を選択

  • Would you like the ARM I2C interface to be enabled? Yes を選択

  • Ok を選択

シリアルポート を有効化します。

  • 3 Interface Options を選択

  • I6 Serial Port を選択

  • Would you like a login shell to be accessible over serial? No を選択

  • Would you like the serial port hardware to be enabled?Yes を選択

  • Ok を選択し、 Finish を選択

シャットダウンします。

コマンド

bash
sudo shutdown -h 0

モジュールを接続

各モジュールを接続していきます。念のため、Raspberry Pi の電源を切って作業します。

2. 温度・湿度・気圧センサー (BME280) セットアップ

BME280 を Raspberry Pi のピンに接続します。


センサー側 Raspberry Pi 4 Model (括弧内はピンレイアウト番号)
BME280 VCC 3.3V(1)
BME280 GND GND(9)
BME280 SCL GPIO3(5)
BME280 SDA GPIO2(3)
BME280 CSB -
BME280 SDD GND(25)

3. CO2センサー (MH_Z19B) のセットアップ

MH_Z19B を Raspberry Pi のピンに接続します。


センサー側 Raspberry Pi 4 Model (括弧内はピンレイアウト)
MH-Z19 HD -
MH-Z19 Tx GPIO15(10)
MH-Z19 Rx GPIO14(8)
MH-Z19 PWM -
MH-Z19 GND GND(14)
MH-Z19 VIN 5V(2)

4. サーボモーター (SG90) のセットアップ

SG90 を Raspberry Pi のピンに接続します。


モーター側 Raspberry Pi 4 Model (括弧内はピンレイアウト)
SG90 Yellow GPIO12(32)
SG90 Red 5V(4)
SG90 Brown GND(6)

モジュール配線完了

モジュールの配線完了です。

A Raspberry Pi single-board computer in a clear plastic case with multiple colored wires and sensors connected, placed on a wooden desk.

5. パッケージインストール

Raspberry Pi を起動します。 BME280 の接続を確認するために i2c-tools をインストールします。

bash
sudo apt-get install i2c-tools
i2cdetect -y 1

接続成功

以下のように 76 が表示されれば正常です。


0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- 76 --

pigpio をインストール

pigpio をインストールし、サービスを実行します。

bash
sudo apt install pigpio
sudo service pigpiod start
sudo systemctl enable pigpiod.service

参考) サーボモーターの動作確認

サーボモーターの動作確認をしてみます。以下のような Python コードを実行すると、モーターが動くことが確認できます。

python
import pigpio
import time

servo_pin = 12

pi = pigpio.pi()

def set_angle(angle):
    pulse_width = (angle / 180) * (2400 - 500) + 500
    pi.set_servo_pulsewidth(servo_pin, pulse_width)

def main():
    try:
        set_angle(90)
        time.sleep(2)
        set_angle(0)
        time.sleep(2)
        set_angle(180)
        time.sleep(2)
        set_angle(0)
        time.sleep(2)
    except KeyboardInterrupt:
        print("stop")
    finally:
        pi.set_servo_pulsewidth(servo_pin, 0)
        pi.stop()

if __name__ == "__main__":
    main()

コードを servo_test.py に保存

上記コードを servo_test.py に保存し、動かします。

python
python3 ./servo_test.py

※ ctrl+c 入力で途中で停止することもできます

1-3-3. AWS IoT Greengrass の設定

各 Raspberry Pi デバイスに AWS IoT Greengrass をセットアップします。
詳細は AWS IoT Greengrass - Getting started を参照してください。

1. AWS CLI をインストール

AWS CLI をインストールします。

bash
cd ~
curl "https://awscli.amazonaws.com/awscli-exe-linux-aarch64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws —version

※ 今回用いたバージョンaws-cli/2.17.50 Python/3.11.9 Linux/6.6.31+rpt-rpi-v8 exe/aarch64.debian.12

2. Java Development Kit をインストール

Java Development Kit をインストールします。

bash
sudo apt install default-jdk
java -version

※ 今回用いたバージョンopenjdk 17.0.12 2024-07-16OpenJDK Runtime Environment (build 17.0.12+7-Debian-2deb12u1)OpenJDK 64-Bit Server VM (build 17.0.12+7-Debian-2deb12u1, mixed mode, sharing)

3. AWS IAM 認証情報と AWS リージョンを設定

AWS IAM 認証情報と AWS リージョンを設定します。

bash
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>
export AWS_REGION=<insert region>

4. Greengrass Core コンポーネントをインストール

Greengrass Core コンポーネントをインストールします。

bash
cd ~
curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip
unzip greengrass-nucleus-latest.zip -d GreengrassInstaller && rm greengrass-nucleus-latest.zip

4. Greengrass Core コンポーネントをインストール

Greengrass Core コンポーネントをインストールします。

bash
cd ~
curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip
unzip greengrass-nucleus-latest.zip -d GreengrassInstaller && rm greengrass-nucleus-latest.zip

5. Greengrass デバイスの登録

「1-2-2. AWS CDK でインフラストラクチャをデプロイする」の cdk deploy —all の出力から 各デバイス (thing-name) 用の登録コマンドをコピーし、実行します。

bash
登録コマンド
sudo -E java "-Droot=/greengrass/v2" "-Dlog.store=FILE" \
  -jar ./GreengrassInstaller/lib/Greengrass.jar \
  —aws-region {aws-region} \
  —thing-name {thing-name} \
  —thing-policy-name {thing-policy-name} \
  —tes-role-name {tes-role-name} \
  —tes-role-alias-name {tes-role-alias-name} \
  —component-default-user {user}:{group} \
  —provision true \
  —setup-system-service true \
  —deploy-dev-tools true

※ GreengrassStack.GreengrassBootstrapGreengrassInstallCommandforLinux... の = 以降

SensingDevice1 の例

以下は SensingDevice1 の例です。

bash
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-Nw5rh2LBy439 --tes-role-alias-name GreengrassStack-SensingDevice1GreengrassTESRole5551-Nw5rh2LBy439Alias --component-default-user ggc_user:ggc_group --provision true --setup-system-service true --deploy-dev-tools true

6. AWS IoT Things Device Shadow 作成

AWS IoT Things Device Shadow を作成します。

aws iot-data update-thing-shadow \—cli-binary-format raw-in-base64-out \--thing-name SensingDevice1 \--payload '{"state":{"reported":{"ventilate":true}}}' \"output.txt"

aws iot-data update-thing-shadow \--cli-binary-format raw-in-base64-out \--thing-name SensingDevice1 —shadow-name ventilation \--payload '{"state":{"reported":{"ventilate":true}}}' \"output.txt"

1-3-4. AWS IoT Greengrass コンポーネントのデプロイ

各 Raspberry Pi デバイスに Greengrass コンポーネントをデプロイします。
詳細は Deploy AWS IoT Greengrass components to devices を参照してください。

1. 設定ファイルの用意

  • gg-deployment-template.json のコピーを device-deployment-{デバイス名}.json として作成します。

  • 以下パラメータをデバイスに合わせて更新します。

    • {aws_region} AWS リージョン

    • {aws_account} AWS アカウント ID

    • {thing_name} デバイスの IoT Thing 名

  • componentVersion に cdk deploy —all のコマンド出力 sensorDataCollectionComponentVersion の値を入力します。

    • (例) GreengrassStack.sensorDataCollectionComponentVersion = 1.0.0 ※ 1.0.0 を指定

  • ホームディレクトリに docs ディレクトリを作成して、作成した device-deployment-{デバイス名}.json ファイルを配置します。

2. Greengrass コンポーネントをデプロイ

Greengrass コンポーネントをデプロイします。

bash
cd ~
aws greengrassv2 create-deployment --cli-input-json file://docs/device-deployment-{thing-name}.json

1-3-5. デプロイの確認

しばらく経ってから、エラーが出ていないかログを確認します。ターミナルを 3 つ開くと確認がしやすいです。ログが出力され続けるので、エラーが無ければ閉じてしまっても大丈夫です。

bash
sudo tail -f /greengrass/v2/logs/greengrass.log

-----------------------------------------------

sudo tail -f /greengrass/v2/logs/collectSensorData.log

-----------------------------------------------

sudo tail -f /greengrass/v2/logs/automateVentilation.log

センサーデーターが取得できていることを確認

センサーデーターが取得できていることを確認します。

bash
sudo tail -f /greengrass/v2/logs/collectSensorData.log | grep -e "DEVICE_NAME"

2024-09-26T10:51:37.343Z [INFO] (Copier) collectSensorData: stdout. {'DEVICE_NAME': 'SensingDevice1', 'TIMESTAMP': '20240926195137', 'TEMPERATURE': 28.502115403214702, 'HUMIDITY': 59.5540433882232, 'PRESSURE': 1010.1232182036342, 'CO2': 529}. {scriptName=services.collectSensorData.lifecycle.run.Script, serviceName=collectSensorData, currentState=RUNNING}

CO2 センサー に息を吹きかけると、‘CO2’ の値が上昇し、サーボモーターが一瞬動作するはずです。これで IoT デバイスのセットアップは完了です。

1-4. Amazon Managed Grafana ダッシュボードをセットアップする

前述の手順に従えば、Amazon Timestream にデータが蓄積され始めます。Amazon Timestream の sustainableBuilding データベースのテーブル sensor にデータが保存されているか確認してみましょう。問題なければ、次に進みます。

リアルタイムで保存された Amazon Timestream データベースのデータを可視化するための Amazon Managed Grafana ダッシュボードを構築していきます。

Amazon Managed Grafana リソースの作成と使用方法については、Amazon Managed Grafana リソースの作成と使用方法を学ぶ を参照してください。

リソースをセットアップしサンプルダッシュボードを作成するための手順例

以下は、リソースをセットアップしサンプルダッシュボードを作成するための手順例です。AWS マネジメントコンソールにログインした後、これらの手順を実行してください。

  1. AWS マネジメントコンソールにログインし、CDK リソースをデプロイしたリージョンを選択します

  2. Amazon Managed Grafana にアクセスできるユーザーを管理するために IAM Identity Center をセットアップします。

  3. IAM Identity Center にユーザーを追加します。

  4. Amazon Managed Grafana ワークスペース を作成します。以下は設定例のスクリーンショットです。Grafana のバージョンを 10.4 に設定します。

Screenshot showing the 'Specify workspace details' step during the creation of a new Amazon Grafana workspace in the AWS Management Console. The workspace is named 'sustainable-building' and the selected Grafana version is 10.4.

5. 「AWS IAM Identity Center」を認証方法として有効化

「AWS IAM Identity Center」を認証方法として有効化します。

Screenshot of the 'Configure settings' step in AWS Managed Grafana workspace setup, showing options for authentication access (IAM Identity Center, SAML), permission type (service managed or customer managed), and outbound VPC connection configuration.

6.「Turn plugin management on」を有効化

Turn plugin management on」を有効化します。

Screenshot of the Amazon Grafana workspace configuration screen showing optional settings for Grafana alerting, plugin management, and network access control options such as open or restricted access.

7. Amazon Timestream をデータソースとして設定します。

Screenshot of the Amazon Grafana workspace creation process showing service managed permission settings for IAM permission access, AWS data source selection such as Amazon Timestream, and notification channel configuration using Amazon SNS.

Screenshot of the Amazon Grafana console's 'Review and create' workspace screen, showing configuration details for a workspace named 'sustainable-building'. The view includes authentication access, permission type, VPC connection status, workspace configuration options, network access control, and IAM permission access settings.

IAM Identity Center ユーザーを追加

ワークスペースに適切な役割 (Admin、Viewer) で IAM Identity Center ユーザーを追加します。「Assign new user or group」をクリックします。

Screenshot of the Amazon Grafana workspace summary for 'smart-and-sustainable-buildings', showing configuration details such as workspace URL, IAM Identity Center authentication, status, IAM role, and options for SAML setup.

Screenshot of the AWS Management Console showing the process of assigning a user (with data redacted) in AWS IAM Identity Center (successor to AWS SSO) for a workspace related to smart sustainable building management. The highlighted action is 'Assign users and groups.'

Amazon Timestream DB をデータソースとして設定

9. ワークスペース URL に IAM Identity Center ユーザーでログインします。

10. Amazon Managed Grafana で Amazon Timestream DB をデータソースとして設定します。サイドバーから Apps → AWS Data Sources → Data sources を開きます。

Screenshot of the AWS Managed Grafana dashboard menu showing navigation options such as Home, Starred, Dashboards, Explore, Alerting, Connections, Apps, AWS Data Sources, Settings, and Administration.

11. Timestream の「Install now」をクリック

AWS services タブで Timestream の「Install now」をクリックします。

Screenshot of the Grafana dashboard showing AWS Data Sources integration, listing various AWS services such as IoT SiteWise, Timestream, X-Ray, CloudWatch, Amazon OpenSearch, Amazon Managed Service for Prometheus, and Athena, with the option to install each as a data source.

12.「Install [version]」をクリック

右上の「Install [version]」をクリックします。

Screenshot showing setup instructions for adding Amazon Timestream as a data source in Grafana, including datasource configuration, authentication, and IAM policy example.

13. 「Add new data source」をクリック

右上の「Add new data source」をクリックします。

Screenshot of the Grafana interface showing the setup of the Amazon Timestream plugin as a datasource, including plugin overview and instructions for adding the Timestream datasource.

14. デフォルトのリージョンを設定

デフォルトのリージョンを設定し、「Save & test」をクリックします。

Screenshot of Grafana data source settings page showing the connection details configuration for an Amazon Timestream database, including authentication provider, endpoint, default region, and Timestream database details.

15. JSON ファイルをインポート

1テンプレート (EN, JP) からダッシュボードを作成するために JSON ファイルをインポート します。

Screenshot of the Grafana 'Import dashboard' interface showing the import of a Sustainable Building Demo Dashboard. The interface displays options for the dashboard name, folder, unique identifier, Amazon Timestream data source, carbon intensity, and energy cost fields.

16. ダッシュボードを確認

このようなダッシュボードが表示されることを確認します。

A Japanese-language dashboard displaying various metrics for smart and sustainable building management. The interface shows electricity consumption, greenhouse gas emissions, power costs, trends, weather data, and detailed sensor readings for different buildings, including maps and temperature data.

1-5. デプロイの検証

1-5-1. デプロイの検証 - IoT データ収集

スクリーンショットのように、エネルギー使用量、CO2 ppm、温度、気象データなどのすべてのメトリクスが Amazon Managed Grafana ダッシュボードに表示されていることを確認します。

A Japanese-language dashboard displaying various metrics for smart and sustainable building management. The interface shows electricity consumption, greenhouse gas emissions, power costs, trends, weather data, and detailed sensor readings for different buildings, including maps and temperature data.

1-6. レゴ建物の組み立て

前述の通り、レゴでミニチュアビルを作成します。

ゼロから組み立てても良いですが、今回は レゴ®ブランドストア (40574) を参考に組み立てを行いました。CO2 濃度や室温を測定するため密閉性を確保しながらかつ、建物の中が見えるようにクリアパーツを多用しながら組み立てを行いました。

Step-by-step construction of a smart sustainable building model using LEGO bricks, displayed in eight stages on a wooden surface.

ドアを開閉させるカラクリ

今回は、CO2 濃度が一定の閾値を超えるとサーボモーターを利用してドアを開閉させるカラクリが必要になります。

ドアはテクニックパーツのリフトアームとギア、サーボモーターにはラウンドパーツのプレートをねじ止めし、その上に同じくラウンドパーツのブロックに十字棒を差し込んでギアを取り付けました。サーボモーターの取り付けは、ウインドウフレームを両端にねじ止めしてプレートに取り付けられるようにしました。ドア側のギアとちょうど噛み合うところを見つけられるかがポイントになります。センサー類のケーブルを通せるように 1×2 の穴も開けておきます。

A series of images showcasing a LEGO building equipped with IoT components for a sustainable management demonstration. The images display step-by-step assembly, gear mechanisms, electronic sensors, and the completed LEGO building with AWS branding and wiring for IoT integration.

2. 実験と結果の検証

実験の基本的な考え方は 前回の記事 と同様です。寒い冬の日を想定し、青梅 FC と千葉みなと FC の 2 つのミニチュア建物を使って実験を行いました。どちらの現場でも、温度を望ましい範囲 (摂氏 23 度以上) に保つためにヒーターを ON / OFF します。

前回は人間が CO2 を排出するような形を擬似的に作るために炭酸水を設置しましたが、漏水のリスクがあるため、今回は水槽の水草を育てる目的で使われる CO2 添加装置を用いました。

A demonstration of a smart sustainable building management system dashboard, shown in Japanese. The image features a large screen displaying real-time building performance data and analytics, with mini building models and IoT sensors on a table below. Labels and dashboard metrics are in Japanese, highlighting energy usage, CO2 levels, and environmental control features.

実験の様子

2 つのサイトの違いは、青梅 FC はドアを全開にして常に換気を行っているのに対し、千葉みなと FC は CO2 濃度が一定の閾値を超えた場合にのみドアを開放し、閾値を下回った場合に閉じます。前述の通り、今回はこの操作を自動化しています。CO2 濃度に応じてドアを自動で開閉することで、空気の質も一定に保ちつつ、ドアを常に開いている場合に比べてヒーターのエネルギー効率を向上することが狙いです。

実験の様子はこちらの動画をご覧ください。ご覧の通り、全く人手を介すことなくドアの開閉のオペレーションが自動化されています。

実験結果

実験結果は Amazon Managed Grafana で評価し、以下に示すように、全体として千葉みなと FC は青梅 FC よりもヒーターを OFF にする時間が長く、その結果、エネルギー使用量が少なくなり、それに伴う GHG 排出量とコストも削減されました。

AWSのサステナブルビルディングデモダッシュボードの日本語表示。消費電力、GHG(CO2換算)排出量、コスト、CO2濃度、天気データ、温度などの指標を可視化したグラフ・メーター画面。千葉みなとFCと青梅FCの比較分析が含まれる。

3. まとめ

今回の記事では持続可能性のソリューションライブラリの一つである「Guidance for Smart and Sustainable Buildings on AWS」のサンプル実装をベースに、建物からデータを収集、可視化し、換気を自動化することでエネルギー、コストおよび関連する GHG 排出量と空気の質を最適化するデモ環境を構築する方法をお届けしました。

AWS CDK を用いたクラウド側の環境構築方法に加え、IoT エッジ側のサンプルとして Raspberry Pi デバイスの設定手順や、ミニチュアビル環境もレゴで作成する過程も併せて提供していますので、皆様のお手元で同じ環境を構築いただけます。今回利用したサンプル実装のソースコードは GitHub 上で公開 されておりますので、皆様の環境や実現したいことに合わせて自由にカスタマイズしてご活用ください。カスタマイズするアイデアとしては以下のようなものがあります。

  • エッジデバイスと AWS IoT Greengrass コンポーネントを改修または追加し、ビルディング管理システムやスマートメーター、スマートホームシステムなどに接続し、データを収集や制御を実現する。
  • Amazon Athena と Amazon QuickSight を使用して、過去のデータ分析とレポート作成を行う。
  • AWS IoT TwinMaker を使用してデジタルツインを作成し、物理的なアセットの状態を可視化・監視する。
  • エッジデバイスと AWS IoT Greengrass コンポーネントを改修または追加し、ビルディング管理システムやスマートメーター、ホームエネルギー管理システム (HEMS) などに接続し、データの収集や制御を実現する。

ちょうど今月リリースされた別の記事「AWS IoT と生成 AI を使って自宅の消費電力を測定・予測してみよう」では、AWS IoT で自宅のスマートメーターから消費電力データを収集し、オープンデータの予測気温と掛け合わせ、生成 AI を活用して気温から間接的に消費電力を予測させてみる取り組みを紹介しています。

本プロジェクトへの改善要望やコントリビューションに興味がある方は、ぜひ Contributing Guidelines をご一読いただき、GitHub Issue の作成などを行なってください。

開発メンバーとしても、今後機能追加していく予定していますので、ご期待ください。

筆者プロフィール

A portrait of a person with medium-length dark hair, wearing a blue casual blazer over a green shirt, photographed indoors with a softly blurred background.

戸塚 智哉

アマゾン ウェブ サービス ジャパン合同会社
技術統括本部 ソリューションアーキテクト

飲食やフィットネス、ホテル業界全般のお客様をご支援しているソリューション アーキテクトで、AI/ML、IoT を得意としています。最近では AWS を活用したサステナビリティについてお客様に訴求することが多いです。
趣味は、パデルというスペイン発祥のスポーツで、休日は仲間とよく大会に出ています。

A person standing in front of a display booth at a tech event, with screens displaying informational graphics in the background.

石渡 嘉之

アマゾン ウェブ サービス ジャパン合同会社
技術支援本部 テクニカル アカウント マネージャー

TAM として、主に AWS パートナー企業や公共機関のお客様のクラウド活用支援を行っています。AWS を活用したサステナビリティの推進も支援していけるように取り組んでいます。プライベートでは東京の阿波おどり団体で活動しており、踊る阿呆を楽しんでいます。

A person wearing an AWS-branded shirt and event lanyard standing in front of a screen displaying dashboard charts and graphs.

沢田 吉伯

アマゾン ウェブ サービス ジャパン合同会社
技術統括本部 ソリューションアーキテクト

普段は製造業のお客様をご支援しているソリューションアーキテクトです。前職では SIer でシステム開発を担当していました。最近では Microsoft SQL Server に興味があり、AWS ブログの翻訳をしています。

A smiling business professional in a suit poses for a portrait in front of an artistic wall background.

佐藤 賢太

アマゾン ウェブ サービス ジャパン合同会社
技術統括本部 ソリューションアーキテクト

野球選手として海外で活動後、IT 業界に転身しました。コールセンター関連製品の SE や AI 活用スタートアップでの SRE 経験を経て、2021 年より AWS Japan に入社しました。現在は建設不動産業界のお客様へのクラウド活用支援と、AWS のグローバルサステナビリティ技術コミュニティのコアメンバーとして、幅広い業界のお客様のサステナビリティ推進を支援しています。