Raspberry Pi3と秋月電子通商で調達した温度・温湿度センサをI2C SPIで接続をしてZABBIXサーバに記録する手順の備忘録。BME280で温湿度/気圧まで取得し完結をはかろうとしたけど値が暴れて断念。なにか構成に問題があるのかも、、
うまくいったらZeroで温湿度ロガーを作ろうと思う。 🙂
準備編
・I2C/SPIの有効化
1 2 |
# uname -a Linux ApplePi3 4.4.13-v7+ #894 SMP Mon Jun 13 13:13:27 BST 2016 armv7l GNU/Linux |
1 |
# raspi-config |
raspi-configでi2cとspiを有効にするとconfig.txtも書き換わっている
1 2 3 4 5 |
# vi /boot/config.txt # Uncomment some or all of these to enable the optional hardware interfaces dtparam=i2c_arm=on #dtparam=i2s=on dtparam=spi=on |
# vi /etc/modules に追記
i2c-dev
ここで再起動
1 2 3 |
# apt-get install i2c-tools # apt-get install wiringPi # apt-get install python-smbus |
構成
名 | 型番 | 購入先 | 接続 | 参考金額 |
本体 | Raspberrypi3 | ツクモロボット | --- | 5000以下 |
温度センサ | ADT7420 | 秋月電子通商 | I2C | 500 |
温湿度センサ | AM2320 | 秋月電子通商 | I2C | 600 |
温度センサ | LM35DZ | 秋月電子通商 | SPI | 120 |
ADコンバータ | MCP3002 | 秋月電子通商 | 180 | |
ブレッドボード | EIC-801 | 秋月電子通商 | --- | 270 |
ジャンプワイヤ | 秋月電子通商 | --- |
ブレッドボード上に3個のセンサーを設置している
Fritzing AM2320のデータが無いので代用している(白いセンサ)ブレッドボードの向きが180度違っている。Fritzingで書いて初めて気がついた。。。。
デバイスアドレスが取得出来ていることを確認する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
root@ApplePi3:~# i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- root@ApplePi3:~# i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- 5c -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- |
温湿度センサは休止モードとなっているため1回目では出現していない。目覚めた後の2回目で認識が確認できた。
・単体センサとしての値をとってみる(すべて先人のコピーです 多謝!)
ADT7420(温度センサー)
1 2 3 4 5 |
#vi adt7410.sh /usr/sbin/i2cget -y 1 0x48 0x00 w | sed 's/0x\(..\)\(..\)/0x\2\1/g' | xargs printf "(%d/8)*0.0625\n" | bc | cut -c 1-5 # chmod +x adt7420.sh # ./adt7410.sh 30.3750 |
LM35DZ+MCP3002(温度センサ+ADコンバータ)
ラズパイマガジンのソースをコンパイルしています 2015年春号項目21から
1 2 |
# ./adc_oneshot 30.937500 |
AM2320(温湿度)
こちらのam2321.cをコンパイルして使わせていただきました。多謝 温度 湿度の順で表示されます。
1 |
# gcc -o am2302 am2302.c |
1 2 3 4 5 |
# ./am2320 -s 30.3 51.3 # ./am2320 -r Temperature 30.6 [C] Humidity 56.1 [%] |
ZABBIXに取り込むためのデータ準備(数値だけにする)
1 2 3 4 |
# echo `./am2320`| cut -d' ' -f1 29.6 # echo `./am2320`| cut -d' ' -f2 47.6 |
ここまでに参考にさせていただいたサイト
RaspberryPi i2cgetでADT7410の温度を取得するコマンド
Zabbixへの送信
エージェントを使わずにzabbix-senderをつかってZabbixサーバに送り込んでやる方法とした。ラズパイは極力シンプルにしておきたいことも理由の一つ。
ラズパイのCPUアーキテクチャ用バイナリプログラムはないのでソースからコンパイルする方法
http://www.zabbix.com/
http://www.zabbix.com/download.php
https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/3.0.4/zabbix-3.0.4.tar.gz/download
zabbixユーザグループの作成
1 2 |
# groupadd zabbix # useradd -g zabbix zabbix |
https://www.zabbix.com/documentation/3.2/manual/installation/install
zabbix-3.0.3.tar.gz
ダウンロードしたSourceを/usr/local/srcに移動し解凍
1 2 |
# tar zxvf zabbix-3.0.3.tar.gz # cd zabbix-3.0.3 |
マニュアルより zabbix_senderを使うときは--enable-agentのオプションをつかいますとある
Command-line utilities zabbix_get and zabbix_sender are compiled if --enable-agent option is used.
1 2 |
# ./configure --enable-agent # make |
makeのみでzabbix_senderが出来るのでmake installはやらないでおこう
マニュアルよりmake installするとzabbix_senderは/usr/local/binに格納される
Running make install will by default install the daemon binaries (zabbix_server, zabbix_agentd, zabbix_proxy)
in /usr/local/sbin and the client binaries (zabbix_get, zabbix_sender) in /usr/local/bin.
なのでバイナリを手動で上記フォルダ任意のフォルダにCopyする
1 2 3 4 5 |
# cd /usr/local/src/zabbix-3.0.3/src/zabbix_sender # cp zabbix_sender /usr/local/bin # cd /usr/local/bin/ # ls zabbix_sender |
ZABBIXに送るための各種センサー値取得スクリプト(Webの切り貼り)
BME280の測定データは暴れるのでコメントアウト
zabbix_sender_cron.shとした
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
#!/bin/sh #VariantSet sv=192.168.1.19 cl="ApplePi3" #LM+ADcon_Temperature temp=$(echo `/usr/local/bin/adc_oneshot`) echo "- SenderRoomTemperatureLM " $temp | /usr/local/bin/zabbix_sender -z $sv -s $cl -vv -i - #ADT7240_Temperture echo "- SenderRoomTemperatureADT "`/usr/sbin/i2cget -y 1 0x48 0x00 w | sed 's/0x\(..\)\(..\)/0x\2\1/g' | xargs printf "(%d/8)*0.0625\n" | bc | cut -c 1-5` | /usr/local/bin/zabbix_sender -z $sv -s $cl -vv -i - #AM2320_Temperature echo "- SenderRoomTemperatureAM2320 " `/usr/local/bin/am2320 | cut -f1 -d ' '` | /usr/local/bin/zabbix_sender -z $sv -s $cl -vv -i - #AM2320_Humidity echo "- SenderRoomHumidityAM2320 " `/usr/local/bin/am2320 | cut -f2 -d ' '` | /usr/local/bin/zabbix_sender -z $sv -s $cl -vv -i - #CPU CpuLoad 1min Ave echo "- SenderCpuLoad01 "`cut -f1 -d ' ' < /proc/loadavg` | /usr/local/bin/zabbix_sender -z $sv -s $cl -vv -i - #CPU CpuLoad 5min Ave echo "- SenderCpuLoad05 "`cut -f2 -d ' ' < /proc/loadavg` | /usr/local/bin/zabbix_sender -z $sv -s $cl -vv -i - #CPU CpuLoad 15min Ave echo "- SenderCpuLoad15 "`cut -f3 -d ' ' < /proc/loadavg` | /usr/local/bin/zabbix_sender -z $sv -s $cl -vv -i - #CPU Temperture cputemp=$(echo `vcgencmd measure_temp` | sed -e 's/[^0-9,.]//g') echo "- SenderCpuTemperature " $cputemp | /usr/local/bin/zabbix_sender -z $sv -s $cl -vv -i - #CPU Clock cpuclock=$(echo `vcgencmd measure_clock arm | sed -e "s/frequency(45)=//"`) echo "- SenderCpuClock " $cpuclock | /usr/local/bin/zabbix_sender -z $sv -s $cl -vv -i - #BME280_Pressure #pressurebme=$(echo `/usr/local/bin/getBME -p` | sed s/Pa//g) #echo "- SenderRoomAirPressureBME " $pressurebme | /usr/local/bin/zabbix_sender -z $sv -s $cl -vv -i - #BME290_Humidty #humiditybme=$(echo `/usr/local/bin/getBME -h` | sed s/%//g) #echo "- SenderRoomHumidityBME " $humiditybme | /usr/local/bin/zabbix_sender -z $sv -s $cl -vv -i - #BME280_Temperature #tempbme=$(echo `/usr/local/bin/getBME -t` | sed s/C//g) #echo "- SenderRoomTemperatureBME " $tempbme | /usr/local/bin/zabbix_sender -z $sv -s $cl -vv -i - |
Cronで1分間毎にZABBIXサーバに送る
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 |
# crontab -e # Edit this file to introduce tasks to be run by cron. # # Each task to run has to be defined through a single line # indicating with different fields when the task will be run # and what command to run for the task # # To define the time you can provide concrete values for # minute (m), hour (h), day of month (dom), month (mon), # and day of week (dow) or use '*' in these fields (for 'any').# # Notice that tasks will be started based on the cron's system # daemon's notion of time and timezones. # # Output of the crontab jobs (including errors) is sent through # email to the user the crontab file belongs to (unless redirected). # # For example, you can run a backup of all your user accounts # at 5 a.m every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # For more information see the manual pages of crontab(5) and cron(8) # # m h dom mon dow command #Zabbix * * * * * /usr/local/bin/zabbix_sender_cron.sh 1>/dev/null 2>/dev/null |
cronが正常に動いているか
# tail -f /var/log/syslog
1 |
Aug 1 15:41:01 ApplePi3 CRON[7533]: (root) CMD /usr/local/bin/zabbix_sender_cron.sh 1>/dev/null 2>/dev/null) |
ZABBIXのグラフ設定後 AM2320による温湿度をグラフ化している
リアルタイムにグラフ作成してくれるのでとてもぃぃ。MRTGはたしかバッチ処理だったかと思う。
コメント