USB温度計ってのがAmazonで売ってたので、これを使って室温を計測する。
ただ計測できるだけならつまんないので、MRTG使って温度もグラフ化してみる。
対象はCentOS 6(VM)です。
USB温度計のセットアップ
まずUSB温度計をPCに繋ぐ。
ただ、普通につないでもVMware上の仮想マシンは認識してくれない(かも)ので、設定でUSBを認識させます。(今回の設定はVMware5を利用してます。)
[仮想マシン設定]を開いて、デバイスの[USBコントロール]を選択して、設定画面で[すべてのUSB入力デバイス]がチェック入りにする。
これで、ツールバーにUSBデバイスがアイコンで表示されます。今回買ったUSB温度計を繋いだら、「Microdia TEMPer1V1.2」が表示されてます。
CentOS側でも確認してみると、次のように表示されてました。
# dmesg | grep TEMP input: RDing TEMPer1V1.2 as /class/input/input4 input,hidraw0: USB HID v1.10 Keyboard [RDing TEMPer1V1.2] on usb-0000:02:00.0-2.1 hiddev96,hidraw96: USB HID v1.10 Device [RDing TEMPer1V1.2] on usb-0000:02:00.0-2.1認識されたら、必要なパッケージをインストールします。
# yum -y install libusb-devel gitgitは温度測定コマンドのソースコードが、githubで公開されているのを利用するために使います。
パッケージのインストールが終わったら、ソースコードのチェックアウトをします。
# git clone git://github.com/bitplane/temper.gitこれで現在のディレクトリにtemperディレクトリがチェックアウトされます。
次にソースコードをカスタマイズします。
# vi ./temper/temper.c
以下のように編集。
44行目の 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); に
/ *
* Standalone temperature logger
*
*/
#include <stdio .h="">
#include <time .h="">
#include "pcsensor.h"
/* Calibration adjustments */
/* See http://www.pitt-pladdy.com/blog/_20110824-191017_0100_TEMPer_under_Linux_perl_with_Cacti/ */
static float scale = 1.0287;
static float offset = -0.85;
int main(){
int passes = 0;
float tempc = 0.0000;
do {
usb_dev_handle* lvr_winusb = pcsensor_open();
if (!lvr_winusb) {
/* Open fails sometime, sleep and try again */
sleep(3);
} else {
tempc = pcsensor_get_temperature(lvr_winusb);
pcsensor_close(lvr_winusb);
}
++passes;
}
/* Read fails silently with a 0.0 return, so repeat until not zero
or until we have read the same zero value 3 times (just in case
temp is really dead on zero */
while ((tempc > -0.0001 && tempc < 0.0001) || passes >= 4);
if (!((tempc > -0.0001 && tempc < 0.0001) || passes >= 4)) {
/* Apply calibrations */
tempc = (tempc * scale) + offset;
struct tm *utc;
time_t t;
t = time(NULL);
/*utc = gmtime(&t); */
utc = localtime(&t);
char dt[80];
/* strftime(dt, 80, "%d-%b-%Y %H:%M", utc); */
strftime(dt, 80, "%Y-%m-%d %H:%M:%S", utc);
printf("%s,%f\n", dt, tempc);
fflush(stdout);
return 0;
} else {
return 1;
}
}
}
あとはmakeしたら、コマンドができます。
# cd ./temper # make
温度計の動作確認
上で作ったコマンドの動作確認です。makeしたディレクトリにコマンドが生成されているので、実行するとこんな感じになります。
# ./temper 2012-10-15 22:01:48,27.825012このコマンドを使って、MRTGへのグラフ出力までやってみます。
長くなってしまったので、次の記事にまとめます。
参考:http://www.infiniteloop.co.jp/blog/2012/10/linuxthermometer/