2015年10月28日水曜日

復旧最終回:bme280で気圧・温度・湿度!

まずはi2cの動作からです。
i2c機器がこの状態で検出されるかどうか確認して見ます。

$ sudo i2cdetect -y 1

コマンドが無いって怒られました。まあ、想定通りなんですが(^^;)。
i2c機器の認識から始めます。

$ raspi-config
でi2cを有効にします。
$ sudo vi /etc/modules

i2c-bcm2708
i2c-dev
を追加します。うちのはi2c-devはすでに追加されていましたので、i2c-bcm2708を追加します。
(意味はわかりませんが(笑))

$ sudo vi /boot/config.txt
で下記を追記。具体的には先頭の#を削除。
dtparam=i2c_arm=on

$ sudo reboot
でリブートします。

立ち上がったらi2c-toolsをインストールします。
$ sudo apt-get install i2c-tools

この段階でようやくi2cの検出が可能になりました。
$ sudo i2cdetect -y 1

うちでは
i2c_address = 0x76
となっています。

次はbme280からデータを持ってくるための準備です。
bme280のアクセス用プログラムはスイッチサイエンスさんがpythonコードで提供してくれていますのでそれを利用します。

python-smbusをインストールします。
$ sudo apt-get install python-smbus

次に適当なフォルダにおいたスイッチサイエンスさんのPythonコードを実行してみます。
私は出力を改造しているので、ここでは名前をbme280_non2.pyとでもして、/home/pi/に保存しておきます。
$ python /home/pi/bme280_non2.py
で気温、気圧、湿度が表示されるはずです。
例えば、私の改造後の出力は
31.023869
991.371934
44.143983
となっています。上から気温、気圧、湿度です。

さて、ここまで来たら次はこの結果をmuninプラグインに取り込んでグラフ化します。

例によってmuninのプラグインをさくっと書きます。

---ここから
#!/bin/bash
# bme280 munin plugin by nonnon

#%# family=auto
#%# capabilities=autoconf

sensor_in=$(sudo python /home/pi/bme280_non2.py)
count=0
sensor=()
for L in $sensor_in
do
count=`expr $count + 1`
sensor[$count]=$L
done

if [ "$1" = "autoconf" ]; then
if [ -n ${sensor[1]} ]; then
echo yes
exit 0
else
echo no
exit 0
fi
fi

if [ "$1" = "config" ]; then
echo 'multigraph m_humi'
echo 'graph_title 3 BME280 Humidity'
echo 'graph_args -Y -J'
echo 'graph_scale no'
echo 'graph_vlabel Percent' 
echo 'graph_category BME280'
echo 'humidity.label humidity'
echo ''
echo 'multigraph m_temp'
echo 'graph_title 2 BME280 Temperature'
echo 'graph_args -Y -J'
echo 'graph_scale no'
echo 'graph_vlabel Celsius' 
echo 'graph_category BME280'
echo 'temperature.label temperature'
echo ''
echo 'multigraph m_pres'
echo 'graph_title 1 BME280 Pressure'
echo 'graph_args -Y -J'
echo 'graph_scale no'
echo 'graph_vlabel hPa' 
echo 'graph_category BME280'
echo 'pressure.label pressure'
exit 0
fi

echo 'multigraph m_humi'
echo "humidity.value ${sensor[3]}"
echo ''
echo 'multigraph m_temp'
echo "temperature.value ${sensor[1]}"
echo ''
echo 'multigraph m_pres'
echo "pressure.value ${sensor[2]}"
---ここまで

名前をbme280_non2とでもしておきましょう。
では、例によってこのプラグインをCPU温度のときと同じ手順で使えるようにします。
bme280_non2を
/usr/share/munin/plugins
に移動します。

実行権限を付けます。
$ sudo chmod +x bme280_non2

/etc/munin/pluginsにシンボリックを作成します。
$ cd /etc/munin/plugins
$ sudo ln -s /usr/share/munin/plugins/bme280_non2 bme280_non2

munin-nodeを再起動します。
$ sudo service munin-node restart

わすれてました。パーミッションを追加します。
/etc/munin/plugin-conf.d/munin-node

[bme280_*]
user root
を追加します。念のためmunin-nodeを再起動します。

さて、プラグインの動作実験です。
$ sudo /usr/sbin/munin-run bme280_non2

ここでは、
multigraph m_humi
humidity.value 42.298481

multigraph m_temp
temperature.value 30.668437

multigraph m_pres
pressure.value 991.962348
等と表示していれば完了です。

あとは数分待ってグラフが表示されるのを待つだけです!
ようやく復旧しました!

0 件のコメント:

コメントを投稿