USBRH-FGを使ってCSV形式で自動的に記録する

 USB接続の温湿度計 (USBRH-FG)を購入してから約10日経った。測定データもそれなりに集まったので、気づいた点などを記したい。

 私の使用環境であるが、Raspberry Piのtype Bに繋いでいる。OSはRaspbian 3.6.1、使用ドライバはusbrh。インストール情報等はネットを探せばゴロゴロしてる。

 usbrhは、そのまま実行すると、

pi@SnakeLog ~ $ sudo usbrh
32.48 79.59

のように、温度 (摂氏)と湿度 (%)をそれぞれ単位なしのスペース区切りで出力する。-vをつけて実行した場合は、

pi@SnakeLog ~ $ sudo usbrh -v
Temperature: 32.50 C
Humidity: 79.64 %

となる。

 そこで、まずはusbrhを使って、定期的に温度と湿度を記録させるシェルスクリプトを作成した。最終的にRを使ってグラフを描くため、形式は.csvにする。ちなみに、私の環境ではsudoを付けないと値が取得できない。Rasbianではsudoをつけたコマンドが、デフォルトのユーザーpiでパスワードの入力を求められること無く実行できてしまう。

#!/bin/sh
### record date and temperature in csv format ###

dir="/home/pi/temperature"
data=`sudo usbrh | sed s/\ /,/g`
date=`date +"%H:%M"`
logfile=`date +"%Y%m%d"`
todaylog="${dir}/${logfile}.csv"
output="$date,$data"
echo $output >>$todaylog

 これをcronに登録して実行させると、20130802.csvというような名前のファイルに、

......
18:00,32.51,52.47
18:05,32.47,52.41
18:10,32.50,52.47
18:15,32.47,52.41
18:20,32.46,52.50
......

といった具合に記録がなされていく。私は5分間隔で実行させているので、毎日、288行の.csvファイルが1つ(約5.2KB)作られる計算になる。

 ところが、何日かこれを動かしていると、ときたまおかしな値が記録されているのに気づいた。

20130801.csv

......
20:15,-40.00,-4.25
......

20130806.csv

......
18:10,-40.00,-4.25
......

 今のところ、丸1日分のデータがある9日分で2回、つまり288*9=2592回のusbrhコマンド実行で、2回分の測定値がおかしくなっている。サンプルが2つしかないので確かなことは分からないが、2回とも記録されている温度・湿度の値が同じなので、何らかのエラーにより正常な値が取得できない場合、-40.00と-4.25という値が出力されるのだろか。明かにエラーと分かる値を吐いた時は前回のデータを複製するとか、スクリプトに処理を追加する必要がありそうだ。

Post a Comment

Your email is never published nor shared.