« | »

2012.02.16

USB HID TEMPerで温度の記録 (転記)

楽天だったか amazonだったかでUSBの温度計測モジュール(そんなたいそうなもんか?)を以前安く手に入れたのにほったらかしだったので何とか UNIX系で使えないか色々探してみた。FreeBSDはこう言うのは大体駄目だから、取り敢えずは Linux系で。いつものように Fedoraのテスト機でごそごそ。

元々は USB-Serialだったらしいけど、手に入れたのは HIDのバージョン。添付の CDやメーカーサイトに行っても Linuxの HIDドライバは無いみたい。で、見つけたのが relavak Labsと言うページ。どうやら、そのスレッドの中の Crayさんの pcsensor-x.x.xが使える様子なのでテスト。’, ‘取り敢えず、手っ取り早く温度を取るには pcsensor-1.0.1.tgzを取ってきて、libusb1-devと libhid-devを yumなり aptなりでシステムに放り込んで make。出来上がった pcsensorを実行するとこんな感じ

2012/01/09 22:11:32 Temperature 65.08F 18.38C

ふむふむ。センサーひとつしか表示できないのね。
うちはセンサーいくつかあるので(ちょっとたくさん買ってしまった:ase: 10個くらい)同じスレッドにある pcsensor-multi-1.0.0を make。

2012/01/09 22:14:46 Temperature 66.31F 19.06C
2012/01/09 22:14:46 Temperature 65.08F 18.38C
2012/01/09 22:14:46 Temperature 65.53F 18.62C

をを、良い感じ。センサーをサーバールームのあちこちに貼って温度監視をしてみよう。

室温が取れるようになったので muninでグラフ化したくなるのが人の常と言うことで muninの pluginを書いてみた。ただここでちょっと問題が。
relavak Labsのページでも時々 USBのタイミングかなんかで device busyや out of rangeが返ってきてちゃんと値が取れないことがあるようなことが書いてある。これはまだ解決していない。さらに multiの場合、どのデバイスがどれか判定できないそうな。これは結構グラフ化するには致命的。と言うことで値取得の際にチェックしてきちんとデバイスの数だけ値を取るように書いてみた。

#!/bin/sh
UNIT=1
if [ "$unit"  ]; then UNIT=$unit ; fi

if [ "$1" = "config" ]; then
	MODEL="Hid TEMPer1.2"
	LOCATION="Hid TEMPer PC Sensor"
	echo "graph_title $LOCATION - Temperatur"
	echo "graph_args --base 1000"
	echo "graph_vlabel Celsius"
	echo "graph_category sensors"
	echo "graph_info This graph shows Temperatur data from $LOCATION"

	i=1
	while [ $i -le $UNIT ]
		do
			echo "temp${i}.label temp$i"
			echo "temp${i}.type GAUGE"
			echo "temp${i}.info Celsius."
			echo "temp${i}.max 50"
			echo "temp${i}.min -10"
			if [ -n "$warning" ]; then echo "temp${i}.warning $warning"; fi
			if [ -n "$critical" ]; then echo "temp${i}.critical $critical"; fi
			i=`expr $i + 1`
		done
	exit 0
fi

while true
	do
		TEMPER=`while true ; do /usr/local/bin/pcsensor-multi 2>/dev/null ; if [ $? -eq 0 ]; then break;fi;done | awk '/[0-9]\.[0-9].C$/{print $NF}'`

		result=`echo "$TEMPER" | grep -c "[0-9]\.[0-9].C$"`
			if [ $result -eq $UNIT ]
				then break
			fi
	done

echo -ne "$TEMPER" | awk '{sub(/C$/,"");print "temp"NR".value "$NF}'

plugin-conf.dには

[hid-temper]
user root
env.unit 3
env.warning 35
env.critical 40

を書いて /etc/init.d/munin-node restartで OK。
env.unitは温度計モジュールの数(指定無しだと 1個だけ)。env.warningと env.criticalは警告温度の設定となる。
出来上がりはこんな感じ。

No tags for this post.

Trackback URL

Comment & Trackback

TEMPerについて参考にさせて頂きました。
ありがとうございます。

relavak Labs の方にも post しましたが、
pcsensor で時々出る、USBエラーが煩わしいので、プログラムを改造してみました。

http://toshiokk.dip.jp:8008/pcsensor-1.0.3.tgz

よろしければ、ダウンロードして、使用してみて頂けないでしょうか。
何千回もテストを繰り替えして見ましたが、温度取得に関してはエラーが出ていません。
“TEMPerV1.4” という文字列が化ける事は時々あります。

Comment feed

Comment





XHTML: You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*
:-[ (B) (^) (P) (@) (O) (D) :-S ;-( (C) (&) :-$ (E) (~) (K) (I) (L) (8) :-O (T) (G) (F) :-( (H) :-) (*) :-D (N) (Y) :-P (U) (W) ;-)

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)