ラズパイで消費電力を取得する（３）完結

# 目的
Raspberry Pi4とCTセンサーを用いて、消費電力を取得し、AWS IoT Core経由で、ElasticSearchに流し込むこと。
前回の記事は[こちら。](https://qiita.com/shof0322/items/a7b6217bedd05f7edd9f)

# 方法
ざっくりの流れは以下の通りです。

1. ハードウェアの構築
1. 消費電力取得プログラムの作成
1. 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.表示されたエンドポイントをコピーしておく
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/b9010659-dc4e-12ff-6287-b64286d72466.png)

##### 3.1.2.AWS IoT のログの設定

1.同画面下にあるログから、ログの管理を押す
![図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/47cab62a-e2b8-7584-83ce-0422ad378e81.png)

2.ロールを作成を押してロールを新規作成
![図3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/7b96a031-6e0e-4b0b-7a66-5dbae96e6737.png)

3.ロールを作成をした場合、ロール名を入力
4.作成を押す
![図4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/c829f924-af57-ef2a-4ae1-d9ab6d07ee9b.png)

5.ログレベルで情報を選択
6.更新を押す
![図5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/0a9f41b6-5454-4c56-428e-396339904b53.png)
次のような表示ができていれば完了
![図6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/472b399d-1375-831a-55f2-dbda02d9499c.png)

##### 3.1.3.IoT ポリシーの作成

1.左のサイドメニューの安全性からポリシーを選択
2.ポリシーの作成を押す
![図7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/d0811330-6d45-d52b-6b3d-9cd4c825e952.png)

3.名前を入力する
4.アクションにiot:* を入力
5.リソースARNに * を入力
6.効果で 許可 を設定する
7.作成を押す
![図8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/2a1bff0a-b56b-2585-f2a0-12a8b663a877.png)

##### 3.1.4.モノの作成
1.左のサイドメニューの管理からモノを選択
2.モノの作成を押す
![図9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/e9baa9f8-32a6-66b0-10cc-4eb63c14d6ee.png)

3.１つのモノを作成を選択
4.次へを押す
![図10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/6b1c8d82-4ce3-7631-1252-97b289423e72.png)

5.モノのプロパティを指定で名前を入力 ※入力した名前は後ほど使用するためメモをしておく
6.次へを押す
![図11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/0040df4f-c8e0-429e-d4b8-74e0389d4a4c.png)

7.新しい証明書を自動生成 (推奨) を選択
8.次へを押す
![図12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/262dd2cf-b3f8-0fbf-7a69-521212fafd0e.png)

9.先程作成したポリシーにチェックを入れる
10.モノの作成を押す
![図13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/cae7be25-ed1d-1f82-f2ce-4fdfbd1da9ab.png)
11.ポップアップ表示された画面で、
・デバイス証明書
・プライベートキーファイル
について、それぞれダウンロードをクリック

12.完了を押す
![図14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/fa9d4ed6-02ce-d5a6-58f1-5851d96a1f19.png)

この作業が完了すると、モノの一覧の画面が表示され、画面上部に「モノが正常に作成されました」と表示される

##### 3.1.5.証明書をラズパイにアップロード

1.証明書をダウンロードしたPCから操作を行う

2.（Macの場合）ターミナルを開き、下記コマンドを実行※＜デバイス証明書のパス＞ 、 ＜プライベートキーのパス＞ はぞれぞれ調べて入れる

```terminal
scp ＜デバイス証明書のパス＞ ＜プライベートキーのパス＞pi@raspberrypi.local:./dummy_client/certs/
```

3.パスワードを求める表示が出るので、パスワードを入力

100%と表示されていれば完了

##### 3.1.6.ルート証明書のダウンロード
1.ラズパイで以下のコマンドを実行

```terminal
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のところを自分のコードのファイル名に変える

```terminal
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 をメモする
![図15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/0b48b7bb-4645-a6dd-c29b-762d598080ef.png)

##### 3.1.8.疎通テスト

