スマート x サステナブルビル管理をミニチュア建物で実現してみよう!
Author : 戸塚 智哉, 石渡 嘉之, 沢田 吉伯, 佐藤 賢太
ビルダーのみなさま、こんにちは !
サステナビリティを意識したミニチュア倉庫のデモを作ってみた ! をお届けしてから、約 1 年が経ちました。
前回の記事では、現実の建物環境を再現したミニチュアモデルにおいて、室温や空気の質をデータに基づいて適切に管理することで省エネルギーにつながり、エネルギー利用にともなう費用や温室効果ガスの排出削減につながる過程を紹介しました。室温・空気の質はセンサーで計測し、室温をコントロールするためにヒーターを用い、空気の質をコントロールするためにドアの開閉を行います。空気の質の変化は、CO2 濃度を変化させ、人の出入りを擬似的に表現するようにしました。
従来のデモ環境
従来のデモについてお客様と会話する中で「同じようなシステムを作ってみたいのでオープンソース化して欲しい」という嬉しいお声や、「ドアの開閉が面倒に見えるけど自動化できないの ?」などのご指摘を踏まえて改善できるポイントが見えてきました。
そこで、読者の皆様がご自身で環境を構築できるように以下のポイントでデモ環境の刷新を行いました。
前回の課題 | 今回の改善ポイント | |
ハードウェア面 | 端材を活用した 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 時間で構築できる内容になっております。
完成イメージ
それでは、サステナブルビル管理のサンプル環境構築をお楽しみください !
目次
1. デプロイ方法
1-2-1. AWS Lambda レイヤーの Python 依存関係をインストール
1-2-2. AWS CDK でインフラストラクチャをデプロイする
1-2-3. デバイス情報を Amazon DynamoDB に登録
1-2-4. シークレットを AWS Secret Manager に登録する
1-3. IoT デバイスの設定
1-3-1. Raspberry Pi OS の設定
1-3-2. センサーとモーターのセットアップ
1-3-3. AWS IoT Greengrass の設定
1-3-4. AWS IoT Greengrass コンポーネントのデプロイ
1-3-5. デプロイの確認
1-4. Amazon Managed Grafana ダッシュボードをセットアップする
1-5. デプロイの検証
1-5-1. デプロイの検証 - IoT データ収集
1-6. レゴ建物の組み立て
2. 実験と結果の検証
3. まとめ
ご注意
本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。
この記事のデモを無料でお試しいただけます »
毎月提供されるデベロッパー向けアップデート情報とともに、クレジットコードを受け取ることができます。
1. デプロイ方法
1-1. クラウド側
それでは、クラウド側の構築をしていきましょう。前提として、git や Node.js、npm のインストール済みであることとします。また、今回のデプロイ先はオレゴンリージョン (us-west-2) に設定します。
CDK の設定 ※CDK の設定がすでに済んでいる方は不要になります。
今回のアセットを一通り CDK 化してるため、環境を CDK を使ってクイックに立ち上げていきましょう。実際みなさんが新規ソリューションを開発する場合においても、アセットをコード化しておき、環境の複製を簡素化しておくことは重要です。
まず、このガイダンスのレポジトリをクローンしてきます。
git clone https://github.com/aws-solutions-library-samples/guidance-for-smart-and-sustainable-buildings-on-aws
問題なくローカルに git レポジトリをクローンできたら、対象ディレクトリに移動して、Node.js パッケージをインストールします。
npm ci
IAM 認証情報を登録をします。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>
リソースをデプロイする AWS リージョンを設定します。扱いたいリージョンを設定してください。
export AWS_REGION=us-west-2
ここで、Greengrass のデプロイを効率化する GDK の設定を行います。
GDK Config 配下の各コンポーネント (自動換気コンポーネントとセンサーデータ収集コンポーネント) の gdk-config.json ファイル内の {aws_region} を変更します。ここも扱いたいリージョンを設定してください。
...
"publish": {
"bucket": "gdk-components",
"region": "us-west-2"
}
...
1-2. デプロイ手順
ここからクラウド側に CDK を用いてデプロイしてきます。
1-2-1. AWS Lambda レイヤーの Python 依存関係をインストール
今回 open-weather-map のライブラリを新たにインストールする必要があるため、requirements.txt 含めて設定していきます。Python ライブラリをローカルに設定しておく必要があります。※ 前提として、以下 Lambda で使うパッケージをインストールするローカル端末と、クラウド側の Lambda の CPU アーキテクチャが揃うようにしてください。
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
1-2-2. AWS CDK でインフラストラクチャをデプロイする
続いて、AWS CDK でインフラ側をデプロイしてきます。
まず、リポジトリのルートディレクトリで以下のコマンドを実行します。
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
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 デバイス) の情報に合わせて修正してください。
bash tools/dynamodb/add_location.sh {locationTable}
1-2-4. シークレットを AWS Secret Manager に登録する
以下のコマンドを実行する前に、次の変更をご自身の環境に合わせて行なってください。
- {secretid} を cdk deploy --all を実行した後の出力値 SustainableBuilding.WeatherDataCollectionOpenWeatherMapApiSecretName~ に置き換えてください。
- {apikey} を OpenWeather Map API キー から取得して、置き換えてください。
- OpenWeatherMap の利用にあたっては、そちらの利用規約を参照の上ご利用ください。
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 コマンドで確認します。モジュールを繋ぐときに参照するので、メモしておきます。
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 で I2C、シリアルポートを有効にします。
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 を選択
シャットダウンします。
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)
モジュールの配線完了です。
5. パッケージインストール
Raspberry Pi を起動します。
BME280 の接続を確認するために i2c-tools をインストールします。
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 をインストールし、サービスを実行します。
sudo apt install pigpio
sudo service pigpiod start
sudo systemctl enable pigpiod.service
参考) サーボモーターの動作確認をしてみます。以下のような 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 に保存し、動かします。
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 をインストール
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 をインストール
sudo apt install default-jdk
java -version
※ 今回用いたバージョン
openjdk 17.0.12 2024-07-16
OpenJDK 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 リージョンを設定
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 コンポーネントをインストール
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) 用の登録コマンドをコピーし、実行します。
※ GreengrassStack.GreengrassBootstrapGreengrassInstallCommandforLinux... の = 以降
登録コマンド
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
以下は SensingDevice1 の例です。
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-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 コンポーネントをデプロイ
cd ~
aws greengrassv2 create-deployment --cli-input-json file://docs/device-deployment-{thing-name}.json
1-3-5. デプロイの確認
しばらく経ってから、エラーが出ていないかログを確認します。ターミナルを 3 つ開くと確認がしやすいです。ログが出力され続けるので、エラーが無ければ閉じてしまっても大丈夫です。
sudo tail -f /greengrass/v2/logs/greengrass.log
sudo tail -f /greengrass/v2/logs/collectSensorData.log
sudo tail -f /greengrass/v2/logs/automateVentilation.log
センサーデーターが取得できていることを確認します。
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 マネジメントコンソールにログインした後、これらの手順を実行してください。
- AWS マネジメントコンソールにログインし、CDK リソースをデプロイしたリージョンを選択します
- Amazon Managed Grafana にアクセスできるユーザーを管理するために IAM Identity Center をセットアップします。
- IAM Identity Center にユーザーを追加します。
- Amazon Managed Grafana ワークスペース を作成します。以下は設定例のスクリーンショットです。Grafana のバージョンを 10.4 に設定します。
画像をクリックすると拡大します
5. 「AWS IAM Identity Center」を認証方法として有効化します。
画像をクリックすると拡大します
6.「Turn plugin management on」を有効化します。
画像をクリックすると拡大します
7. Amazon Timestream をデータソースとして設定します。
画像をクリックすると拡大します
画像をクリックすると拡大します
ワークスペースに適切な役割 (Admin、Viewer) で IAM Identity Center ユーザーを追加します。「Assign new user or group」をクリックします。
画像をクリックすると拡大します
画像をクリックすると拡大します
9. ワークスペース URL に IAM Identity Center ユーザーでログインします。
10. Amazon Managed Grafana で Amazon Timestream DB をデータソースとして設定します。サイドバーから Apps → AWS Data Sources → Data sources を開きます。
画像をクリックすると拡大します
11. AWS services タブで Timestream の「Install now」をクリックします。
画像をクリックすると拡大します
12. 右上の「Install [version]」をクリックします。
画像をクリックすると拡大します
13. 右上の「Add new data source」をクリックします。
画像をクリックすると拡大します
14. デフォルトのリージョンを設定し、「Save & test」をクリックします。
画像をクリックすると拡大します
15. テンプレート (EN, JP) からダッシュボードを作成するために JSON ファイルをインポート します。
画像をクリックすると拡大します
16. このようなダッシュボードが表示されることを確認します。
画像をクリックすると拡大します
1-5. デプロイの検証
1-5-1. デプロイの検証 - IoT データ収集
スクリーンショットのように、エネルギー使用量、CO2 ppm、温度、気象データなどのすべてのメトリクスが Amazon Managed Grafana ダッシュボードに表示されていることを確認します。
画像をクリックすると拡大します
1-6. レゴ建物の組み立て
前述の通り、レゴでミニチュアビルを作成します。
ゼロから組み立てても良いですが、今回は レゴ®ブランドストア (40574) を参考に組み立てを行いました。CO2 濃度や室温を測定するため密閉性を確保しながらかつ、建物の中が見えるようにクリアパーツを多用しながら組み立てを行いました。
画像をクリックすると拡大します
今回は、CO2 濃度が一定の閾値を超えるとサーボモーターを利用してドアを開閉させるカラクリが必要になります。
ドアはテクニックパーツのリフトアームとギア、サーボモーターにはラウンドパーツのプレートをねじ止めし、その上に同じくラウンドパーツのブロックに十字棒を差し込んでギアを取り付けました。サーボモーターの取り付けは、ウインドウフレームを両端にねじ止めしてプレートに取り付けられるようにしました。ドア側のギアとちょうど噛み合うところを見つけられるかがポイントになります。センサー類のケーブルを通せるように 1×2 の穴も開けておきます。
画像をクリックすると拡大します
2. 実験と結果の検証
実験の基本的な考え方は 前回の記事 と同様です。寒い冬の日を想定し、青梅 FC と千葉みなと FC の 2 つのミニチュア建物を使って実験を行いました。どちらの現場でも、温度を望ましい範囲 (摂氏 23 度以上) に保つためにヒーターを ON / OFF します。
前回は人間が CO2 を排出するような形を擬似的に作るために炭酸水を設置しましたが、漏水のリスクがあるため、今回は水槽の水草を育てる目的で使われる CO2 添加装置を用いました。
2 つのサイトの違いは、青梅 FC はドアを全開にして常に換気を行っているのに対し、千葉みなと FC は CO2 濃度が一定の閾値を超えた場合にのみドアを開放し、閾値を下回った場合に閉じます。前述の通り、今回はこの操作を自動化しています。CO2 濃度に応じてドアを自動で開閉することで、空気の質も一定に保ちつつ、ドアを常に開いている場合に比べてヒーターのエネルギー効率を向上することが狙いです。
実験の様子はこちらの動画をご覧ください。ご覧の通り、全く人手を介すことなくドアの開閉のオペレーションが自動化されています。
実験結果は Amazon Managed Grafana で評価し、以下に示すように、全体として千葉みなと FC は青梅 FC よりもヒーターを OFF にする時間が長く、その結果、エネルギー使用量が少なくなり、それに伴う GHG 排出量とコストも削減されました。
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 の作成などを行なってください。
開発メンバーとしても、今後機能追加していく予定していますので、ご期待ください。
筆者プロフィール
戸塚 智哉
アマゾン ウェブ サービス ジャパン合同会社
技術統括本部 ソリューションアーキテクト
飲食やフィットネス、ホテル業界全般のお客様をご支援しているソリューション アーキテクトで、AI/ML、IoT を得意としています。最近では AWS を活用したサステナビリティについてお客様に訴求することが多いです。
趣味は、パデルというスペイン発祥のスポーツで、休日は仲間とよく大会に出ています。
石渡 嘉之
アマゾン ウェブ サービス ジャパン合同会社
技術支援本部 テクニカル アカウント マネージャー
TAM として、主に AWS パートナー企業や公共機関のお客様のクラウド活用支援を行っています。AWS を活用したサステナビリティの推進も支援していけるように取り組んでいます。プライベートでは東京の阿波おどり団体で活動しており、踊る阿呆を楽しんでいます。
沢田 吉伯
アマゾン ウェブ サービス ジャパン合同会社
技術統括本部 ソリューションアーキテクト
普段は製造業のお客様をご支援しているソリューションアーキテクトです。前職では SIer でシステム開発を担当していました。最近では Microsoft SQL Server に興味があり、AWS ブログの翻訳をしています。
佐藤 賢太
アマゾン ウェブ サービス ジャパン合同会社
技術統括本部 ソリューションアーキテクト
野球選手として海外で活動後、IT 業界に転身しました。コールセンター関連製品の SE や AI 活用スタートアップでの SRE 経験を経て、2021 年より AWS Japan に入社しました。現在は建設不動産業界のお客様へのクラウド活用支援と、AWS のグローバルサステナビリティ技術コミュニティのコアメンバーとして、幅広い業界のお客様のサステナビリティ推進を支援しています。
AWS を無料でお試しいただけます