Twitterでシャポコさんという方がいて、シャポコさんが描く絵が好きでフォローしているんですが、ベランダでRaspberry Piとセンサーとを置いて気象観測していたのを見て、面白そうだなあと思い、私もやってみることにしました。
らじゅぱぃのお引っ越しした
— シャポコ (@shapoco) 2017年7月16日
🏠 🍓💨💨💨 pic.twitter.com/air8W3zmQw
センサーは秋月電子でBME280と言うセンサーを購入。1000円もするセンサーは初めてですね……!
I2C接続するようにジャンパ設定してあと接続してテスト。値が安定して取得できないなあと思っていたら、I2Cのアドレスを設定するためにSDOをGND(0x76)かVDD(0x77)どちらかに繋げないといけませんでした。これをやらないと0x76と0x77がランダムみたいな感じになって失敗するようになりました。マニュアル読め、と言うか読んでも理解していなかったというか。
設置については、私の場合は室内にRaspberry Piを配置して、aitendoのLANポートブレイクアウトモジュールでGPIOケーブルをLANケーブルに変換した後エアコンダクトから外に出して、センサーを接続する方法にしました。
こういう感じにして
適当に埋め込み。
もう一個LANポートブレイクアウトモジュールを繋いで、LANケーブルから再びピンヘッダケーブルに変換したあと、センサーに繋いでいます。
センサーで取得した値はZabbixになげるようにスクリプトを作成しました。
#!/usr/bin/env python # sudo apt install -y python-pip python-smbus # sudo pip install rpi.bme280 py-zabbix import smbus2 import bme280 from pyzabbix import ZabbixMetric, ZabbixSender address = 0x76 bus = smbus2.SMBus(1) bme280.load_calibration_params(bus, address) data = bme280.sample(bus, address) params = [ ZabbixMetric("bme280", "verandah_temperature", data.temperature), ZabbixMetric("bme280", "verandah_humidity", data.humidity), ZabbixMetric("bme280", "verandah_pressure", data.pressure) ] result = ZabbixSender(use_config=True).send(params)
あとはZabbixでホストを作って、それぞれのアイテム(verandah_*)をZabbixトラッパーで作っておけばデータがたまり始めます。グラフで見てみると、基本的に1000hPa前後の値になる気圧をZabbixが自動でキロ変換して1.01KhPaとかにしてしまって見づらいので、以下の情報をもとに単位がキロに変換されないようにしました。
UbuntuでZabbix公式リポジトリからパッケージをインストールした場合(うちはUbuntu 14.04でZabbixバージョンは3.0.3でした)、/usr/share/zabbix/include/func.inc.phpを開いて以下の部分を書き換えます。
// any other unit // black list of units that should have no multiplier prefix (K, M, G etc) applied # $blackList = ['%', 'ms', 'rpm', 'RPM']; $blackList = ['%', 'ms', 'rpm', 'RPM', 'hPa']; # hPaを追加
これでグラフもバッチリ。
そして、室温と湿度の方はと言うと……エアコンの室外機の熱風を拾ってしまうらしく、エアコンをつけると値がグワッと変わってしまいます。ううん、おしい。
Twitterでは、百葉箱的なもっと立派なソリューションを教えてもらいましたが、さすがにそこまで頑張る気もしないので、ここは妥協といったところでしょうか。その内気が向いたら改良してみたいです。とりあえずLANケーブルは3mでは足りなさそうなので5mに交換したいです。3mのケーブルもこのためにアキバの100円ジャンクの箱から拾ってきたけど足らんかったかー。