ラズベリーパイに繋いだ温度・湿度センサー(DHT11)の情報をElasticsearch & Kibanaでリアルタイム可視化した
ラズベリーパイに繋いだ温度・湿度センサーの情報をElasticsearchに投入して、Kibanaで可視化してみたので、手順を残しておきます。

Elasticsearch & KibanaはAmazon EC2にインストールして実行しています。
インストールなどの手順は以下をご参照ください。
mamelog.hatenablog.jp
温度・湿度センサー(DHT11)をラズベリーパイに接続する
以下の写真のように、センサーセットの中にあるケーブルを使って接続します。

温度・湿度を取得し表示する
DHT11はGitHubに取得用のコードを公開してる人がいるので、それを使います。
github.com
ラズパイ上でgit cloneしましょう
$ git clone https://github.com/szazo/DHT11_Python
dht11_example.pyを実行すると、温度・湿度が取得できます。
Elasticsearchにデータを送信する
Elasticsearchにデータを送るために、コードを読み解きます。
サンプルコードについて
dht11_example.pyを見ると、以下のコードでセンサーデータを取得していることが分かります。
instance = dht11.DHT11(pin=14) result = instance.read() result.temperature result.humidity
単純なコードを埋め込むだけで、温度・湿度が取れそうです。
Elasticsearchに外部からアクセス可能にする
Elasticsearchはデフォルトの設定では外部からアクセスが出来ないので、
外部からのアクセスを許可する設定を入れる必要があります。
具体的には/etc/elasticsearch/elasticsearch.ymlを編集します。
$ sudo vi /etc/elasticsearch/elasticsearch.yml
以下の設定を入れて保存します。
networkhost: "0.0.0.0"
Elasticsearch用のコードの編集
取り敢えず、コードを貼り付けちゃいます。
温度・湿度を取り敢えず可視化するだけならこれで可能です。
#!/usr/bin/env python3
import RPi.GPIO as GPIO
import dht11
import time
import datetime
import socket
from elasticsearch import Elasticsearch
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.cleanup()
es = Elasticsearch('<Elasticsearch IP Address>:9200')
instance = dht11.DHT11(pin=14)
while True:
sensorData = instance.read()
timestamp = datetime.datetime.now()
if sensorData.is_valid():
es_body = {
'@timestamp' : timestamp.isoformat(),
'temperture' : sensorData.temperature,
'humidity' : sensorData.humidity
}
response = es.index(index='rspi',doc_type='doc',body=es_body)
print(response)
time.sleep(5)このコードを適当なファイル名で保存して、dht11.pyと同じフォルダに置き、バックグラウンド実行しておけば5秒おきにセンサーデータが送られます。
Kibanaでこのようなグラフを作って、可視化することが出来ます。

SSH接続やElasticsearchのインデックスの作成など、いくつか粗はありますが、取り敢えずの実践ということで。
Kibanaでの画面自動更新設定方法
V7から?かな今まで画面右上部にあった自動更新設定が見当たらず、
自動更新が出来てなかったんで調べたら、以下の画像のように、期間設定のところに融合していました。

時差問題
タイムゾーン問題でこのコードだとKibanaでの表示が9時間ずれてしまいます。
解決策があれば教えていただきたく。
