そこで、Raspberry Piで検証用PC付近の温度と湿度を取得し、Zabbixに連携してグラフ化し、温度監視をすることにした。
必要なもの
Raspberry Pi本体は当然必要となる。導入方法については別記事を参照。温度・湿度センサーはDHT11を選択した。DHT11は精度はそこまでよくないらしいが、非常に安い。
・DHT11のセンサー
http://amzn.to/2iwkWkH
なお、私はDHT11単体で購入するのではなく、以下のOSOYOOの「電子工作キット」を購入した。この中にはDHT11の他に配線を楽にするブレッドボード等も含まれるので、Raspberry Piでいろいろやる場合は、1個買っておいても損はない。
センサーを接続
それではセンサーを接続していこう。DHT11のPin配置は以下の通りとなる。1 VDD
2 DATA
3 NC (Not Connected)
4 GND
Raspberry Piとの接続は、以下の通りとなる。
1 VDD -> 3V3
2 DATA -> GPIO17
3 NC (Not Connected) -> 接続しない
4 GND -> GND
接続図は以下の通りとなる。
DATAとGPIO17の間にはプルアップ抵抗として、10kΩの抵抗を挟む図となっているが、プルアップ抵抗がはじめから回路に含まれている一体型のDHT11もあり、そちらを利用する場合は不要となる(一体型の場合はNCのPinも省略されて、3Pinで構成されているものが多い模様)。
以下写真は、自宅環境の接続の状況。わかりづらいが、DHT11にあらかじめプルアップ抵抗が付いており、通電するとLEDも点灯する仕様になっている。
以下写真は、自宅環境の接続の状況。わかりづらいが、DHT11にあらかじめプルアップ抵抗が付いており、通電するとLEDも点灯する仕様になっている。
Pythonにて温度・湿度取得スクリプトを作成
温度と湿度の取得スクリプトを一から作るのは大変なので、gitを使って元となるスクリプトを入手する。$ git clone https://github.com/szazo/DHT11_Python.git
------------------------------
Cloning into 'DHT11_Python'...
remote: Counting objects: 48, done.
Unpacking objects: 100% (48/48), done.
Checking connectivity... done.
------------------------------
ファイルを確認すると、dht11.pyとdht11_example.pyの2のスクリプトがある。dht11.pyが本体で、dht11_example.pyから呼び出してセンサーから温度と湿度を取得する、という作りになっている。
$ cd DHT11_Python/
$ ls -l
------------------------------
-rw-r--r-- 1 pi pi 1071 8月 19 13:16 LICENSE.md
-rw-r--r-- 1 pi pi 899 8月 19 13:16 README.md
-rw-r--r-- 1 pi pi 1 8月 19 13:16 __init__.py
-rw-r--r-- 1 pi pi 5969 8月 19 13:16 dht11.py
-rw-r--r-- 1 pi pi 464 8月 19 13:16 dht11_example.py
------------------------------
今回はdht11_example.pyを参考にして、Zabbix連携用のスクリプトを作成する。以下のように、温度、湿度の順でカンマ区切りで表示させるスクリプトを作成した。
$ cat dht11_get_temperature_humidity.py
------------------------------
import RPi.GPIO as GPIO
import dht11
# initialize GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.cleanup()
# read data using pin 14
instance = dht11.DHT11(pin=17)
result = instance.read()
if result.is_valid():
print("%d,%d" % (result.temperature, result.humidity))
------------------------------
試しに実行すると、以下の通り温度と湿度が出力された。
$ python dht11_get_temperature_humidity.py
------------------------------
35,31
------------------------------
Zabbix Senderにてデータを送信
Zabbixに対してはZabbix Senderを使い、データ送信を行うこととする。Zabbix Senderを使えるようにあらかじめZabbix Agentをインストールしておこう。インストール方法はこちらを参照。Zabbix Senderのコマンドの書式は以下の通りとなる。キー名は、別途Zabbix Server側の「アイテム」で設定する際の値と同一にする必要がある。
zabbix_sender -z <Zabbix ServerのIPアドレス> -s <ホスト名> -k <キー名> -o <値>
上記zabbix_senderを使って、温度・湿度情報を送信するシェルスクリプトを以下のように作成した。内容としては、Pythonのスクリプトで得られた温度・湿度情報をZabbix Senderの値に入れて飛ばすだけの簡単なものになっている。
$ cat get_temperature.sh
------------------------------
#!/bin/bash
home_dir="/home/pi/DHT11_Python"
value=$(python $home_dir/dht11_get_temperature_humidity.py)
echo $value
zabbix_sender -z 192.168.33.22 -s t3015rasp -k rasp_temp -o $(echo $value | cut -d"," -f 1)
zabbix_sender -z 192.168.33.22 -s t3015rasp -k rasp_humi -o $(echo $value | cut -d"," -f 2)
exit 0
------------------------------
上記スクリプトを5分間隔で実行するよう、crontab -eコマンドにて以下行を登録する。
$ crontab -l
------------------------------
*/5 * * * * /home/pi/DHT11_Python/get_temperature.sh
------------------------------
cronの設定反映のため、サービスを再起動しておく。
$ sudo systemctl restart cron.service
Zabbix Serverにてグラフ化と監視トリガーを設定
最後にZabbix Server側で受信設定を行う。1. アイテムの作成
温度用のアイテムと湿度用のアイテムの2つを作成する。------------------------------
◆温度用
・名前:Sensor Temperature
・タイプ:Zabbixとラッパー
・キー:rasp_temp
・データ型:数値 (浮動小数)
・単位:℃
・アプリケーション:Sensor (「アプリケーションの作成」で作成する)
------------------------------
------------------------------
◆湿度用
・名前:Sensor Humidity
・タイプ:Zabbixとラッパー
・キー:rasp_humi
・データ型:数値 (浮動小数)
・単位:%
・アプリケーション:Sensor
------------------------------
2. グラフの作成
1つのグラフで温度と湿度を両方表示できるようにする。------------------------------
・名前:Temperature & Humidity
・アイテム 1: Template OS Raspbian: Sensor Temperature / Y軸:左
・アイテム 2: Template OS Raspbian: Sensor Humidity / Y軸:右
------------------------------
3. トリガーの作成
温度に関しては高温度となった際に、Zabbixでアラートとして検知できるように、トリガーを作成する。------------------------------
・名前:High Temperature
・条件式:{Template OS Raspbian:rasp_temp.last()}>37
※下線部は監視閾値としたい温度に適宜変更する
・深刻度:軽度の障害
------------------------------
4. グラフの確認
最後にグラフが正常に表示されることを確認する。赤線が温度で緑線が湿度となる。以下の図は一週間ほど値を取得した結果のグラフとなる。設置場所が検証用PCやNASの近くなので、温度が常に30℃以上と高めとなっている。非常に当たり前の結果ではあるが、人が外出する日中は温度・湿度が上昇し、帰宅後クーラーをONにすると温度・湿度が急激に下がるということがわかった。
以上で、Raspberry Piを使って、温度・湿度センサーによる監視を実現することができた。今後は、取得した温度・湿度情報をもとに、クーラーや扇風機を制御できるようにしたいとも考えている。
0 件のコメント:
コメントを投稿