AWS IoT と 生成 AI を使って自宅の消費電力を測定・予測してみよう

2024-11-01
日常で楽しむクラウドテクノロジー

Author :  新澤 雅治

こんにちは、IoT ソリューションアーキテクトの新澤です。皆さんは家庭の電力使用をどのように管理していますか ? 電気代の値上げがニュースを賑わせている昨今、多くの方が毎月の電気代を見て「もう少し節約できる方法はないだろうか」と感じたことがあるのではないでしょうか。

そんな悩みを解決する一つの方法として、HEMS (Home Energy Management System) という仕組みがあります。HEMS とは、家庭内の電力使用を可視化し、効率的に管理するためのシステムです。スマートメーターと連携して各電化製品の消費電力をリアルタイムでモニターに表示します。これにより、どの家電がどれだけ電力を使っているかが一目でわかり、節電のための行動を促進します。(政府の「グリーン政策大綱」によると、2030 年までに全世帯への設置が目標とされています。)

経済産業省:省エネって何? から抜粋

実は市販の HEMS 装置を導入していなくとも、直接電力メーターから消費電力を取得することが可能なのです。東京電力パワーグリッドなどの送配電事業者が提供する 電力メーター情報発信サービス (B ルートサービス) を利用することで、スマートメーターで計測されたデータを取得できるようになります。

今回の企画では、この B ルートサービスを利用して、Wi-SUN USB アダプターと RaspberryPi、AWS を使って家庭の消費電力の可視化ダッシュボードを作り、電力使用の傾向を把握する仕組みを紹介します。さらに、Amazon Bedrock を用いてデータを分析し、天気予報から間接的に消費電力を予測する仕組みにも挑戦します。

この記事のデモを無料でお試しいただけます »

毎月提供されるデベロッパー向けアップデート情報とともに、クレジットコードを受け取ることができます。 


1. 全体構成

全体のアーキテクチャは以下の通りです。

スマートメーターからのデータ取得部分については、ラトックシステム株式会社の Wi-SUN USB アダプター「RS-WSUHA-P」を使ってスマートメーターから瞬時消費電力量を取得するする構成とします。

利用する AWS のサービス

全体の仕組みを作るために利用する AWS のサービスは以下のものになります。今回は東京リージョン (ap-northeast-1) を利用することを前提に設定を進めます。

  • AWS IoT Core
  • AWS IoT Greengrass
  • Amazon Timestream
  • AWS Secrets Manager
  • Amazon Managed Grafana
  • Amazon Bedrock

また、気象情報を取得する外部サービスとして OpenWheather を活用しています。

完成すると、Amazon Managed Grafana に以下のような消費電力推移を可視化するグラフが出来上がります。

また、Amazon Bedrock で電力の使用傾向を説明させて、気象情報をから消費電力を予測します。

以上が完成イメージです。


2. 事前準備 (B ルート申し込み)

まず、スマートメーターにアクセスするために、送配電事業会社に対して B ルートの利用申請を行う必要があります。自宅の電力メーターがスマートメーターになっていれば、管轄の送配電事業者に申し込むことで使用できるようになります。

お住まいの地域の送配電事業会社名と「B ルート」等のキーワードで Web 検索してみると、申し込みページが見つかると思います。私が住んでいる地域では東京電力パワーグリッドが管轄しており、こちらのリンク から申し込みをすることができました。申し込みが完了すると、認証情報が別々に送られてきます。認証 ID は郵便で自宅に届き、パスワードはメールで送信されます。

認証 ID (郵送)

パスワード (メール)

この二つの情報があれば、B ルートを通じてスマートメーターのデータにアクセスできるようになります。これで準備完了です。次のステップから実際に構築していきましょう。

※B ルート申請や Wi-SUN USB アダプターの準備が困難な場合のために、ダミーデータを生成できるシミュレーションモードを用意しています。このモードを使えば、B ルート申請や Wi-SUN USB アダプター無しでのテストが可能です。シミュレーションモードの利用方法については、「4. RaspberryPi (AWS IoT Greengrass)」の項目をご参照ください。

ではさっそく作ってみましょう !


3. 利用するデバイス

