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は警告温度の設定となる。
出来上がりはこんな感じ。
TEMPerについて参考にさせて頂きました。
ありがとうございます。
relavak Labs の方にも post しましたが、
pcsensor で時々出る、USBエラーが煩わしいので、プログラムを改造してみました。
http://toshiokk.dip.jp:8008/pcsensor-1.0.3.tgz
よろしければ、ダウンロードして、使用してみて頂けないでしょうか。
何千回もテストを繰り替えして見ましたが、温度取得に関してはエラーが出ていません。
“TEMPerV1.4” という文字列が化ける事は時々あります。
Posted at 2014.08.24 21:45 by Toshio Koike