Featured image of post M5StickCPlusとWi-SUN HATをAWS IoT Coreにつないでスマートメーターから得た電力量, 瞬時電力, 瞬時電流をDynamoDBに格納した。

M5StickCPlusとWi-SUN HATをAWS IoT Coreにつないでスマートメーターから得た電力量, 瞬時電力, 瞬時電流をDynamoDBに格納した。

M5StickCPlusをAWS IoT Coreにつないでスマートメーターから得た電力量, 瞬時電力, 瞬時電流をDynamoDBに格納した。

最終更新 2022/10/29 00:00 JST

M5StickCPlusとWi-SUN HAT(BP35A1)でスマートメーターと通信してデータが取れたので、データベースに格納してみる。

以前にAzure Iot HubからAzure Cosmos DBにデータを格納したように, 一度Azure IoT Hubにつないでみたんだけど

こんなふうにやたらとデータが欠損する。

無課金勢なので一日に送れるテレメトリ数の上限に達してる予感。
なんとなくスマートメーター間とのセッションがきれているような。。。

今回はAWS IoT Hub + DynamoDBで同じことをしてみる。

AWS IoT Hub

AWSアカウントを用意。
続いて「AWS IoT -> すべてのデバイス -> モノ -> モノを作成」からモノを作る

ポリシーはこうで

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iot:Connect",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "iot:Publish",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "iot:Subscribe",
      "Resource": "*"
    }
  ]
}

モノを作って証明書とキーをダウンロードする。

前回のプログラムをAWS IoT Hubにつなぐように改造した。
GitHubリポジトリ

実行するとAWS IoT Hubに"device/m5-WiSUN/data"にMQTTで接続するので 「MQTT テストクライアント」で「モノ」からの正常な通信を確認する。

このままでは垂れ流したメッセージが失われるので「ルール」で DynamoDB に送ってデータベースに格納する。

IAM

ルート権限は強すぎるのでDynamoDBにアクセスするためのユーザーを追加する。

  1. 「IAM -> アクセス管理 -> ユーザー -> ユーザーを追加」からユーザーを追加する。
  2. 適当なユーザー名を入れて 「アクセスキー - プログラムによるアクセス」にチェックを入れて次のステップ
  3. 「既存のポリシーを直接アタッチ」-> 「AmazonDynamoDBReadOnlyAcccess」 にチェックを入れて次のステップ
  4. 「タグ」は無し。

以上のユーザーを追加して「アクセスキー ID 」と「シークレットアクセスキー」をどこか適切な場所に保存する。

DynamoDB

データを格納するテーブルを作る。

「DynamoDB -> テーブル」から

  • テーブル名: measurements
  • パーティションキー: device_id, 文字列
  • ソートキー: timestamp, 数値 と設定したテーブルを作成する。

ルール

AWS IoT CoreからDynamoDBに送る「ルール」を設定する。 「AWS IoT -> メッセージのルーティング -> ルール」から「ルール」を作る

  • ルール名: 任意
  • SQL ステートメント: “SELECT * FROM ‘device/+/data’”

ルールアクションは

アクション1DynamoDB
テーブル名measurements
パーティションキーdevice_id
パーティションキーのタイプSTRING
パーティションキーの値${device_id}
ソートキーtimestamp
レンジキーのタイプNUMBER
レンジキーの値${floor(timestamp(measured_at) / 1E3)}
この列にメッセージデータを書き込むdata
オペレーションINSERT

IAM ロールは

作ったルールは

PartiQLエディタ

ここまで済ませて待っているとAWS IoT Core経由でDynamoDBに格納される。
PartiQLエディタを使って確認するとM5StickCPlus + Wi-SUN HATで測定したデータがDynamoDBに入っているはず。

Pythonを使ってグラフを作る

リポジトリにある test/dynamodb_plot.py を使ってDynamoDBに入っているデータからグラフを作る。

1
2
aki:/mnt/d/m5stickc-wisunhat/test$ ./dynamodb_plot.py "**************" "********************" "****************************************"
2022-09-04 00:00:00+09:00 -> 2022-09-04 23:59:59.999999+09:00
1
./dynamodb_plot.py "AWSリージョン名" "ユーザーのアクセスキーID" "ユーザーのシークレットアクセスキー"

実行するとグラフができる

いまはまだ一日分のデータがないので, あとで追記するつもり。

追記

この日はWiFi再接続シーケンスが無限ループしていた。

このあたりの日の値が欠損しているのはプログラムを改修している時間とか。

この日はWiFi再接続シーケンスとMQTT接続がまともに動いていなかった。

このあたりでうまく動くようになってきたと思う。

さらに追記
棒グラフに変更した

たび重なる改修の結果24時間連続運転ができるようになった。
自動でスマートメーターからデータ収集してDynamoDBへ格納してくれるので, 何もすることがない。

2022/9/20

2022/9/21

2022/9/22

2022/9/23

2022/9/24

2022/9/25

2022/9/26

2022/9/27

2022/9/28

2022/9/29

2022/9/30

2022/10/01

2022/10/02

2022/10/03

2022/10/04

2022/10/05

2022/10/06

2022/10/07

2022/10/08

2022/10/09

2022/10/10

2022/10/11

2022/10/12

2022/10/13

2022/10/14

2022/10/15

2022/10/16

2022/10/17

2022/10/18

2022/10/19

2022/10/20

2022/10/21

2022/10/24

2022/10/25

2022/10/26

2022/10/27

2022/10/28

comments powered by Disqus

This website uses cookies to improve your experience.
このサイトは「Googleアナリティクス」を使用しています。
Googleアナリティクスはデータの収集のためにCookieを使用しています。


Built with Hugo
テーマ StackJimmy によって設計されています。