2015年9月21日月曜日

RaspberryPiでラズベリー栽培 ログのフォーマット

およそ半日のセンサーログを2回ほど取ってみましたが、いくつか問題が発生しました。
1:ファイルが大きい
2:読みにくい(表計算的な意味で)

古いログファイルはセンサーから取得したデータをただ書き込んだだけなので、タイムスタンプ、CPU温度、環境温度、気圧、湿度が縦に並んでいます。読みにくいだけでなく、無駄にファイルサイズも増えます。

センサーログスクリプトの修正
ログファイルのフォーマットを、次のように修正しました。
1:1行にタイムスタンプ、CPU温度、環境温度、気圧、湿度を表示
2:タイムスタンプは時:分のみ。(秒は捨てる)
3:temp,presなどのラベルや、単位℃などはヘッダに纏める。



修正した結果がこちら
人間が読みやすいかはともかく、1行に纏まってるので表計算にインポートしやすくなりました。拡張子を.csvにするだけで一発変換できます。

無駄な文字の出力を省いたのでログファイルの大きさも、かなり小さく出来ました。
修正前 1日分でおよそ130kB 1年で45MB
修正後 1日分でおよそ43kB 1年で15MB

あとは1日のログ出力が終わったら自動でZIPするなどしたら、さらに小さくなります。
スクリプトはこちら

sensorlog.sh
#!/bin/bash
#write your log dir
LOG_DIR=/home/pi/sensorlog/log
#write your log filename
FILENAME=senslog
#write bme280 python script dir
BME280_PYTHONSCRIPT=/home/pi/sensorlog/bme280_sample.py

#filepass of a logfile
timestamp=`date +%F`
LogFilePass=$LOG_DIR/$FILENAME$timestamp.txt

#write index if logfile is not exist
if [ ! -e $LogFilePass ]; then
  echo "timestamp,cpuTemp[c-deg],Temp[c-deg],Pressure[hPa],Humidity[%]" > $LogFilePass
fi

##### -- get sensor parameter and logging ---
#getTimestamp
timestamp=`date +%H:%M`

#get CPU tempereture
temp=`/opt/vc/bin/vcgencmd measure_temp`
#trimming format
temp=${temp//temp=/}
temp=${temp//\'C/}

#getBME280 parameter
bme280param=`python $BME280_PYTHONSCRIPT`
#trimming format
bme280param=${bme280param//邃・}
bme280param=${bme280param//hPa/}
bme280param=${bme280param//・・}
bme280param=${bme280param//temp/}
bme280param=${bme280param//pressure/,}
bme280param=${bme280param//hum/,}
bme280param=${bme280param//:/}

#write to logfile
record=$timestamp,$temp,$bme280param
echo $record | tr -d "[:blank:]" >> $LogFilePass




スクリプトの実行には、前回紹介したBME280用PythonScriptが必要です。ダウンロードしてsensorlog.shのファイルパスを変更してください。 http://pitslaboratory.blogspot.jp/2015/09/raspberrypibme280.html

> mkdir sensorlog
> cd sensorlog
> mkdir log
上記sensorlog.shをコピー。必要に応じてファイルパスを修正
BME280_sample.pyをコピー

> ./sensorlog.sh
logのなかにログファイルが作成されていたらOK。

あとはこのスクリプトをcronで1分おきまたは10分おきに起動すればログが取れます。

> crontab -e

ファイルの最後の部分に書き足す
*/1 * * * * /home/pi/sensorlog/sensorlog.sh

10分おきに設定したい場合
*/10 * * * * /home/pi/sensorlog/sensorlog.sh

1時間おきに設定したい場合
00 */1 * * * /home/pi/sensorlog/sensorlog.sh

編集が終わったら、logに移動して1,2分待ってみます。
senslog****-**-**.txt
が出来ていたらOK
拡張子は.txtで出力していますが、最初から.csvにしても良いかもしれません。


0 件のコメント:

コメントを投稿