我が家の室温をモニタリングしてみました。
980円のUSB温度計を使ってLinuxから室温を計測する | 株式会社インフィニットループ技術ブログ
ほとんど上記事をなぞりつつ、出力結果をGnuplotでグラフにしてみました。
環境
USB温度センサはこれ。
980円と言いつつも、配送料もかかるのでなんだかんだで1500円くらいかかります。eBayならもっと安く買えるそうですけど。レビューは散々ですが、Linuxでちゃんと使えるので問題ありません。で、そのほかの環境は以下。
マシン:HP ProLiant MicroServer N40L
OS:Ubuntu Server 12.04
インストールと実行
ソフトウェアのインストール をします。
$ sudo apt-get install build-essential libusb-0.1.4 libusb-dev git
$ git clone "https://github.com/bitplane/temper.git"
temperディレクトリができるのでその中でmakeを行うのですけれど、その前に時刻を日本の標準時間(JST)にします。具体的にはtemper.cをいじります。emacsでもviでもお好みのエディタでいじります。
41行目
utc = gmtime(&t); → utc = localtime(&t);
47行目
strftime(dt, 80, “%d-%b-%Y %H:%M”, utc); → strftime(dt, 80, “%Y-%m-%d %H:%M:%S”, utc);
ここのstrftimeで指定した形式で時刻が表示されるので、この部分は適宜好きなようにするとよいと思います。上の例だと、こんな感じです。↓
2013-04-22 20:41:32,17.473719
一列目が日時、二列目が温度ですね。実際に実行するには、makeでインストールした後にtemperコマンドを実行します。
$ make
$ sudo ./temper
時刻が表示されます。sudo権限じゃないとダメみたいです。
$ sudo ./log.sh
log.shという実に簡単なシェルスクリプトも用意されていて、5秒ごとにtemperを実行し続けます。中身は以下。
log.sh
#!/bin/bash
while [ 1 ]
do
./temper sleep 5s
done
なお、もし実行権限なかったら、chmod u+x temperとかで権限を与えてください。せっかくですから、ログとして残しましょう。お手軽にバックグラウンドでlog.shを実行して、その出力をテキストファイルに出力するだけでもいい感じでログが取れます。
$ sudo ./log.sh > 20130422.log &
終わらせたくなったらpsで検索し、PIDを探し当ててkillします。
$ ps ax | grep log.sh
2763 ? S 0:00 sudo ./log.sh
2764 ? S 8:56 /bin/bash ./log.sh
30873 pts/3 S+ 0:00 grep --color=auto log.sh
$ kill -KILL 2763
$ kill -KILL 2764
グラフ化
せっかくなので軽くグラフ化します。例として、log.shの結果をひたすら出力した20130410.logというファイルをグラフ化するとします。使用ソフトはRubyとGnuplot。RubyはGnuplotを使うのに使ってるだけです。グラフ化するのはGnuplot。Gnuplotはsudo apt-getでインストールできます。RubyはUbuntuだと標準でついてたような。なかったらこれも適当にapt-getでインスコできます。まずRubyスクリプト。
plot.rb
#!/usr/bin/ruby
IO.popen("gnuplot","w"){|io|
io.puts "load 'set.gp'"
io.puts "set term png"
io.puts "set output 'now.png'"
io.puts "p '#{ARGV[0]}' u 1:2 w l" io.puts "set output"
}
ログのテキストファイルを引数にすると、now.pngという名前の画像で出力。次に、Gnuplotの設定ファイルset.gp。
set.gpset datafile separator ","
set xdata timeset timefmt "%Y-%m-%d %H:%M:%S"
set format x "%m/%d\n%H:%M"
set mxtics 2
set mytics 2
set grid xtics ytics mxtics mytics
set yrange [10:25]
set timefmtは、temper.cのstrftimeと同じように合わせます。set yrangeは表示する温度の範囲です。なければオートスケールで勝手に調整されます。set format xは、日時をどういう形式で出力するか、です。
$ sudo ./log.sh > 20130410.log &
$ ruby plot.rb 20130410.log
これで、グラフ化させることができます。出力ファイルは上記の例だとnow.pngです。常にグラフ化させたいなら、一番簡単なのは $ watch -n 10 "ruby plot.rb 20130410.log" とかですかね。あるいはシェルスクリプトのlog.shにruby plot.rb 〜の一文を忍ばせてもよさげです。結果は↓みたいな画像になります。
二週間くらい計測してみました。楽しいです。移動平均とか、日単位で比べたりとか、いろいろできそうなことはありますね。でもとりあえず今はこんなとこで。
コメント