あたた日記

あたたん。

RaspberyPiで温度を計測、日次でグラフを作る【gnuplot】

※2019/05/03 商品リンクを修正

USB温度計とPCを組み合わせて、部屋の気温の推移を計測する。
日毎のグラフを作成し、サーバーへアップロードする仕組みを実装した記録。

使うものたち

常時、電源をONさせる必要があるため、RaspberyPiを使用。
OSはRaspbianを使用
USB温度計は、amazonで低価格だった、下記商品を購入。

USB温度計! USB thermometer-528018

USB温度計! USB thermometer-528018

RaspberryPi側のデバイスの用意

RaspberryPiでUSB温度計を使用できるための設定内容は、
"RaspberryPi 温度計"で検索すると、設定例などがヒットするので、そちらを参考にする。
今回、参考にしたのは下記サイト。わかりやすいです。
dolls.orz.hm

デフォルトでは時刻が世界標準時になっている(gmtime)ため、
サーバーの時刻を使用する(localtime)ようにtemper.cを修正する。

temperの実行結果は、下記のようになる。

root@raspberrypi:/work/temper# ./temper
11-Feb-2016 21:50,21.074169
root@raspberrypi:/work/temper#

cronには10分毎に実行されるよう、下記で登録。
これで、各日00:00〜23:50までの10分毎の気温が、
1つのテキストファイルに書き込まれる。

*/10 * * * * /work/temper/temper >> /work/temper_log/temp_`date +\%Y\%m\%d`.txt

グラフ作成プログラムについて

今回はgnuplotを使用する。

gnuplotの導入

gnuplotは下記で導入する。

# apt-get install gnuplot

バッチ用ファイル(雛形)の用意

gnuplot用のコマンドを記述したテキストファイルを用意しておくことで、
バッチ処理でグラフ作成ができる。

バッチ用ファイルの中身は下記、

set timefmt "%d-%b-%Y %H:%M"
set xdata time
set datafile separator ","
set format x "%H"
set yrange[5:25]
set title "YYYYMMDD_TEMPER"
unset key

set terminal png
set output "YYYYMMDD.png"
plot "temp_YYYYMMDD.txt" using 1:2 with line

1行目のtimefmtで、日付および時刻部分の形式を指定してあげて、
2行目で「x軸(横方向)は時刻だよ」って定義してあげる。
形式の指定は、下記が参考になるかも。
34.54 Timefmt
今回はデータの区切りにカンマを使用しているため、3行目のdatafile separatorで定義しておく。

実際のグラフ出力を行っているのは、最後の3行部分。
png形式で、YYYYMMDD.pngという名前でファイルを出力させる。
※YYYYMMDDは、後ほど計測日の日付に変更する。

バッチ用ファイルからグラフの作成

上記のバッチ用ファイルのうち、"YYYYMMDD"を計測日の日付に置換してから、
gnuplotでグラフを生成する。
この時、グラフ作成は計測が終わった翌日に実施させる想定のため、計測日はコマンド実行日の前日とする。

こんな感じの処理を、cronで日次で動かせばいけそう。
上記のバッチ用ファイル(雛形)は"gnuplot.txt"

date=`date +%Y%m%d -d '1 day ago'`            #実行日が2016年2月10日なら変数dateには"20160210"
output_file="${date}_gnuplot.txt"
sed -e "s/YYYYMMDD/$date/" gnuplot.txt > $output_file       #バッチ用ファイルの"YYYYMMDD"を、
                                                            #"20160210"に置換させる
gnuplot $output_file        #2016年2月10日の気温グラフを作成し、"20160210.png"として出力する
    

できあがったグラフはこちら。
f:id:com-wing0605:20160211213945p:plain

毎朝、6時ごろに暖房が自動でONにする設定にしているため、
その時間帯は急に部屋の温度が上昇していることがわかる。