主に以下のデバイスを利用しています。その他、ラズパイを利用するための microSD カード、キーボード、マウス、microHDMI、USB Type-c の電源等が別途必要になります。


4. RaspberryPi (AWS IoT Greengrass) の環境構築

ラズベリーパイのセットアップから始めましょう。公式サイト から最新のイメージをダウンロードし、SD カードに書き込みます。ラズベリーパイのセットアップが初めての方は、公式ページ に掲載されている詳細な手順を参考にすることをお勧めします。以降の説明は、ラズベリーパイのセットアップが完了し、デスクトップにログインしている状態を前提としています。

今回の企画で利用した Raspberry Pi の情報は以下の通りです。

uname -a
Linux raspberrypi 6.6.47+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.6.47-1+rpt1 (2024-09-02) aarch64 GNU/Linux
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 12 (bookworm)
Release:    12
Codename:   bookworm

4-1. RS-WSUHA-1 の準備

RS-WSUHA が使用するシリアルポートを調査します。

1. RS-WSUHA を RaspberryPi の USB ポートに挿さない状態で、以下のコマンドをターミナルに入力します。現状の tty デバイスがリスト表示されるのを確認します。

$ ls -l /dev/tty*

2. RS-WSUHA を RaspberryPi の USB ポートに挿して、再度以下のコマンドをターミナルに入力します。

$ ls -l /dev/tty*

3. すると、以下のような RS-WSUHA が追加されています。

 /dev/ttyUSB0

4. この情報 (上記の場合は /dev/ttyUSB0) は、以降のステップで使用しますのでメモしておきます。

4-2. AWS IoT Greengrass コアのインストール

AWS のリソースを操作する際にはクレデンシャル情報が必要となります。十分な権限を持つクレデンシャルを用意し、以下のコマンドで環境変数へ設定してください。

export AWS_ACCESS_KEY_ID=
export AWS_SECRET_ACCESS_KEY=
export AWS_DEFAULT_REGION=ap-northeast-1

Greengrass を動作させるためには Java のランタイムが必要です。以下のコマンドでインストールします。今回使用した JDK のバージョンは 17.0.12 です。

sudo apt install default-jdk

次に AWS IoT Greengrass のインストーラーを取得します。

1. AWS コンソールで AWS IoT Greengrass の設定画面を開きます。

2.「一つのコアデバイスをセットアップ」ボタンを押下します。

3. 以下のように設定します。

  • コアデバイス名 : SmartMeter-RaspberryPi
  • モノのグループ : グループなし
  • オペレーティングシステム : Linux

4. こちらの画面のインストーラのダウンロードと、インストーラの実行のコマンドを RaspberryPi のターミナル上にコピーして実行します。

画像をクリックすると拡大します

5. AWS コンソールの「コアデバイスを表示する」ボタンを押下して、Greengrass コアデバイスリストに作成したコアデバイスが表示されていることを確認します。

6. 以下のコマンドを RapberryPi のターミナルで実行すると、ログを確認できます。正しく起動していることを確認しましょう。

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

4-3. スマートメーターコンポーネントの登録

スマートメーターデータを収集・送信するカスタムコンポーネントの登録手順です。

1. Amazon S3 バケットの作成 :
まず、カスタムコンポーネントのアーティファクト (実行ファイル) を格納するための Amazon S3 バケットを作成します。このバケットは、Greengrass コアデバイスがアクセスできる場所に作成してください。

2. アーティファクトのアップロード :
スマートメータースクリプト (smart_meter_raspberrypi.py) を こちらのリンク からダウンロードし、作成した S3 バケットにアップロードします。このスクリプトがコンポーネントのアーティファクトとなります。

3. Greengrass コンポーネントの作成 :
AWS IoT コンソールの Greengrass コンポーネントページに移動し、「マイコンポーネント」セクションから「コンポーネントを作成」ボタンをクリックします。

4. レシピの入力 :
レシピを YAML として入力」オプションを選択し、以下の YAML をレシピとして貼り付けます。レシピとは、コンポーネントのメタデータとライフサイクルを定義するファイルです。これにはコンポーネントの識別情報、設定、依存関係、インストールおよび実行手順が含まれ、レシピを使うことで、開発者はコンポーネントの動作や設定を細かく制御でき、IoT デバイス上で一貫した方法でソフトウェアを展開・管理することができます。

