RaspberryPi + BMP180 + muninで温度データをグラフ化


このエントリーをはてなブックマークに追加

温度湿度気圧センサのBMP180(Adafruit製)を用いて
温度データを取得後、muninというツールを用いてグラフ化した

用いたもの
・RaspberryPi2 B (Raspbian wheezy(2015年5月バージョン))
・BMP180

pythonはRaspbianに入っていたものをそのままなのでバージョンは2.7.3です

まずはpythonでデータ取得をやってみる

下記を参考にした、そのままで出来ます
http://qiita.com/masato/items/d5c19a883b0ba3ec7d5b

i2cを使用可能な状態にしておくこと
参考リンク
http://qiita.com/tchisaka/items/e8a2b09c808715dc8515

1
2
3
4
5
$ sudo apt-get update
$ sudo apt-get install git build-essential python-dev python-smbus
$ git clone https://github.com/adafruit/Adafruit_Python_BMP.git
$ cd Adafruit_Python_BMP
$ sudo python setup.py install

実際に配線してみてexampleのコードを試してみる

1
2
3
4
5
6
7
$ cd Adafruit_Python_BMP/example
$ sudo python simpletest.py
Temp = 22.60 *C
Pressure = 100439.00 Pa
Altitude = 73.86 m
Sealevel Pressure = 100439.00 Pa

のように表示されたら成功

muninでグラフ化してみる

センサからの値をグラフ化する方法は色々あるみたいですが
pythonでのグラフ描画について調べた

RaspberryPiだと、よく使われるのはMuninというツールを使ってやります

Muninとは、そもそもはリソース管理ツールみたいです
リソース監視ツール Munin を使う

RaspberryPiに導入するのに色々な情報があって最初は錯綜したけど
やってみたらシンプルでした

以下は設定の参考先
http://www.lisa.jp/index.php/Munin
http://blog.makotokw.com/2013/11/13/raspberry-pi%E3%81%A7%E3%82%B5%E3%83%BC%E3%83%90%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%92%E7%9B%A3%E8%A6%96%E3%81%99%E3%82%8B/
http://bey.jp/?p=15720
http://bey.jp/?p=15709

2016/04/21現在だと

1
2
$ sudo apt-get update
$ sudo apt-get install munin munin-node

してやれば入ります
後は

1
$ startx

してやって、ブラウザを開いて、アドレスバーに
http://raspberrypi/munin
と入れてやってmuninの画面が出てきたら成功

ただしこの状態だと、他のブラウザからは見ることが出来ない

試してみた↓

自分のラズベリーパイは、固定IPアドレスに設定しているので
例えば
address 192.168.11.1
とかだったとしたら、パソコンのブラウザなどから
http://192.168.11.1/munin
にアクセスしてみると

Forbidden
You don’t have permission to access /munin on this server.

みたいなのが表示されます

どのブラウザからも確認するためには
muninの設定を書き換えてあげる必要がある

1
$ sudo vi /etc/munin/apache.conf

以下の部分を見つける

1
2
3
<Directory /var/cache/munin/www>
Order allow,deny
Allow from localhost 127.0.0.0/8 ::1

下記のように書き換える

1
2
3
4
<Directory /var/cache/munin/www>
Order allow,deny
# Allow from localhost 127.0.0.0/8 ::1
Allow from all

保存して再起動する

1
$ sudo reboot

再起動後、自分のパソコンなどのブラウザから

http://192.168.11.1/munin

でアクセスして、muninの画面が表示されたら成功です

実際にmuninによるグラフ化を試す

温度センサのBMP180で試してみた
ライブラリのダウンロードや使い方などは以下を参照
http://qiita.com/masato/items/d5c19a883b0ba3ec7d5b

まずはAdafruitのライブラリのexampleをコピーしておいて、それを書き換える
コピーしたファイル名は temp.pyにしました

ディレクトリは以下のようになっている(はず)なので
/Adafruit_Python_BMP/examples/

まずはライブラリのサンプルスクリプトをコピーしてあげて書き直す

1
2
$ cp simpletest.py temp.py
$ sudo vi temp.py