1.AWS IoT Coreのコンソール画面を開く
2.左のサイドメニューの テスト から MQTT テストクライアントを選択
3.トピックをサブスクライブするのトピックのフィルターのテキストボックスに先程メモした topicを入力
4.サブスクライブをクリック
![図16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/62097bed-4d5a-9a88-5342-fd5461487d70.png)

画面下部のサブスクリプションから送信されたデータを確認できれば、成功

#### 3.2.ElasticSearch Service(現：Open Search Service)の作成
##### 3.2.1.ドメインの作成

1.Amazon OpenSearch Service の画面を開く
2.新しいドメインの作成 を選択
3.デプロイタイプ で 開発及びテストを選択
4.バージョン は 7.10 を選択
5.次へを押す
![図17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/278f2b07-ac10-a0f3-5f5e-7bf072f71b71.png)

6.ドメイン名 を入力
7.インスタンスタイプ は t3.small.search を選択
8.次へを押す
![図18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/ba43980e-0ee2-5eff-031a-5cfecc1a73d2.png)


9.[こちら](http://checkip.amazonaws.com/)のサイトにブラウザでアクセスし、IPアドレスをメモする
10.ネットワーク構成 で パブリックアクセスを選択
11.きめ細かなアクセスコントロールで細かいアクセスコントロールを有効化を外す
12.ドメインアクセスポリシーでカスタムアクセスポリシーを選択
・タイプを選択 で IPv4 アドレスを選択
・プリンシパルを入力に先ほどメモしたIPアドレスを入力
・アクションは許可を選択
![図19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/8c2fc691-cfd8-7302-3707-bad72cb658da.png)


13.次へを選択
![図20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/3506bd12-5110-d3ba-e9d5-419da2a79725.png)

14.タグの追加 - オプションで、次へを選択
![図21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/5f483c9d-a5aa-aa1a-7d92-8eb421835e09.png)

15.確認画面で確認を押す
![図22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/0432b530-82e1-0c69-1237-d70946d23e31.png)

起動し使用できるようになるまで10分程度時間がかかる

##### 3.3.2.IoTルールの作成

1.AWS IoT Coreのコンソール画面を開く

2.画面左のメニューのACTからルール を選択

3.ルールの作成 を選択

4.名前を入力

5.ルールクエリステートメント に以下を入力

```terminal
select parse_time(“yyyy-MM-dd‘T’HH:mm:ss.SSSZ”, timestamp()) as timestamp, * from ‘<ここにtopicを入れる>'
```

6.アクションの追加を押す
![図23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/ebb8d9bb-e4f9-df89-a75d-f7411c7144b5.png)

7.actionBuilder.select.openSearchを選択

8.アクションの設定を選択
![図24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/a5dd8242-8fdd-48cd-e795-a49b9fa3a04c.png)

9.先ほど作成した Elasticsearch Service のドメインをプルダウンリストから選択

10.IDに${newuuid()}を入力

11.索引に timestampを入力

12.タイプにtimestampを入力
![図25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/d9c828e6-ec9d-45a9-772d-4292cadd72bf.png)

13.ロールを作成 を選択

14.Create role を押す

15.Create a new role ダイアログでのNameを入力

16.Create role を押す
![図26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/111a5a46-be0f-b160-70be-6b0b404bb628.png)

17.アクションの追加を押す
![図27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/a5278f48-81d8-3faa-a5a5-6692d099f6c1.png)

18.アクションを作成すると元の画面に戻るので、ルールの作成を押す
![図28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/f7b0f3ea-eed8-c041-04c8-88d6f6c0fb5d.png)

これで IoT Core から Elasticsearch Service にデータ転送するためのルールを作成完了

##### 3.3.3.Kibana を開く

1.ドメインのステータスがアクティブになると、KibanaのURLが表示されるのでアクセスする
![図29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/8a7cef32-2106-8334-e29a-ad5724070f83.png)

2.Explore on my ownを選択
![図30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/14657f19-661f-a9b5-3bbd-2a007eb3d8d9.png)

3.左のメニューバーからDiscover を選択
![図31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/96a4e95d-999e-4315-75d7-203575910b27.png)

4.create an index pattern をクリック
![図32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/44954e10-863a-aaad-e086-850ea065bb28.png)

5.index pattern に timestamp と入力

6.Success と表示されることを確認

7.Next step を押す
![図33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/df4159df-5700-0104-b102-3404097205f1.png)

8.Time Filter field name で TIMESTAMP を選択

9.Create index pattern を押す
![図34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/749bd1c7-56ad-1f8c-2424-1ffc10a740ca.png)

下図のようにIndex pattern が表示される
![図35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/cea584a0-c378-dbd4-25e6-336075700855.png)

##### 3.3.4.Timezoneの設定

1.Homeに戻り、ManageからAdvanced Settingを選択
![図36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/a8dc3540-1459-ba22-64d4-dcbf459424ff.png)

2.Timezone for data formatting をUTCに変更

3.Save Changesをクリック
![図37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/24334289-5bb2-f6f3-f36b-699ab46ac98e.png)

##### 3.3.5.データの確認
1.Kibana のDiscoverを選択

2.下記のようなエラーが出た場合は、日付のところをTodayに変更すると改善される
![図38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/e4ece5b7-7d51-64b0-6d03-778aeed3c054.png)


3.次のようにデータが登録されていることを確認する
![図39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/6c416389-dbc4-614b-0681-104e7dd25d5e.png)

##### 3.3.6.グラフ化
1.OpenSearch ダッシュボード / Kibana のトップ画面で Visualize を選択

2.Create a visualization を押す
![図40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/20aad455-3231-1987-a5fd-6fe364323364.png)

3.グラフ選択画面で、Line を選ぶ
![図41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/57cebb78-d7c4-01cd-fc30-6ca8bfc0fe80.png)

4.New Line / Choose a source で timestamp を選択
![図42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/25ff7c2d-4ade-04a6-4c90-546a4df72348.png)

5.Y-Axis をクリック
・Aggregation: Average を選択
・Field: TEMPERATURE を選択※ここで自分のコードを使用した際には自分が取得したデータがYに入る
・Custom Label: TEMPERATURE と入力

6.Metrics の Add をクリック
![図43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/7f3b4e3a-5874-aeff-71a2-d97afe5d87e9.png)

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 を入力
![図44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/5f307fc7-7a95-49c6-9dc9-6a3937a80200.png)
9.Updateボタン をクリック
![図45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/425f360f-95aa-4134-c69b-b34c4466ebce.png)

次のように消費電力量の可視化ができました！
![図46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/920301/d0a144a7-421d-e37b-794b-c8f5f35cfebf.png)


# まとめ
今回は、取得した消費電力を可視化するために、各種AWSサービスの設定を行いました。無事にRaspberry PiのCTセンサーから計測した値を可視化することができました。今回の記事で、消費電力量の可視化は完結です。これまでお付き合いくださり、誠にありがとうございました。

# 参考サイト
・[macだけでRaspberry Piに接続してみた](https://qiita.com/murs313/items/81757bf8bc74b6b76cdf)
・[メモ：macからラズパイに簡単にファイル転送する方法（scp）](https://qiita.com/hirQ/items/65c4182564c0f11595a0)
・[Windows10からRaspberryPiにカンタンSSH接続](https://qiita.com/c60evaporator/items/2384416f1122ae124f50)
・[Windows10標準のSSHクライアントで簡単・手軽にSSH接続！使い方を紹介](https://www.onebizlife.com/windows10-ssh-client-1980)
・[とにかく便利！Raspberry Pi をWindowsから利用するVNCの簡単インストール](https://www.denshi.club/pc/raspi/raspberry-pi-windowsvnc.html)
・[SSH を使って Raspberry Pi に接続　〜Windows編〜](https://slacknotebook.com/connect-to-raspberry-pi-using-windows-ssh/)
・[AWS IoT Coreハンズオン](https://aws-iot-core-for-beginners.workshop.aws/phase1.html)