RecipeFormatVersion: "2020-01-25"
ComponentName: "com.example.myraspberrypi_smartmeter"
ComponentVersion: "1.0.0"
ComponentType: "aws.greengrass.generic"
ComponentDescription: "A Greengrass component that sends smart meter data to AWS IoT Core on Raspberry Pi."
ComponentPublisher: "Your Name"
ComponentConfiguration:
  DefaultConfiguration:
    UPDATE_INTERVAL: 5
    SIMULATION_MODE: "False"
    SECRET_NAME: "RouteB_Secret"
    SERIAL_PORT: "/dev/ttyUSB0"
    accessControl:
      aws.greengrass.ipc.mqttproxy:
        com.example.myraspberrypi_smartmeter:mqttproxy:1:
          policyDescription: "Allows access to publish to AWS IoT Core"
          operations:
          - "aws.greengrass#PublishToIoTCore"
          resources:
          - "power/consumption"
      aws.greengrass.SecretManager:
        com.example.myraspberrypi_smartmeter:secrets:1:
          policyDescription: "Allows access to RouteB_Secret"
          operations:
          - "aws.greengrass#GetSecretValue"
          resources:
          - "*"
Manifests:
- Platform:
    os: "linux"
  Lifecycle:
    Install:
      Script: |
          mkdir -p {artifacts:path}/venv
          python3 -m venv {artifacts:path}/venv
          . {artifacts:path}/venv/bin/activate
          pip install --upgrade pip
          pip install awsiotsdk pyserial
      RequiresPrivilege: "true"
    Run:
      Script: |
       . {artifacts:path}/venv/bin/activate
       python3 {artifacts:path}/smart_meter_raspberrypi.py
  Artifacts:
  - Uri: "s3://myartifacts/1.0.0/smart_meter_raspberrypi.py"
Lifecycle: {}

以下の設定値を適宜変更してください。

  • ComponentPublisher : コンポーネントの提供元として、あなたの名前を指定してください。
  • SECRET_NAME : B ルート認証情報が格納されている AWS Secrets Manager の Secret Name を記載します (後述)。
  • UPDATE_INTERVAL : データ収集の間隔を秒単位で指定できます。
  • SIMULATION_MODE : "True" に設定すると、HEMS ハードウェアがなくてもテストが可能です。ダミーデータとしてサイン波を生成し、通常モードと同様の AWS IoT Core のトピックに Publish します。
  • SERIAL_PORT : ステップ 5 で取得した RS-WSUHA-P が接続されるシリアルポートを指定します。
  • Artifacts Uri : ステップ 2 (アーティファクトのアップロード) でアップロードした S3 バケットとオブジェクトのパスを指定してください。

5. コンポーネントの作成
レシピの入力が完了したら、「作成」ボタンをクリックしてコンポーネントを作成します。これらの手順を完了すると、スマートメーターカスタムコンポーネントが AWS IoT Greengrass に登録されます。ただし、この段階ではコンポーネントはクラウド上に存在するだけで、実際に Raspberry Pi で動作させるにはデプロイ手順が必要です。まずは、次のステップでコンポーネントが正しく機能するために不可欠な AWS Secrets Manager の設定を行います。この設定が完了してから、後ほど Raspberry Pi へのコンポーネントのデプロイを行うことになります。


5. AWS Secrets Manager の設定

自宅のスマートメーターを活用する際、B ルート認証 ID とパスワードが必要です (詳細は "2. 事前準備 (B ルート申し込み)"を ご参照ください)。これらの情報が外部に漏れると第三者が自宅の電力消費パターンを把握できてしまう危険性がありますので、コードから分離された方法を採用することが重要です。

AWS は、認証情報をクラウド側で保持して安全に運用する為の AWS Secrets Manager を提供しています。本企画では実際のスマートデバイス開発の場面を想定し、B ルート認証 ID とパスワードを AWS Secrets Manager に保存して運用する方法を採用します。

手順 1 で B ルートの認証 ID とパスワードを格納し、手順 2 で OpenWheatherMapAPIKey を格納します。

1. 手順 1 (B ルート認証 ID とパスワードの保存)

