IoT機器で温湿度を測定してクラウドでグラフ化 kibana編(その6)
Contents
温湿度をグラフ化
RaspberryPi Zeroと温湿度モジュール(DHT22)を使用して温湿度を指定した間隔(分)で測定してクラウド(AWS IoT Core)にデータをアップロードしてグラフ化するまでの6回目。
過去記事は以下の通り。
今回の記事の範囲はkibanaでのグラフ化とする。
システム概要図
システム概要図と今回の記事の範囲は以下の通り。
主な実現したい機能は以下の通り。
- 指定した間隔(分)で温湿度を測定する
- 指定した間隔(分)でデータをサーバーにアップロードする
- アップロードしたデータは集計、グラフ表示する
- 温湿度のしきい値(上限、下限)を超えた場合はアラートを発信する
- しきい値は場所毎に異なる値を指定出来るようにする
- 設定情報はGoogle Sheetで一括指定して設定値を変更したら各端末に速やかに反映させる
- それぞれの端末は遠隔で再起動等の操作が出来るようにする
- 測定端末は複数台設置するが基本的に室内とする(屋外には設置しない)
- 100V電源を確保できる場所とする(バッテリー駆動も一応試してみる)
- 初期コスト、ランニングコストともに出来るだけローコストで実現する
kibanaの設定
プログラムを動かす
kibanaでの設定の前にラズパイゼロ上でPythonのプログラムを実行する。
プログラムが正しく動作すればAWS IoT Core経由で正常データはAWS Elasticsearch ServiceとDynamoDBへ連携される。
Elasticsearch Serviceに何件かデータが蓄積された状態でkibanaの設定を行う。
kibanaを起動する
以前の記事のAWS Elasticsearch Serviceの設定の際のkibanaのURLをクリックして設定画面を立ち上げる。
kibanaの初期画面が表示されるのでExplore on my ownをクリックする。
インデックスとは
kibanaではデータの単位の事をインデックスと呼んでいる。
いわゆるRDBMSのインデックスとは名称は同じだが内容は異なるので注意が必要だ。
以前の記事にてインデックスは日付単位で作成する設定をしている。
AWS Elasticssearch Service上でのデータの削除はインデックス単位で行うので、データが蓄積されてきた時に過去データを削除する際に日付単位でインデックスが作成されていると扱いやすいのがその理由だ。
そして数日分の温湿度をまとめて一つのグラフで表示させたいので複数のインデックスをまとめて扱うインデックスパターンの設定を行う。
インデックスパターンの作成
メニューからManagement(歯車アイコン)をクリックする。
メニューで”Index Patterns”を選択して「Create index pattern」ボタンをクリックする。
index Pattern欄に”temp-app-*”を指定して(*はワイルドカード)「Next step」ボタンをクリックする。
プルダウンメニューから”tempdatetime”を選択してTimeフィールドを指定したら「Create index pattern」ボタンをクリックする。
インデックスパターンが作成された。
データの確認
左のメニューから”Discover”アイコンをクリックしてプルダウンメニューから先程作成した”temp-app-*”インデックスパターンを選択すると対象データが表示される。
日付時刻の表示フォーマット
デフォルトだと日付の表示フォーマットが”MM/DD/YYYY”で日本人には分かりづらいので変更する。
メニューからManagement(歯車アイコン)、”Advanced Settings”をクリックしてDate Formatを”YYYY-MM-DD HH:mm:ss”に変更した。
Visualizations
作成
温湿度をグラフ表示する為の視覚化部品を作成する。
kibanaでは最初に幾つか視覚化の為の部品を作成した後、その部品をダッシュボードに貼り付けて画面を作成する。
メニューから”Visualize”アイコンをクリックした後、「Create new visualization」ボタンをクリックする。
Lineを選択
温湿度はグラフ表示をしたいので”Line”を選択する。
インデックスパターンを選択
インデックスパターン(temp-app-*)を選択する。
Y軸(縦軸)
最初にY軸(縦軸)に表示する項目を設定する。
Y軸に温度と湿度の値、X軸に日付時刻のグラフを作成したい。
“Y-axis count”をクリックする。
温度の表示設定
温度と湿度を同一グラフに表示する。
まずは温度の表示設定を行う。
- aggregation:Top Hit(先頭)
- Field:temperature
- Aggregate with:Max
- Size:1
- Sort on:tempurature
- Order:Descending(降順)
- Custom label:温度
を設定する。
温度(temperature)を降順でソートした際の先頭の最大値(1件目)を取得している。
Y軸を追加
湿度を追加表示したいのでAddをクリックして”Y-axis”をクリックする。
湿度の表示設定
湿度の表示設定を行う。
- aggregation:Top Hit(先頭)
- Field:humidity
- Aggregate with:Max
- Size:1
- Sort on:humility
- Order:Descending(降順)
- Custom label:温度
を設定する。
保存
途中で保存したい時は左上のメニューで”Save”をクリックしてTitleに名前を入れて「Confirm Save」ボタンをクリックする。
X軸の追加
続いてX軸を追加する。
BucketsのAddから”X-axis”をクリックする。
X軸の設定
X軸には日付時刻を表示する。
- Aggregation:Date Histogram
- Field:tempdatetime
- Minimum interval:Auto
- Custom label:日付時刻
を設定する。
尚、設定途中でも項目右上の▶をクリックすると右側にプレビューが表示されるので都度設定状態を確かめることが出来る。
Metrics & Axes
“Metrics & Axes”タブに移って、Metrics欄は特に変更なし。
Y-axesのTitleを”温湿度”に変更するとグラフY軸の説明欄が変更される。(画面ショットは間違い)
また凡例の色をクリックすれば温度、湿度のグラフの色を変更できる。
X-AxisのLabelsのRotateを”angle”に設定すると日付時刻が斜めに傾いて表示される。
量が多い時はこちらの方が見やすい。
Panel Settingsタブ
Panel SettingsタブのGridでShow x-axis linesを”ON”、Y-axis linesで”LeftAxis-1″を選択するとグラフ上にグリッドが表示される。
Dashboard
新しいDashboardの作成
Visualizationsを作成したらダッシュボードに貼り付ける。
メニューからDashboardアイコンをクリックして「Create new Dashboard」ボタンをクリックする。
Visualizationの追加
新しいダッシュボードが作成されたので”Add”でvisualizationを追加する。
Add panelsで先程作成したVisualizationを名前で検索する。
先程作成したがグラフ(visualization)がダッシュボードに配置されるので適当にサイズを調整する。
Panel Title
パネルのタイトルが邪魔なので歯車アイコン、Cutomize panelをクリックする。
“Show panel title”をオフにして「Save」ボタンをクリックする。
ダッシュボードの保存
左上のSaveを押してTitleに名前をセットして「Confirm Save」ボタンをクリックしてダッシュボードを必要なタイミングで保存する。
表示範囲の変更
右側のカレンダーアイコンで表示範囲を変更することができる。
Today、This week等を選択すると温湿度の表示範囲が変わる。
Indexの削除
蓄積されたインデクスはkibanaのコンソールから削除することができる。
メニューから”Console”を選択する。
以下のコマンドを入力して▶で実行する。
DELETE /temp-app-*
続く
今回の記事はこれで終了とする。
次回はラズパイのCLI化やプログラムの自動起動についての記事とする。
私もこれやってみたいので、続きをとても楽しみにしています。
続きを楽しみにしているとの事ありがとうございます。
ちょっと間が空いてしまったので続きを書きたいと思います。
2020/11/6 追記
続きの記事を書きました。
https://www.souichi.club/raspberrypi/temperature-humidity-07/