概要
Raspberry Piを使って、部屋の温度と湿度をBIツールを使用して見える化するIoTシステムを構築したので、解説します。花粉症の季節で、部屋の湿度が正しく保たれているか確認したいため作成しました。
使うのは、主に以下のデバイスおよびソフトウェアです。
- Raspberry Pi 3 Model B+
- DHT11(温湿度センサ モジュール)
- Elasticsearch(NoSQLのDB)
- Kibana(BIツール)
ElasticsearchとKibanaについては、Elastic社が提供している、Elastic Cloudを使用し、AWS上にホスティングするようにしました。
ElasticsearchとKibana自体はOSSなので、直接Raspberry Piに入れて、動作させることもできますが、手間が少々かかりそうなので、Elastic Cloudにしました。
ちなみにElastic Cloudを使う場合は有料です。(トライアル期間は無料)
システム構成
システム構成は、以下の通りです。
システム構築手順
Elastic Cloudの初期設定
elastic社のホームページより、無料トライアルを選択します。
Elastic Cloudで使い始めるをクリックします。
メールアドレスを登録して、トライアルを始めるボタンを押下します。
メールが届くので、Verify and Acceptを押下します。
パスワードを設定します。
Start your free trialを押下します。
Give your deployment a nameに、デプロイ名を入力します。
Select a cloud platformにデプロイ先のプラットフォームを指定します。
ここでは、AWSを選択しました。
また、regionを指定してください。ここでは、東京リージョンを選択しました。
その他はデフォルトで、Create deploymentを押下し、デプロイを実行します。
Activityのぺージで、usernameとpasswordが表示されるのでメモします。
ElasticsearchおよびKibanaへの認証に使用します。
デプロイが完了したら、念のため動作確認をしてみます。
ElasticsearchのLaunchボタンを押下し、先ほどメモしたusernameとpasswordを入力します。
正しく認証されると、Elasticsearchがjsonを返すので、その内容がブラウザに表示されます。
同様に、Kibanaへもアクセスします。
正しく認証されると、Kibanaのページが表示されます。
Raspberry Piの設定
ラズパイとDHT11を接続します。
ここではブレッドボード上で接続を行いました。
Pythonを使用して、Elasticsearchとやり取りをするために必要な、モジュールをインストールします。
pip install elasticsearch
必要なソースコードをGitHubからCloneします。
※ なお、ソースコードは、szazoさんのリポジトリをフォークしてありがたく作成させていただきました。
git clone https://github.com/remix-yh/DHT11_Python.git
以下ファイルを開き、cloud_idとhttp_authの情報を設定してください。
設定内容は、上記の手順でメモした情報です。
cd DHT11_Python/ vi dht11_example.py
Pythonスクリプトを実行します。
成功すると、温度と湿度が定期的に表示され、Elasticsearchにデータが登録されます。
python dht11_example.py
BIツール(Kinaba)の設定
Kibana上で、Elasticsearchのindexを見るために、設定を行う必要があるため、以下の設定を行います。
左下の歯車マーク(Management)を押下し、KibanaのIndex Patternsを押下します。
そして、Create Index patternを押下します。
Elasticsearchと紐づけしたいIndex名を入力し、Next stepを押下します。
Time Filter field name にdate_timeを指定し、Create Index patternを押下しインデックスの作成を行います。
インデックスの作成が終わったところで、温度と湿度を折れ線グラフで表示するための、コントロールを作成します。Visualzeから、Create new visualizationを押下します。
Lineを選択します。
今回作成したindexを指定します。
Y軸の設定を以下とします。
X軸の設定を以下とします。
動作を確認します。
範囲をToday(データが入っている範囲)にし、スタートボタンを押下すると、折れ線グラフが表示されます。
問題なければ、左上のSaveを押下して、ダイアログが開くのでTitleに任意のvisualization名を指定して、Saveを押下します。
次にDashboardsを作成します。
Dashboardsから、Create dashboardを押下します。
KibanaではDashboardに複数のvisualizationを配置することができます。
先ほど作ったvisualizationを指定するので、Add an existingを押下します。
先ほど作った、visualization名を押下します。
visualizationが配置されます。
問題なければ、visualizationと同様に、Dashboardを保存します。
Titleを指定して、dashboardを保存します。
さいごに
Elastic Cloudを使うことで、簡単に環境が作成でき、思いのほか時間をかけずに作成することができました。
(数時間程度?この記事をまとめるほうが時間がかかっている気が。。)
基本的な見える化機能はできましたが、まとめるのに時間がかかったため、以下の機能はまた後日やれたらやろうと思います。
- 指定した範囲外の値になったら、通知をする
- ダッシュボードへ、現在値の表示
あとはElastic Cloudは有料なので、今回のケースはCloud通す理由もないので、ラズパイ自体にElasticsearchとKibanaをインストールしていれての運用や、Docker上にElasticsearchとKibanaを配置してもいいかなと思いました。
ひとまず、やりたいことはやれたのでOKとします!
コメント