RaspberyPiで温度を計測、日次でグラフを作る【gnuplot】
※2019/05/03 商品リンクを修正
USB温度計とPCを組み合わせて、部屋の気温の推移を計測する。
日毎のグラフを作成し、サーバーへアップロードする仕組みを実装した記録。
使うものたち
常時、電源をONさせる必要があるため、RaspberyPiを使用。
OSはRaspbianを使用
USB温度計は、amazonで低価格だった、下記商品を購入。
USB温度計! USB thermometer-528018
- 出版社/メーカー: OEM
- メディア: エレクトロニクス
- 購入: 5人 クリック: 48回
- この商品を含むブログ (3件) を見る
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用のコマンドを記述したテキストファイルを用意しておくことで、
バッチ処理でグラフ作成ができる。
バッチ用ファイルの中身は下記、
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"として出力する
できあがったグラフはこちら。
毎朝、6時ごろに暖房が自動でONにする設定にしているため、
その時間帯は急に部屋の温度が上昇していることがわかる。