Armoris日記 ラズパイと BME280 で温度・湿度・気圧を測って グラフ化して表示する編 [その 3]

このブログは、N 高等学校と VRChat の世界からやってきた株式会社 Armoris アルバイトの Shadero が書いています。
あるもりすぶろぐの内容は個人の意見です。

こんなことがやりたい!

  1. 温度・湿度・気圧を計測する
  2. 計測した値を DB に保存する
  3. グラフ化して表示する

本記事は[その 2]の続きです。
[その 3]では いよいよ DB に保存された値を用いてグラフ化を行います!

環境

Type Name
Machine Raspberry Pi 3 Model B+
OS Raspbian 10 buster
Temperature, humidity & pressure sensor BME280

使用ソフトウェア

Name Version
InfluxDB 1.8.3
Grafana 7.3.7

グラフ化ツールとして Metabase や Chronograf などがありますが、今回は文献の多さを考慮して Grafana を選択しました。

Grafana をインストールしてみる

Grafana が入っていないと何も始まらないのでとりあえずインストールします。

Grafana は標準では登録されていないのでリポジトリを追加してインストールします。

$ wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
$ echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
$ sudo apt-get update && sudo apt-get install -y grafana

Grafana を起動及び自動起動させる

インストールしただけでは起動してくれないため起動させます。
また、ラズパイを再起動した際に自動で Grafana が起動してくれないと不便である事が多いので、自動起動の設定も行います。

$ sudo systemctl unmask grafana-server
$ sudo systemctl start grafana-server
$ sudo systemctl enable grafana-server

Grafana にログインしてみる

ラズパイと同じネットワーク内にあるデバイスのブラウザで http://raspberrypi.local:3000 に接続するとログインが求められるのでデフォルトの ID&PWD でログインします。

Username Password
admin admin

f:id:Armoris:20210310144142p:plain

このままログインすると新しいパスワードの設定を促されるので新しいパスワードを設定します。
デフォルトのパスワードを使い続けるのはとても脆弱なため、外部に公開する際などはパスワードを変更することを強く推奨します。
f:id:Armoris:20210310144203p:plain

InfluxDB に Grafana 用のユーザーを作成する

このまま Grafana から[その 2]で作成したデータベース(iot01)に接続して値を読み取ってグラフ化…!と行きたいのですが、該当データベースの読み込み権限を持ったユーザーを使って接続しないと、データベースにある値を読み込む事が出来ないため、Grafana がデータベースから値を取得できるように InfluxDB に Grafana 用のユーザーを作成します。

Influx へ接続します。
$ influx

Grafana が DB に値を読み出すときに使う grafana という名前のユーザーを作成します。
CREATE USER grafana WITH PASSWORD 'ここにパスワードを書く'

grafana ユーザーに読み込み権限を与えます。
GRANT READ ON "iot01" TO "grafana"

データベースに接続する

Grafana で、先程作成したユーザーを使って[その 2]で作成したデータベースに接続します。

画面左側にある Configration にある Data Sources をクリックします。
f:id:Armoris:20210310144231p:plain

Add data source をクリックして Influx DB を見つけ選択します。
f:id:Armoris:20210310144252p:plain

下記の画像のように、InfluxDB の URL と、データベース名と 先程作成した Grafana が使うユーザーの名前とパスワードを書き込みます。
f:id:Armoris:20210310144314p:plain

Save & Test をクリックし、テストに成功したら Back をクリックして戻ります。

DashBoard を作成する

画面左側にある Create にある Dashboard をクリックして作成します。 f:id:Armoris:20210310144335p:plain

Dashboard を作成したら真っ先に Save をクリックして Dashboard を保存します。
f:id:Armoris:20210310144403p:plain
Dashboard の名前尋ねられるので、適当な名前に設定し Save をクリックして保存します。
f:id:Armoris:20210310144427p:plain

Panel を作成する

Panel と呼ばれるデータベースの値を視覚化するオブジェクトを作成していよいよ値のグラフ化を行います!
今回は例として温度をグラフ化します。

Panel には様々な設定があるのですが、今回はグラフ化するための最小限の設定を行います。

Add panel をクリックし Panel を作成します。
f:id:Armoris:20210310144514p:plain
Add new panel をクリックし、Panel の設定をしていきます。 f:id:Armoris:20210310144535p:plain

select measurement をクリックし、[その 2]で作成した Measurement を選択します。
f:id:Armoris:20210310144616p:plain
f:id:Armoris:20210310144630p:plain

value をクリックし、グラフ化したい値を選択します。
f:id:Armoris:20210310144724p:plain
今回は温度をグラフ化したいので temperature を選択します。
f:id:Armoris:20210310144740p:plain

Panel の名前を設定します。
本記事では名前を「temperatures」としました。
f:id:Armoris:20210310144802p:plain

Save をクリックして適用と保存を行います。
f:id:Armoris:20210310144821p:plain
変更内容などを書き込む欄があるため必要に応じて書き込み Save をクリックし保存したら完成です。
f:id:Armoris:20210310144837p:plain

完成!!

保存を行ったら完成です!
下記の画像は湿度や気圧などの他の値も同様にグラフ化してみた画像です、とてもいい感じになったはず!
f:id:Armoris:20210310144853p:plain

感想

やっと…グラフ化できた…()
振り返るとそれぞれやる事は単純ですが、センサーからの値を取得できるようにして、それをデータベースに書き込めるようにして、グラフ化する…などやる事がそれなりに多く、全て終えたあと謎の達成感がありました…!

今後は、ラズパイのストレージに使われている SD カードは書き込み耐性が低く、長期間運用するとデータベースが吹っ飛ぶ可能性があるのでデータベースを他のマシンに移行させたいのと、新しくセンサーを買って CO2 濃度を測ってグラフ化出来たりしたら良いなぁ~…なんて考えています。

今後も検証や工作など記事に出来る事を行ったらどんどん記事にする予定です…!お楽しみに!!