M5Stack Toughと土壌水分量センサーでプランター菜園をモニタリングするVol.5（可視化編）

これまで4回にわたってプランター菜園のモニタリングを綴ってきました。
[M5Stack Toughと土壌水分量センサーでプランター菜園をモニタリングするVol.1（電源編）](https://qiita.com/EuzoBass/items/fb4a8f379c2425ad942b)

[M5Stack Toughと土壌水分量センサーでプランター菜園をモニタリングするVol.2（土壌センサー取り付け編）](https://qiita.com/EuzoBass/items/b4bd99995d39b812ea56)

[M5Stack Toughと土壌水分量センサーでプランター菜園をモニタリングするVol.3（AWS IoT 編）](https://qiita.com/EuzoBass/items/4c30f23ffa3d2b9bfa32)

[M5Stack Toughと土壌水分量センサーでプランター菜園をモニタリングするVol.4（データ蓄積編）](https://qiita.com/EuzoBass/items/7f0560b0f71f376486ca)

最後にAmazon Managed Grafana を利用した可視化をしてみましたので、書いていきたいと思います。

## Amazon Managed Grafana (AMG) とは
各種ログやメトリクスなどのモニタリングを行うための人気のOSSであるGrafanaを、サーバーのメンテナンスなどに煩わされることなく手軽に使うためのマネージドサービスとしてAWSが提供しているサービスです。

https://aws.amazon.com/jp/grafana/

構築には
1. SAMLまたはAWS IAM Identity Center (旧AWS SSO) の準備
1. ワークスペースの作成
1. データソースの設定
1. グラフなどの作成

## ワークスペースの作成

今回の本筋ではないため割愛しますが、認証にはIAM Identity Center を利用しました。

https://docs.aws.amazon.com/ja_jp/singlesignon/latest/userguide/getting-started.html

AWS のマネジメントコンソールで**ワークスペースを作成**をクリックします。

![grafana01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/0ca9a7a7-9ac0-26ae-432e-09b301effa98.jpeg)

ワークスペース名を適当に入力します。Grafana バージョンはこのブログの執筆時点では*8.4*と*9.4*が選べましたが、特に*8.4*を選ぶ理由もないため*9.4*で進めました。

![grafana02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/9bfeed1f-aabc-bf42-084a-d59d7287ee5a.jpeg)

**設定を構成**の画面で**認証アクセス**にて *AWS IAM ID センター(AWS SSO の後継)* を選択します。この時、**有効**となることを確認します。ただし、AWS Organizations配下のアカウントで子アカウントを利用している場合は権限不足でそのままでは有効化することが出来ません。その為、その下の**アクセス許可タイプ**で**カスタマーマネージド**を選択した上で他のAWSアカウントのデータを取り込むための権限を個別に設定する必要があります。これに関してはまた別途纏めようと思います。今回は**サービスマネージド**で構成していきます。それ以外はデフォルトのまま**次へ**をクリックします。

![grafana03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/1cdbb548-42e2-d88a-413b-038ac135eb3f.jpeg)

**サービスマネージド型のアクセス許可設定**で**データソース**にて*Amazon TimeStream*を選択し、**次へ**をクリックします。

![grafana04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/3830d044-9a80-77df-c8e6-77e5285ca946.jpeg)

確認画面で**ワークスペースを作成**をクリックします。

![grafana05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/ecfc98d1-820d-2828-67bc-97d6ffcb3d57.jpeg)

完了するまで3分ほど待ちます。

![grafana06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/0f93739d-6150-5195-0dfb-06934f15cfd3.jpeg)

完了したらAmazon Managed Grafanaを利用できるユーザーまたはグループを設定するため、**新しいユーザーまたはグループの割り当て**をクリックします。その後、ユーザーまたはグループからAWS IAM Identity Centerで設定されているユーザーから選択して**ユーザーとグループを割り当て**をクリックします。

![grafana07.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/e3341915-8558-aa3d-a6c6-813538d90df3.jpeg)

追加したユーザーを選択し、**アクション**のプルダウンから "管理者を作成する"、"エディタを作成する"、"閲覧者を作成する"のいずれかを選択して権限を変更します。

![grafana08.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/e65dcce3-cf0a-8c14-f3cf-0f7bee9e29f5.jpeg)

権限毎の動作の違いは下記に記載があるので参照してください。

https://docs.aws.amazon.com/ja_jp/grafana/latest/userguide/Grafana-user-roles.html

以上で、Amazon Managed Grafana のワークスペースの作成は完了です。

## ログイン

ワークスペースの画面にて、**Grafana ワークスペースURL**に記載されているURLにアクセスします。

![grafana09.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/813b4822-db09-6d6a-924c-03ca511e1e2b.jpeg)

**Sign in with AWS IAM Identity Center** をクリックします

![grafana10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/f4c06c0a-56b5-6532-9e4a-e6911fa04897.jpeg)

IAM Identity Center で作成したユーザー名とパスワードでログインします。

## データソースの設定
左上の「三」の形のアイコンをクリックし、**Apps** - **AWS Data Sources** をクリックします

![grafana11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/d42f848c-d27e-3895-893e-a14d30b26f54.jpeg)

**AWS services** タブ内の **Timestream** をクリックします。

![grafana12.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/0ec2dc7b-41dc-6cf3-9f25-3820c2849281.jpeg)

**Default region** のプルダウンから作成した Timestream のデータベースが存在するリージョンを選択し、**Add data source** をクリックします。ここでは *US East (N. Virginia)* を選択しています。!

![grafana13.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/aaffd38b-3f5b-d1d9-45b0-c57b78ea814c.jpeg)

"Add data source" クリック後に表示されるデータソース横の **Go to settings** をクリックします。

![grafana14.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/cd99380b-99d1-2bef-9bef-7114abe78b0c.jpeg)

**Settings** タブの各値を下記のように設定していきます。設定が終わったら、 **Save & test** をクリックします。

*Connection Details*
| 設定項目 | 設定値 |
| ----- | ----- |
| Authentication Provider | *Workspace IAM Role* |
| Assume Role ARN | 設定無し |
| External ID | 設定無し |
| Endpoint | 設定無し |
| Default Region | *us-east-1* |

*Timestream Details*
| 設定項目 | 設定値 |
| ----- | ----- |
| Database | *"demo-db"* |
| Table | *"demo-table"*
| Measure | 設定無し |

![grafana15.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/7d99ce67-7fae-c83c-139f-c1d9239d243d.jpeg)

*Connection success* と表示されれば成功です。失敗する場合は、上表の設定やIAM Role の権限に不足が無いか確認してみてください。

![grafana16.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/62342e5a-c53a-f1b5-e233-ee1758baecf9.jpeg)

## ダッシュボードの設定

ダッシュボードの画面に移り、**New** のプルダウンから **New Dashboard** をクリックします。

![grafana17.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/340fd671-d4ed-0270-aa4c-9c54ad561ab7.jpeg)

### 時系列折れ線グラフの表示

**Add a new panel** をクリックします。
画面右上で **Time series** を選択します。

![dashboard01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/65b729cd-43ae-0055-6a37-0ce977a0aca1.jpeg)

**Query** の項目で下記のように設定していきます

| 設定項目 | 設定値 | 内容 |
| ----- | ----- | ----- |
| Data source | *m5t_demo_data_source* | 上記で作成した取り込み対象の Grafana のデータソース |
| Database | *"demo-db"* | Timestream のデータベース |
| Table | *"demo-table"* | センサーデータが格納されている Timestream のテーブル |
| Measure | 任意 | 本来は *$__measure* というマクロ文字列でMeasureで指定したカラムが読み取られるようです |

また、クエリの文字列は下記のように設定します。

```SQL
SELECT time, measure_value::double as "地中温度" FROM $__database.$__table WHERE measure_name = 'temperature' AND deviceid = 'm5t01'
```

![dashboard02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/4a8a10de-c5e0-c30b-f1e0-d3de0bed602f.jpeg)

**+Query** をクリックすることで、1つのグラフ内に複数種類のデータを追加することが出来ます。上で温度を設定したので、ここでは水分量を追加で描画することにします。

![dashboard03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/5647a257-b099-c796-a570-a4142bd1ad05.jpeg)

クエリ文字列は下記のように設定します

```SQL
SELECT time, measure_value::bigint as "水分量" FROM $__database.$__table WHERE measure_name = 'moisture' AND deviceid = 'm5t01'
```

そうすることで、下図のようにグラフが表示されます

![dashboard04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/4fff35a1-4fef-8964-390d-2593a46b5a17.jpeg)

### パネル設定
温度と水分量は次元が異なるため、例えば下のように温度と水分量を別々の軸で表現してあげるとよさそうです。また、見やすくするため色を変えたりなどしていこうと思います。

![dashboard05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/83aad802-6514-8727-2b7f-5f08ac8be469.jpeg)

パネル設定の最下部の **Add field override** をクリックします

![dashboard06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/29f781cd-5ef0-e429-8165-d474bafae942.jpeg)

プルダウンから **Fields with name** を選択します。

![dashboard07.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/9eff8c06-d2ac-1ad8-472b-5252e3f6da9f.jpeg)

地中温度と水分量を分けたいので、ここでは水分量を別軸で表すことにします。Fields with name のプルダウンから**水分量** を選択します。

![dashboard08.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/3d90cd9c-7a03-28f1-66ac-4ca554f2ef6e.jpeg)

**Add override property** をクリックし、**Axis > Placement** を選択します

![dashboard09.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/248cf941-8ded-36df-84c5-2a5c0c3de7a0.jpeg)

**Right** を選択します。

![dashboard10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/2fcc5d88-0d05-7b53-9add-d4180d96358a.jpeg)

すると、水分量の軸が右側に移り、温度と水分量の変動がそれぞれ明確にわかるようになりました。

![dashboard11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/6fb17a9f-6b73-b810-78ba-ff70d6043711.jpeg)

あとは、同様にグラフを見やすくするため、グラフの色を変えたり、単位をつけたりしていきます。

*水分量*

| 設定項目 | 設定値 |
| ----- | ----- |
| Axis > Placement | *Right* |
| Standard options > Unit | *Number* |
| Standard options > Color scheme | *Single color* |

最後に設定が終わったら右上の **Apply** をクリックしてパネルを保存します。

これで1つ目のパネルが出来上がりました。

![dashboard12.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/f585eeea-1c39-f851-f94c-ba9eac859573.jpeg)

同様にもう一つのセンサーのデータについても設定していきますが、設定が面倒なのでパネルごとコピーします。パネル右上のアイコンをクリックして **More...** > **Duplicate** をクリックします。

![dashboard13.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/d0e452ad-ea81-7b86-98da-c006be2d5041.jpeg)

パネル右上をクリックして **Edit** で編集します。
クエリ文字列の *deviceid* をもう一つのセンサーのデバイスIDに書き換えます。パネル名も忘れずに変えましょう。

![dashboard14.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/8a8a4ac5-f8c1-7a33-7298-4d5f377d0711.jpeg)

最後にダッシュボードを保存します。ダッシュボード右上のフロッピーディスクのアイコンをクリックして保存します。

![dashboard15.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/06167cf1-6793-44dd-6f05-4e8c0fb2907a.jpeg)

ダッシュボード名の入力画面が出るので、適当な名前を付けて **Save** をクリックします。

![dashboard16.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/d7981b7c-9ce6-d394-2c32-6991f90a6972.jpeg)

## その他

観測期間を変更したり、グラフを変えてみたり等データのいろいろな表現方法を試しながら、好みの表現に改良していくと良いかと思います。私は24時間表示でこの折れ線グラフがしっくりきました。

![dashboard17.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/46a61b11-8ea6-5584-13a2-9252a62f6c68.jpeg)


## 最後に

ここまで電源設置から最後の可視化まで長い道のりでようやくプランター菜園のモニタリングが出来るようになりました。無事作物が育つかどうかはこれからですが、まずはデータを貯めてみて、何かわかることが無いか調べてみようと思います。

![IMG_4599.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534832/6d8586ce-24b7-da15-8d01-56b3a0660283.jpeg)