1. コンソールから AWS Secrets Manager を開きます。

2. 新しいシークレットを作成を押下します。

3. その他のシークレットのタイプを選択します。

4. 以下の内容で作成し「次へ」ボタンを押下します。(取得方法は 2. 事前準備 (Bルート申し込み) の項をご参照ください。

  • rbpwd : 実際のパスワードを入力してください。
  • rbid : 実際の認証 ID を入力してください。

5. シークレットの名前 : RouteB_Secret と入力し、その他はデフォルトのまま「作成」を押下します。

画像をクリックすると拡大します

6. このようにシークレットが生成されます。シークレットの ARN は後で必要になるのでメモしておきます。

画像をクリックすると拡大します

7. AWS IoT Greengrass に AWS Secrets Manager へのアクセス権を付与します。

  • コンソールから AWS Secrets Manager を開き、右側ペインからロールを選択します。
  • 検索ウインドウに『GreengrassV2TokenExchangeRole』を入力します。
  • GreengrassV2TokenExchangeRole が表示されたら選択します。
  • 許可を追加」→「ポリシーをアタッチ」を選択します。
  • 検索ウインドウに『Secret』と入力し「SecretsManagerReadWrite」のチェックボックスにチェックを入れて「許可を追加」ボタンを押下します。

2. 手順 2 (OpenWheatherMapAPIKey の保存)

1. AWS Secrets Manager にクレデンシャル情報を保存

  • コンソールから AWS Secrets Manager を開きます。
  • 新しいシークレットを作成を押下します。
  • その他のシークレットのタイプを選択します。
  • キー名称には OpenWeatherMapAPIKey と入力します。
  • OpenWeather Map API キー から取得して入力してください。(OpenWeatherMap の利用にあたっては 利用規約 をご確認ください。)

画像をクリックすると拡大します


6. コンポーネントのデプロイ

1. 左側ペインの「Greengrass デバイス」→「デプロイ」を選択します。

2. Greengrass デプロイ一覧の中から、前のステップで作成したデプロイ名称を選択します。

3. 右上の「アクション」タブから「変更」を選択し、「デプロイの変更」ボタンを押下します。

4. ターゲットを指定画面はデフォルトで「次へ」ボタンを押下します。

5. マイコンポーネントに「com.example.myraspberrypi_smartmeter」にチェックを入れます。

6. パブリックコンポーネントに「aws.greengrass.SecretManager」にチェックを入れ、「次へ」ボタンを押下します。

7. コンポーネントを設定の画面で「aws.greengrass.SecretManager」にチェックを入れて、「コンポーネントを設定」ボタンを押下します。

8. マージする設定領域に以下のコードを貼り付けます。arn は作成済みの実際のシークレット arn の値に変更してください。

{
    "cloudSecrets": [
        {
            "arn": "arn:aws:secretsmanager:ap-northeast-1:476910375916:secret:RouteB_Secret-CGwOkk"
        }
    ]
}

9.「次へ」ボタンを押し、最後の画面まで行き、「デプロイ」ボタンを押下します。

10. 下記のようにデプロイ画面の「デバイスのステータス」が正常、「デプロイのステータス」が完了となったら成功です。

画像をクリックすると拡大します


7. Amazon Timestream の設定

データの格納先として、今回は Amazon Timesteam という時系列データベースを使用します。以下の手順で Amazon Timestream を設定しましょう。

1. コンソールから Amazon Timestream を開きます。

2. データベース作成を作成します。

  • データベース名 : smart_meter_database
  • その他はデフォルトで「データベースを作成」ボタンを押下します。

3. テーブルを作成します。

  • データベース名は作成済みの smart_meter_database を選択します。
  • テーブル名 : smart_meter_table
  • パーティションキー設定は「デフォルトパーティショニング」を選択します。
  • その他はデフォルトで「テーブルを作成」ボタンを押下します。

これでデータの格納先が出来上がりました。次に、この Timestream にデータを挿入するための AWS IoT Core ルールエンジンを設定します。


8. AWS IoT Core の設定

AWS IoT Core にはルールエンジンと呼ばれる機能があります。取得したデータを整形・追記、フィルタリングして、他の AWS サービスに対してデータの受け渡しができます。この機能を使って、ラズパイから送信されたデータを Amazon Timestream に受け渡すための設定をしていきましょう。

1. コンソールから AWS IoT Core を開きます。

2. ルールを以下の手順で作成します。

  • 左側のペインからメッセージのルーティングを展開し、ルールを選択する。
  • ルールを作成」を押下します。
  • ルール名 : transfer_to_timestream
  • SQLステートメント : SELECT power_consumption FROM 'power/consumption'
  • 次へ」ボタンを押下します。

3. ルールアクションを以下の手順で作成します。

  • アクション 1 は「Timestream table」を選択します。
  • データベース名:作成済みの「smart_meter_database」を選択します。
  • テーブル名:作成済みの「smart_meter_table」を選択します。
  • ディメンション名 : DeviceID
  • ディメンション値 : ${clientid()}
  • タイムスタンプ値 : ${timestamp()}
  • タイムスタンプの単位 : MILLISECONDS
  • IAM ロール : 「新しいロールを作成」から timestream_role という名前で作成します。
  • 最後に「作成」ボタンを押下します。

画像をクリックすると拡大します

もう一度 Timestream を開き、アクション→クエリテーブルからクエリを実行して、このようにデータが表示されたら成功です。

画像をクリックすると拡大します

これでラズパイから上がってきた消費電力値をデータベースに蓄積できるようになりました。次は、それらを可視化するための設定をしていきましょう。


9. Amazon Managed Grafana の設定

AWS には様々な可視化サービスがありますが、今回は Amazon Managed Grafana を使います。

1. AWS コンソールで Amazon Managed Grafana を開き、「ワークスペースを作成」を押下します。

2. AWS IAM ID センター (AWS SSO の後継) を選択。そのほかはデフォルトのまま「次へ」ボタンを押下します。

3. データソース一覧から「Amazon TimeStream」を選択します。

4. 「新しいユーザーまたはグループの割り当て」を押下し、ユーザーを割り当てます。(事前に AWS IAM ID センターにユーザーを作成しておいてください。)

画像をクリックすると拡大します

5. 追加したユーザーのチェックボックスをチェックし、右上のアクションタブから「管理者を作成する」を選択します。

画像をクリックすると拡大します

6. ワークスペース設定オプションタブからプラグイン管理の編集を有効化します。

7. Grafana ワークスペースにアクセスしてログインします。

8. 左側ペインのメニューから Connections  Add new connection を選択し、検索ウインドウに Timestream と入力します。

画像をクリックすると拡大します

9. Timestream のアイコンを選択して、「Install」ボタンを押下します。

10. 左側ペインから Dashboards を選択し、「Create Dashboard」を押下します。

11. この画面のように Select Datasource に Timestream のデータソースが表示されるので、これを選択します。

画像をクリックすると拡大します

12. クエリ領域に以下のクエリを入力して、グラフを更新します。(生データ表示)

SELECT time, measure_value::bigint
FROM "smart_meter_database"."smart_meter_table" 
WHERE $__timeFilter

画像をクリックすると拡大します

13. 同様に Visualization を追加し、クエリ領域に以下のクエリを入力してグラフを更新します。(1 日ごとの平均値)

SELECT 
    DATE_TRUNC('day', time) AS day,
    AVG(measure_value::bigint
    ) AS avg_power_consumption
FROM "smart_meter_database"."smart_meter_table"
WHERE $__timeFilter
GROUP BY DATE_TRUNC('day', time)
ORDER BY day

画像をクリックすると拡大します

ここまでで可視化ダッシュボードができました。次は消費電力を Amazon Bedrock に投入する仕組みを作りましょう。次のステップで、Amazon Timestream から消費電力のデータを取得する AWS Lambda を設定します。


10. AWS Lambda の設定

AWS Lambda は、イベントの発生に応じてプログラムを実行する環境を提供するサービスです。サーバー管理不要で、必要なタイミングのみコードを実行させることができます。ここに getTimestreamData と getForecastTemperature という二つの Lambda 関数を設定します。

Lambda : getTimestream_lambda の作成

Timestream から消費電力を取得するコードを AWS Lambda として定義します。Amazon Bedrock がこの AWS Lambda を経由して Timestream 内の消費電力データにアクセスできるようにします。

1. こちら から AWS Lambda のファンクションコードをダウンロードします。

2. AWS コンソールで AWS Lambda を開き、「関数の作成」ボタンを押下します。

3. 関数名は getTimestream_lambda を入力します。

4. ランタイムは Python を選択し、その他はデフォルトのまま「関数の作成」ボタンを押下します。

5. アップロード元タブから、ステップ 1 でダウンロードした zip ファイルをアップロードします。

6. 設定タブ→アクセス権限から、以下の権限をロールに割り付けます。

  • AmazonTimestreamReadOnlyAccess

7. リソースベースのポリシーステートメントから「アクセス権限を追加」ボタンを押下します。

8. AWS のサービスを選択し、以下の項目を設定します。

  • サービス : Other
  • ステートメント ID : agentsInvokeFunction
  • プリンシパル : bedrock.amazonaws.com
  • ソース ARN : 実際の値を入力
  • アクション : lambda:InvokeFunction

画像をクリックすると拡大します

Lambda : getForecastTemperature_lambda の作成

OpenWheatherMap から予想気温を取得するコードを AWS Lambda として定義します。Amazon Bedrock がこの AWS Lambda を経由して OpenWheatherMap の気象データにアクセスできるようにします。コードの内の変数 CITY_NAME に設定された場所の気象データを取得します。サンプルコードは場所を変更したい場合は、CITY_NAME 変数を修正してください。

1. こちら から AWS Lambdaの ファンクションコードをダウンロードします。

2. AWS コンソールで AWS Lambda を開き、「関数の作成」ボタンを押下します。

3. 関数名は getForecastTemperature_lambda を入力します。

4. ランタイムは Python を選択し、その他はデフォルトのまま「関数の作成」ボタンを押下します。

5. アップロード元タブから、ステップ 1 でダウンロードした zip ファイルをアップロードします。

6. 設定タブ→アクセス権限から、以下の権限をロールに割り付けます。

  • SecretsManagerReadWrite

7. リソースベースのポリシーステートメントから「アクセス権限を追加」ボタンを押下します。

8. AWS のサービスを選択し、以下の項目を設定します。

  • サービス : Other
  • ステートメントID : agentsInvokeFunction
  • プリンシパル : bedrock.amazonaws.com
  • ソース ARN : 実際の値を入力
  • アクション : lambda:InvokeFunction

11. Amazon Bedrock の設定

1. 左側ペインからモデルアクセスを選択し、Claude 3.5 Sonnet のモデルアクセスをリクエストします。

2. AWS コンソールで Amazon Bedrock を開き、左側ペインから「エージェント」を選択します。

3. 「エージェントを作成」ボタンを押下して任意の名前でエージェントを作成します。

4. 「モデルを選択」では、先ほどアクセスリクエストで有効にした 「Anthopic」、「Claude 3.5 Sonnet」を選択します。

5. エージェント向けの指示に以下を入力します。

あなたは家庭の消費電力を監視するエージェントです。
今日の気温と平均消費電力、また、未来5日間の予測最高気温と予測最低気温の推移から、
間接的に未来5日間の消費電力を推測してください。時系列の消費電力データや本日の日付、
また現在の気温と予測気温についてはFunctionを呼び出して情報を取得してください。

6. アクショングループの箇所で追加ボタンを押下します。

7. アクショングループ名を入力の欄に action-group-timestream と入力します。

8. Action group invocation で Select an existing Lambda function を選択します。

9. Lambda 関数を選択で、作成済みの getTimestream_lambda を選択します。

10. Action group function に以下のファンクションを作成します。

  • Action group function 1 :
    • Name : getCurrentDate
    • 説明 : 本日の日付を yyyymmdd 形式で返却します。
  • Action group function 2 :
    • Name : getdayPowerConsumption
    • 説明 : 指定日の1日の平均消費電力を返却します。値と日時だけ返却します。
  • Parameters 1
    • Name : from_date
    • Description : 取得期間の開始日を ISO 8601 形式 (例:2024-09-18 07:59:16.051000000) で指定します。
    • Type : string
    • Required : True
  • Parameters 2
    • Name : to_data
    • Description : 取得期間の終了日を ISO 8601 形式 (例:2024-09-18 07:59:16.051000000) で指定します。
    • Type : string
    • Required : True

11. 保存して「終了」ボタンを押下します。

12. 再度、アクショングループの箇所で「追加」ボタンを押下します。

13. アクショングループ名を入力の欄に action-group-timestream と入力します。

14.「Action group invocation」で「Select an existing Lambda function」を選択します。

15. 「Lambda 関数を選択」で、作成済みの「getForecastTemperature_lambda」を選択します。

16. Action group function に以下のファンクションを作成します。

  • Action group function 1 :
    • Name : getCurrentTemperature
    • 説明 : 現在の気温を返却します。
  • Action group function 2 :
    • Name : getForcastTemperature
    • 説明 : 5 日間の日ごとの予測最高気温と予測最低気温を返却します。範囲外の日にちの問い合わせには「回答できない」と返答すること。

17. 保存して「終了」ボタンを押下します。

以上で設定完了です。それでは動作確認してみましょう。Bedrock のチャットボックスで「昨日の 1 日の消費電力は ?」と尋ねてみます。

画像をクリックすると拡大します

295.85 との回答が返ってきました。Grafana で生データを見て答え合わせしてみます。

画像をクリックすると拡大します

2024-09-29 の値は 296。正しく回答できています。

では 2 問目。Bedrock のチャットボックスで「明日の予想最低気温と予想最高気温は ?」と尋ねてみます。

画像をクリックすると拡大します

こちらも確認したところ正しく回答できています。(ここでスロットリングに関するエラーが出た場合は、リージョンやモデルを変更して再度試してみてください)

次に画面のように、過去の消費電力データと気温データを合わせて、気温から間接的に消費電力を予測させてみました。

画像をクリックすると拡大します

回答を見てみると、本日のデータから気温と消費電力の相関を見出し、今後 5 日間の予測気温に基づいて消費電力を推測しています。高温日には消費電力が上がり、平均的な気温の日には平均的な消費量を予測するなど、(もちろん気温だけが要因ではありませんが) 与えられた情報から仮説を立てています。

今後、曜日、季節、家族の在宅状況など、様々なデータソースを複合的に分析させれば、より精度が上がり、実用的なものになりそうな予感がします。


12.まとめ

この企画では、AWS IoT で消費電力データを収集し、オープンデータの予測気温と掛け合わせ、気温から間接的に消費電力を予測させてみる取り組みを紹介しました。

市販の HEMS 対応分電盤を導入すれば、各部屋ごとの電力消費をより細かく把握できますので、より具体的で実用的なパターンを見出すことができるかもしれません。また、消費電力に影響を与える要因は気温だけではなく、曜日や季節、人の有無など、様々な要素が絡み合っています。

HEMS のデータを地域の気象データ、地域イベント情報、電力会社の需給予測などと組み合わせることで、家庭レベルから地域レベルまでの多層的な電力消費予測などさまざまなユースケースが実現できそうです。

また、本テーマに関連する内容として、今月リリースされた別の記事「スマート x サステナブルビル管理をミニチュア建物で実現してみよう !」も合わせてご参照ください。この記事では、現実の建物環境を再現したミニチュアモデルにおいて、室温や空気の質をデータに基づいて適切に管理して省エネルギーを実現するデモの構築方法を紹介しています。IoTと建物管理の可能性をより深くご理解いただけると思います。


builders.flash メールメンバーへ登録することで
AWS のベストプラクティスを毎月無料でお試しいただけます

筆者プロフィール

新澤 雅治 (Niizawa Masaharu)
アマゾン ウェブ サービス ジャパン合同会社
IoT スペシャリスト ソリューションアーキテクト

製造業、 IT ベンダーを経て AWS に 入社。現在は IoT スペシャリストソリューションアーキテクトとして、主に製造業のお客様の Industrial IoT 関連案件の支援に携わる。

AWS を無料でお試しいただけます

AWS 無料利用枠の詳細はこちら ≫
5 ステップでアカウント作成できます
無料サインアップ ≫
ご不明な点がおありですか?
日本担当チームへ相談する