目的
Raspberry Pi4とCTセンサーを用いて、消費電力を取得し、AWS IoT Core経由で、ElasticSearchに流し込むこと。
前回の記事はこちら。
方法
ざっくりの流れは以下の通りです。
- ハードウェアの構築
- 消費電力取得プログラムの作成
- AWS環境の構築
3.AWS環境の構築
計測した消費電力を可視化するために、AWSのサービスをいくつか組み合わせて環境を構築します。
ざっくりいうと 「IoT Core → ElasticSearch → kibana」 という構成、フローとなっており、IoT Coreでエッジデバイスのセンシングデータを収集、ElasticSearchのエンジンを使ってデータベース化、ElasticSearchと紐付いたkibanaで可視化というイメージです。
3.1.IoT Coreの設定
3.1.1.AWS IoT のエンドポイント確認
1.AWS IoT Coreのコンソール画面を開く
2.左のサイドメニューの下にある設定を選択
3.表示されたエンドポイントをコピーしておく
3.1.2.AWS IoT のログの設定
5.ログレベルで情報を選択
6.更新を押す
次のような表示ができていれば完了
3.1.3.IoT ポリシーの作成
1.左のサイドメニューの安全性からポリシーを選択
2.ポリシーの作成を押す
3.名前を入力する
4.アクションにiot:* を入力
5.リソースARNに * を入力
6.効果で 許可 を設定する
7.作成を押す
3.1.4.モノの作成
1.左のサイドメニューの管理からモノを選択
2.モノの作成を押す
5.モノのプロパティを指定で名前を入力 ※入力した名前は後ほど使用するためメモをしておく
6.次へを押す
7.新しい証明書を自動生成 (推奨) を選択
8.次へを押す
9.先程作成したポリシーにチェックを入れる
10.モノの作成を押す
11.ポップアップ表示された画面で、
・デバイス証明書
・プライベートキーファイル
について、それぞれダウンロードをクリック
この作業が完了すると、モノの一覧の画面が表示され、画面上部に「モノが正常に作成されました」と表示される
3.1.5.証明書をラズパイにアップロード
1.証明書をダウンロードしたPCから操作を行う
2.(Macの場合)ターミナルを開き、下記コマンドを実行※<デバイス証明書のパス> 、 <プライベートキーのパス> はぞれぞれ調べて入れる
scp <デバイス証明書のパス> <プライベートキーのパス>pi@raspberrypi.local:./dummy_client/certs/
3.パスワードを求める表示が出るので、パスワードを入力
100%と表示されていれば完了
3.1.6.ルート証明書のダウンロード
1.ラズパイで以下のコマンドを実行
pi@raspberrypi:~ $ cd ~/dummy_client/certs/
pi@raspberrypi:~ /dummy_client/certs/$ wget https://www.amazontrust.com/repository/AmazonRootCA1.pem -O AmazonRootCA1.pem
2.ラズパイの~/dummy_client/certs/の中にルート証明書、デバイス証明書、プライベートキーが正しくアップロードされているか確認する
3.1.7.Device SDK を使ったデバイスの起動
1.下記コマンド実行する
※ここでサンプルコードではなく自分のコードを使用する場合はdecice_main.pyのところを自分のコードのファイル名に変える
pi@raspberrypi:~ $ sudo -H pip3 install awsiotsdk
pi@raspberrypi:~ $ cd /dummy_client
pi@raspberrypi :/dummy_client$ python3 device_main.py --device_name <モノの名前> --endpoint <エンドポイント>
2.次のような結果が返ってくるのでこの一番下の topic をメモする
3.1.8.疎通テスト
1.AWS IoT Coreのコンソール画面を開く
2.左のサイドメニューの テスト から MQTT テストクライアントを選択
3.トピックをサブスクライブするのトピックのフィルターのテキストボックスに先程メモした topicを入力
4.サブスクライブをクリック
画面下部のサブスクリプションから送信されたデータを確認できれば、成功
3.2.ElasticSearch Service(現:Open Search Service)の作成
3.2.1.ドメインの作成
1.Amazon OpenSearch Service の画面を開く
2.新しいドメインの作成 を選択
3.デプロイタイプ で 開発及びテストを選択
4.バージョン は 7.10 を選択
5.次へを押す
6.ドメイン名 を入力
7.インスタンスタイプ は t3.small.search を選択
8.次へを押す
9.こちらのサイトにブラウザでアクセスし、IPアドレスをメモする
10.ネットワーク構成 で パブリックアクセスを選択
11.きめ細かなアクセスコントロールで細かいアクセスコントロールを有効化を外す
12.ドメインアクセスポリシーでカスタムアクセスポリシーを選択
・タイプを選択 で IPv4 アドレスを選択
・プリンシパルを入力に先ほどメモしたIPアドレスを入力
・アクションは許可を選択
起動し使用できるようになるまで10分程度時間がかかる
3.3.2.IoTルールの作成
1.AWS IoT Coreのコンソール画面を開く
2.画面左のメニューのACTからルール を選択
3.ルールの作成 を選択
4.名前を入力
5.ルールクエリステートメント に以下を入力
select parse_time(“yyyy-MM-dd‘T’HH:mm:ss.SSSZ”, timestamp()) as timestamp, * from ‘<ここにtopicを入れる>'
7.actionBuilder.select.openSearchを選択
9.先ほど作成した Elasticsearch Service のドメインをプルダウンリストから選択
10.IDに${newuuid()}を入力
11.索引に timestampを入力
13.ロールを作成 を選択
14.Create role を押す
15.Create a new role ダイアログでのNameを入力
18.アクションを作成すると元の画面に戻るので、ルールの作成を押す
これで IoT Core から Elasticsearch Service にデータ転送するためのルールを作成完了
3.3.3.Kibana を開く
1.ドメインのステータスがアクティブになると、KibanaのURLが表示されるのでアクセスする
4.create an index pattern をクリック
5.index pattern に timestamp と入力
6.Success と表示されることを確認
8.Time Filter field name で TIMESTAMP を選択
3.3.4.Timezoneの設定
1.Homeに戻り、ManageからAdvanced Settingを選択
2.Timezone for data formatting をUTCに変更
3.3.5.データの確認
1.Kibana のDiscoverを選択
2.下記のようなエラーが出た場合は、日付のところをTodayに変更すると改善される
3.3.6.グラフ化
1.OpenSearch ダッシュボード / Kibana のトップ画面で Visualize を選択
4.New Line / Choose a source で timestamp を選択
5.Y-Axis をクリック
・Aggregation: Average を選択
・Field: TEMPERATURE を選択※ここで自分のコードを使用した際には自分が取得したデータがYに入る
・Custom Label: TEMPERATURE と入力
7.Y-Axis を選択し
・Aggregation: Average を選択
・Field: HUMIDITY を選択
・Custom Label: HUMIDITYを入力
8.Buckets の X-Axis をクリック
・Aggregation: Date Histogram を選択
・Field: TIMESTAMP を選択
・Minimum interval: Auto を選択
・Custom Label: TIMESTAMP を入力
9.Updateボタン をクリック
まとめ
今回は、取得した消費電力を可視化するために、各種AWSサービスの設定を行いました。無事にRaspberry PiのCTセンサーから計測した値を可視化することができました。今回の記事で、消費電力量の可視化は完結です。これまでお付き合いくださり、誠にありがとうございました。
参考サイト
・macだけでRaspberry Piに接続してみた
・メモ:macからラズパイに簡単にファイル転送する方法(scp)
・Windows10からRaspberryPiにカンタンSSH接続
・Windows10標準のSSHクライアントで簡単・手軽にSSH接続!使い方を紹介
・とにかく便利!Raspberry Pi をWindowsから利用するVNCの簡単インストール
・SSH を使って Raspberry Pi に接続 〜Windows編〜
・AWS IoT Coreハンズオン