2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

M5StickC でスマートメーターから計測値を取得して Amazon Timestream に保存する

Last updated at Posted at 2023-07-17

概要

M5StickC を使って各家庭に設置されたスマートメーター(電力計)から計測値を取得し、MQTT で AWS IoT に送信、Amazon Timestream に連携して保存します。保存したデータは Grafana などで可視化できます。

概要

必要なもの

ランニングコスト

Amazon Timesteam の料金として約 4 USD/月ほどかかります。

  • 書き込み: 0.625 USD/100 万書き込み
  • ストレージ(マグネティックストア): 0.0375 USD/GB・月

書き込みは 15 秒に 1 回送信した場合で 5,760 回/日、約 18 万回/月なので、月に数十円程度。
ストレージの単価は 0.0375 USD/GB・月 ですが、最低料金として 100 GB ぶん(3.75 GB/月)の料金がかかります。

また可視化のために Amazon Managed Grafana を使用する場合は、別途 9.0 USD/月の固定料金がかかります。

手順

1. B ルートを有効化

参考) M5StickCで家庭用スマートメーターをハックする!

スマートメーターから直接計測値を取得するためには、まずお使いの電力会社に「電力メーター情報発信サービス(B ルートサービス)」に申し込んで B ルートを有効化する必要があります。手続き完了までに数日かかるため、まずは先にやっておきましょう。

認証用の ID とパスワードが発行されます。

2. M5StickC に Wi-SUN モジュールを接続する

参考) M5StickCで家庭用スマートメーターをハックする!

M5StickC にスマートメーターと通信するためのモジュールを装着します。

3. AWS IoT にデバイスを登録

M5StickC から送信されたデータを受信するために、以下の手順でデバイスの設定を作成します。AWS IoT ではこの接続するデバイスのことを「モノ (Thing)」と呼びます。

  1. AWS 管理コンソール > AWS IoT > モノ
  2. 「モノを作成」
  3. 「1 つのモノを作成」
  4. モノのプロパティを指定して「次へ」
    • モノの名前: (例: SmartMeterHub)
  5. 「新しい証明書を自動生成 (推奨)」を選択して「次へ」
  6. ポリシーをアタッチして「モノを作成」
    • ポリシーを作成してアタッチします。(後述)
  7. 以下のファイルをダウンロードする (のちほどデバイスに組み込んで使用します。)
    • デバイス証明書
    • パブリックキーファイル
    • プライベートキーファイル
    • Amazon 信頼サービスエンドポイント

証明書にアタッチするポリシーは、例として以下のように設定します。

  • モノ SmartMeterHub の接続のみ許可
  • トピック SmartMeterHub/measured へのパブリッシュを許可
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iot:Connect",
      "Resource": "arn:aws:iot:(リージョン):(アカウントID):client/SmartMeterHub"
    },
    {
      "Effect": "Allow",
      "Action": "iot:Publish",
      "Resource": "arn:aws:iot:(リージョン):(アカウントID):topic/SmartMeterHub/*"
    }
  ]
}

4. スマートメーターから計測値を取得して MQTT に送信するファームウェアを作成する

yh1224/M5SmartMeterHub - GitHub からソースをダウンロードし、手順に従ってインストールします。

  1. src/config.h.template を参考に、src/config.h を作成します。

    • WIFI_SSID : 接続する Wi-Fi アクセスポイントの SSID を指定
    • WIFI_PASS : 接続する Wi-Fi アクセスポイントのパスワードを指定
    • WISUN_MODULE : 使用する Wi-SUN モジュールを指定 (BP35A または BP35C)
    • BROUTE_ID : 電力会社から発行された B ルート ID を指定
    • BROUTE_PASSWORD : 電力会社から発行された B ルートパスワードを指定
    • MQTT_HOST : MQTT ブローカーのホスト名として、AWS IoT の「デバイスデータエンドポイント」を指定 (AWS アカウントごとに異なり、AWS IoT の「設定」から確認します。)
    • MQTT_CLIENT_ID : AWS IoT に登録した「モノの名前」を指定
    • MQTT_TOPIC : 計測値の送信先トピックを指定 (例: SmartMeterHub/measured)

    その他の設定は、必要に応じて変更します。

  2. data/ ディレクトリ配下に以下のファイルを配置し、

    • ca.pem.crt : AWS IoT からダウンロードした「Amazon 信頼サービスエンドポイントの証明書」
    • certificate.pem.crt : AWS IoT からダウンロードした「デバイス証明書」
    • private.pem.key : AWS IoT からダウンロードした「プライベートキーファイル」

    デバイスのファイルシステム (SPIFFS) にアップロードします。

    pio run -t uploadfs
    
  3. ファームウェアをビルドして、デバイスにアップロードします。

    pio run -t upload
    

5. Amazon Timestream データベースを作成

AWS 管理コンソール > Amazon Timestream から、データベースおよびテーブルを作成します。

  • データベース
    • 名前: (例: SmartMeter)
  • テーブル
    • データベース名: 作成したデータベースを選択 (例: SmartMeter)
    • テーブル名: (例: measured)
    • パーティションキー設定: デフォルトパーティショニング

