Raspberry pi+zabbix + BME280 で温度湿度気圧のロギングをする
Raspberry piに温湿度気圧センサーを接続しzabbixから定期的に値を取得しロギングします。
Raspberry piにRaspbianとzabbix agentを入れ監視が出来ている状態を前提とします。
1.センサーを接続する
akizukidenshi.com今回は秋月で売っているセンサーを使用しました。
I2CとSPIに対応してますが扱いが簡単なI2Cで接続します。
ブレッドボード等を使用しCSBをVDD、SDOをGNDに接続しI2CモードにしてVDD,GND,SDI,SCKをRasbperry piに接続します。
2.I2C使用の準備
I2C使用の準備をします。
$ sudo su
# apt-get install i2c-tools python-smbus
で必要なソフトウエア、ライブラリをインストールします。i2c-toolsはコンソールからI2Cを操作するためのツール、python-smbusはpythonからI2Cを使用するためのライブラリです。
次に、Raspberry piはデフォルトでI2Cが無効になっているため有効にします。
# raspi-config
で設定ツールを起動し
5.Interfacing options
P5 I2C
の順で選びI2Cを有効にします。
I2C使用の準備が整ったか確認します。
# i2cdetect -y 1
で接続されたI2CデバイスのIDを確認出来ます。
ここではIDが0x76のデバイスが接続された状態になっています。
表示されなければ接続や設定を確認してください。
3.値取得
SwitchScienceの公開してるサンプルのpythonスクリプトを値の取得と表示を分離するよう修正したものを用意しました。
そのまま実行すれば温度湿度気圧が表示されます。
https://github.com/Hotspring-r/BME280/blob/master/Python27/bme280_sample.py
# wget https://raw.githubusercontent.com/Hotspring-r/BME280/master/Python27/bme280_sample.py
<略>2018-06-12 07:46:53 (3.09 MB/s) - `bme280_sample.py' へ保存完了 [3999/3999]
# python bme280_sample.py
temp : 26.78 C
hum : 49.65 %
pressure : 994.03 hPa
上のスクリプトを/etc/zabbixに置き、json形式で出力するスクリプトを barometer.py という名前で同じ場所に作成します。
# barometer.py
import bme280_sample
bar = bme280_sample.readData()
print str(bar).replace("'","\"")
実行するとjson形式で温度湿度気圧が出力されます。
# python barometer.py
{"hum": 51.28607150999257, "pres": 1008.3877801085655, "temp": 27.001369402982526}
4.zabbixの設定
/etc/zabbix/zabbix_agentd.conf に以下の行を足してzabbixからスクリプトを呼べるようにします。
UserParameter=Barometer,python /etc/zabbix/barometer.py
デフォルトでzabbixユーザーにはi2cへのアクセス権限がないのでadduserで権限を付与し、再起動します。
# adduser zabbix i2c
ユーザ `zabbix' をグループ `i2c' に追加しています...
ユーザ zabbix をグループ i2c に追加
完了。
# reboot
http://static.bmscr.com/blog/barometer_template.xml からテンプレートをダウンロードしzabbixの管理コンソールからインポートしてRaspberry piのホストにテンプレートを設定します。
Barometerという名前のアイテムでjsonを1分ごとに取得し依存アイテムで温度湿度気圧それぞれの値を取り出してます。
グラフで値の変化を見ることも出来ます。