以下のように書き換える
コメントの部分を消去して、最後のほうのprintの行をコメントアウトして、最後の行を追加したら下記のようになる

1
2
3
4
5
6
7
8
9
import Adafruit_BMP.BMP085 as BMP085
sensor = BMP085.BMP085()
#print('Temp = {0:0.2f} *C'.format(sensor.read_temperature()))
#print('Pressure = {0:0.2f} Pa'.format(sensor.read_pressure()))
#print('Altitude = {0:0.2f} m'.format(sensor.read_altitude()))
#print('Sealevel Pressure = {0:0.2f} Pa'.format(sensor.read_sealevel_pressure()))
print '{}'.format(sensor.read_temperature())

できたら、ファイルをpathの通ったところにコピーする
例えば /usr/local/bin がいいのではないかと思われるので以下のようにする

1
$ sudo cp temp.py /usr/local/bin

シェル・スクリプトでプラグインを作る

下記を参考にした
http://blog.bnikka.com/raspberrypi/dht11-raspberrypi.html

1
$ sudo vim /usr/share/munin/plugins/temp

下記を記述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/sh
#%# family=auto
#%# capabilities=autoconf
GETNUM=`python /usr/local/bin/munin_temp.py 11 4`
if [ "$1" = "autoconf" ]; then
if [ -n ${GETNUM} ] ; then
echo yes
exit 0
else
echo no
exit 0
fi
fi
if [ "$1" = "config" ]; then
echo 'graph_title temperature'
echo 'graph_args -r --lower-limit 0'
echo 'graph_vlabel C'
echo 'graph_category Weather'
echo 'total.label temperature'
echo 'total.min 0'
echo 'total.draw LINE2'
echo 'total.type GAUGE'
exit 0
fi
echo "total.value $GETNUM";

スクリプトの準備が整ったのでコンソールから下記コマンドをうちこんであげる

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# ルートアクセス権限を与える
$ sudo chmod 755 /usr/share/munin/plugins/temp
# muninでグラフ化出来るようにプラグインにシンボリックリンクを与える
$ sudo ln -s /usr/share/munin/plugins/temp /etc/munin/plugins/temp
# ルート権限でアクセスできるようにする
$ sudo vi /etc/munin/plugin-conf.d/temp
# 下記2行を記述
[temp]
user root
# muninを再起動
$ sudo /etc/init.d/munin-node restart

後はブラウザからmuninにアクセスすればよい
参考リンク先
http://bey.jp/?p=15709
みたいに、muninブラウザの左の欄に “weather” という項目があったら成功

あとは、温度データは5分に1回の取得になるので
何分か待ったら更新される

やってみたら下みたいなグラフが得られた
(30分ぐらいしか動かしてないのでデータ少ない)

RaspberryPi

これでグラフ化が成功しました

以下はやらなくても大丈夫な追加設定

負荷を軽減する

デフォルトの設定だと5分毎にデータをもらってグラフを書き換えているみたいなので
ひとまず負荷を軽減する策を講じる

グラフにブラウザからアクセスする時に更新するようにする

1
$ sudo vi /etc/munin/munin.conf

以下2つの行を見つける。2つは少し離れているので注意

1
2
3
#graph_strategy cron
#cgiurl_graph /munin-cgi/munin-cgi-graph

2つともコメントを外して以下のようにする

1
2
3
graph_strategy cgi
cgiurl_graph /munin-cgi/munin-cgi-graph

保存する。次にブラウザで見る時の制限を解除する

1
$ sudo vi /etc/munin/apache.con

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 以下の行をみつける
<Location /munin-cgi/munin-cgi-graph>
Order allow,deny
Allow from localhost 127.0.0.0/8 ::1
<Location /munin-cgi/munin-cgi-html>
Order allow,deny
Allow from localhost 127.0.0.0/8 ::1
# 次にように書き換える
<Location /munin-cgi/munin-cgi-graph>
Order allow,deny
# Allow from localhost 127.0.0.0/8 ::1
Allow from all
<Location /munin-cgi/munin-cgi-html>
Order allow,deny
# Allow from localhost 127.0.0.0/8 ::1
Allow from all

保存して再起動する

1
$ sudo reboot

このエントリーをはてなブックマークに追加