6. AWS IoT から Timestream に連携

AWS 管理コンソール > AWS IoT > メッセージのルーティング > ルール から、ルールを作成します。

  • ルール名: (例: smartMeter)
  • SQL ステートメント: SELECT * FROM 'SmartMeterHub/measured'
  • アクション: Timesteam table
    • データベース名: (例: SmartMeter)
    • テーブル名: (例: measured)
    • ディメンション
      • ディメンション名: deviceId
      • ディメンション値: ${topic(1)}
    • タイムスタンプ値: ${timestamp}
    • タイムスタンプの単位: SECONDS
    • IAM ロール: 作成して選択する
      • データベースへの書き込みパーミッションが自動的に設定されます。
        例)

        {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Action": ["timestream:WriteRecords"],
              "Resource": "arn:aws:timestream:(リージョン):(アカウントID):database/SmartMeter/table/measured"
            },
            {
              "Effect": "Allow",
              "Action": ["timestream:DescribeEndpoints"],
              "Resource": "*"
            }
          ]
        }
        

7. Grafana で可視化

Grafana 自体のセットアップについて詳細は割愛しますが、IAM Identity Center を使用している場合は Amazon Managed Grafana を使用して以下の手順で簡単に連携することができます。

  1. AWS 管理コンソール > Amazon Managed Grafana
  2. 「ワークスペースを作成」
  3. ワークスペース名を入力して「次へ」
  4. 認証アクセス情報に「AWS IAM ID センター」を選択して「次へ」
  5. データソースに「Amazon TimeStream」を選択して「次へ」
  6. 「ワークスペースを作成」
  7. AWS IAM ID センターの「新しいユーザーまたはグループの割り当て」
  8. アクセスするユーザーを選択して「ユーザーとグループを割り当て」
  9. 割り当てたユーザーを選択して「アクション」→「管理者を作成する」
  10. 「Grafana ワークスペース URL」にアクセスして管理者でログイン
  11. Administration > Data sources から「Add data source」→「Amazon Timestream」をクリック

ダッシュボードへの表示例

表示例

設定

例) 瞬時電力計測値をグラフ化する

SELECT measure_value::bigint, time
FROM SmartMeter.measured
WHERE measure_name = 'instantaneous'

例) 30 分ごとの電力使用量をグラフ化する

SELECT (MAX(measure_value::double) - MIN(measure_value::double)) AS value, MIN(time)
FROM SmartMeter.measured
WHERE measure_name = 'cumulative'
GROUP BY bin(time, 30m)

処理詳細

Wi-SUN モジュールによるスマートメーターとの通信

Wi-SUN モジュールとのシリアル通信により、スマートメーターとの認証・接続・通信をおこないます。Wi-SUN モジュールのインタフェース仕様は以下からダウンロードできます。

接続シーケンス (BP35A1 の場合)

接続シーケンス (BP35C1-J11-T01 の場合)

スマートメーターからのデータ取得

スマートメーターのインタフェース仕様は、エコーネットコンソーシアム により ECHONET Lite として規定されています。「低圧スマート電力量メータ・HEMSコントローラ間 アプリケーション通信 インタフェース仕様書」を参照します。

瞬時電力および積算電力量を取得する

以下のプロパティを使用して、現時点の瞬時電力および積算電力量を取得します。

プロパティ名 EPC Get/Set サイズ 備考
積算電力量計測値 (正方向計測値) 0xE0 Get 4 計測開始からの現在の累積の電力量 (単位は「積算電力量単位」による)
積算電力量単位 0xE1 Get 1 積算電力量の単位
瞬時電力計測値 0xE7 Get 4 取得した瞬間の電力量 (単位:W)

「積算電力量単位」は以下の値を取り、「積算電力量計測値」の単位を示します。例えば積算電力量計測値が 9999 で積算電力量単位が 0x01 の場合、9999 × 0.1 kWh = 999.9 kWh となります。

  • 0x00: 1 kWh
  • 0x01: 0.1 kWh
  • 0x02: 0.01 kWh
  • 0x03: 0.001 kWh
  • 0x04: 0.0001 kWh
  • 0x0A: 10 kWh
  • 0x0B: 100 kWh
  • 0x0C: 1,000 kWh
  • 0x0D: 10,000 kWh

積算電力量の履歴を取得する

スマートメーター内には 30 分ごとの積算電力量が記録されており、以下のプロパティを使用して、その履歴を取得することができます。

プロパティ名 EPC Get/Set サイズ 備考
積算電力量単位 0xE1 Get 1 積算電力量の単位
積算電力量計測値履歴1 (正方向計測値) 0xE2 Get 194 30 分ごとの積算電力量計 (単位は「積算電力量単位」による)
積算履歴収集日1 0xE5 Get/Set 1 積算履歴を取得する対象の日付を指定

「積算履歴収集日1」に何日前を取得するか指定(当日の場合は 0)してから、「積算電力量計測値履歴1」を取得します。

「積算電力量計測値履歴」のデータは先頭 2 バイトがサイズで 0x00C0 (192) 固定、その後 00:00 から 30 分ごとの積算電力量計測値が 4 バイトずつ 48 コマ続きます。

2
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?