Raspberry Piで温湿度モニタリングシステムの構築
この記事のまとめ:
- Raspberry PiとXiaomiのBluetooth温湿度センサーを使って、温湿度のモニタリングシステムをDockerやAnsibleを使って構築しましたのでその内容を紹介します。
背景
前回、BluetoothでXiaomiの温湿度センサーがブロードキャストするデータを受信してJSONファイルとして保存するスクリプトまで作りましたので、今回はそのJSONファイルをInfluxDB用に加工してInfluxDBに登録するスクリプトを作って、これらのスクリプトをAnsibleでデプロイします。あともちろんサーバー側にはInfluxDBと可視化用にGrafanaを立ち上げます。 今回で温湿度モニタリングシステムの話は完了です。
リポジトリ
今回作ったコードは下記のリポジトリからダウンロードできます。
システム構成
今回のシステムの全体概要は次の通りです。
サーバー側とRaspberry Pi側での準備をそれぞれ見ていきます。
サーバーでの準備
サーバーにTSDBとしてInfluxDBを、ダッシュボードとしてGrafanaをDockerコンテナとして立ち上げます。
docker-compose.yml
にまとめてますので、下記のコマンドでコンテナが立ち上がります。
GrafanaやInfluxDBへの接続ポート等は適宜変更してください。
Raspberry Piでの準備
Raspberry Piで設定等しなければならないことはすべてサーバーからAnsibleで設定します。下記コマンドで作成したプレイブックを実行できます。
処理の内容は ansible/roles/mitemp/tasks/main.yml
を実行しているだけで、主な内容は下記の通りです。
- Docker用のPython APIをpipでインストールする
- XiaomiのBluetooth温湿度センサーのデータを受信するコンテナ (hassiweb/mitemp) をプルする
- 取得したデータをInfluxDBに登録するコンテナ (hassiweb/ mitemp-sender) をプルする
- コンテナを実行するシェルスクリプトとデータを保存するセンサーのMACアドレスを書いたファイル(※)とInfluxDBへの接続情報ファイル(※)をコピーする
- cronでシェルスクリプトを実行する時間についての変数(※)を読み込む
- 2.のコンテナを実行するシェルスクリプトをcronに登録する
- 3.のコンテナを実行するシェルスクリプトをcronに登録する
※を付けたファイルは環境に応じて変更が必要です。少し中身を見てみます。
設定ファイル
- データを保存するセンサーのMACアドレスを書いたファイル
- ファイル:
ansible/roles/mitemp/files/mac_list.txt
- センサーのMACアドレスを列挙します。MACアドレスを調べる方法は前回の記事に記載していますのでこちらをご参照ください。
- ファイル:
-
InfluxDBへの接続情報ファイル
- ファイル:
ansible/roles/mitemp/files/influxdb.conf
- 下記のフォーマットでInfluxDBのデータベースに接続するために必要な情報を記載します。
- ファイル:
-
cronでシェルスクリプトを実行する時間についての変数
- ファイル:
ansible/roles/mitemp/vars/<ターゲットのホスト名/IPアドレス>.yml
- 下記のフォーマットで
mitemp_measurement_cron_min
とmitemp_sender_cron_min
という変数名でcronでhassiweb/mitemp
コンテナとhassiweb/mitemp-sender
コンテナを実行する時間の設定しています。ファイルはターゲットのホストごとに作成する必要があります。
- ファイル:
Grafanaで表示
上記がすべて問題なく実行できていればデータはInfluxDBにどんどん保存されていくはずです。
InfluxDB内のデータ保存先はデフォルトでは、データベースは mitemp
、measurementはセンサーのMACアドレスに入るようになっていますので、下記のようにcurlコマンドを叩けばデータが保存されているか確認できます。
ちゃんとデータが保存されているようであればInfluxDBでちょちょいとダッシュボードを作ってやればこんな感じになります。
無事に完成しました。
# 我が家の1階とロフトの温度差がすごい…。これからどうやって部屋を涼しくさせるかを考えよ。
今回は以上です。 最後まで読んでいただき、ありがとうございます。
関連記事
Raspberry PiのプロビジョニングをAnsibleで行う Ansibleを使ってRaspberry Piのプロビジョニングのやり方を紹介しています。
Raspberry Piの始め方 Raspberry Piを初めて買ってみたので購入先や初期設定について説明しています。
コメント
コメントを投稿