【IoT】Raspberry Piで温度/湿度を見える化

IoTIoT

概要

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社のホームページより、無料トライアルを選択します。

オープンソース検索:開発元が提供するElasticsearch、ELK Stack、Kibana | Elastic
Elastic Stack(Elasticsearch、Kibana、Beats、Logstash)の開発元が提供する、安全で確かなデータ検索、分析、可視化テクノロジー。クラウドでも、オンプレミスでも使えます。

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とします!

コメント