メニュー 閉じる

Blog

Linux & TEMPer1.4で室温測定サーバー

DSC_0334
天下の中国製、USB温度計ドングル。(TEMPerシリーズ最新版?のTEMPer1.4です) 

USB温度計! USB thermometer-528018
(Amazon.co.jp)

ちょうど丸っこい台座がついた延長ケーブルがあったのでこれも購入しました(笑)
 
BUFFALO USB延長ケーブル 2.0対応 スタンド付 2.0m ホワイト BSUC20EDWH
(Amazon.co.jp)

なかなか思ったデバイスIDのものが手に入らないんだけれど、今回はTEMPer1.4という「HIDで認識するタイプ」のものを購入してみました。
Linuxで使うので付属CDはいりませんが、Windows用のsetup.exeとmsiが入ってます。
(そちらの動作はよくわかりません)

とりあえずLinux上では、2013年現在だいたいのディストリビューションでちゃんとTEMPer1.4で認識してくれるみたい。いくつかのLinuxで試したけどdmesgはどれもこんな感じでした。

[71495.072061] usb 3-2: new low-speed USB device number 10 using uhci_hcd
[71495.247636] usb 3-2: New USB device found, idVendor=0c45, idProduct=7401
[71495.247643] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[71495.247648] usb 3-2: Product: TEMPerV1.4
[71495.247652] usb 3-2: Manufacturer: RDing
[71495.266149] input: RDing TEMPerV1.4 as /devices/pci0000:00/0000:00:1d.1/usb3/3-2/3-2:1.0/input/input1283
[71495.266458] hid-generic 0003:0C45:7401.09F5: input,hidraw0: USB HID v1.10 Keyboard [RDing TEMPerV1.4] on usb-0000:00:1d.1-2/input0
[71495.281195] hid-generic 0003:0C45:7401.09F6: hiddev0,hidraw1: USB HID v1.10 Device [RDing TEMPerV1.4] on usb-0000:00:1d.1-2/input1

なかなか感触良かったので、いろんな情報を探してfedoraやUbuntuやらで試したけど、最終的にたどり着いたのは以下のモジュール&Ubuntu12.04でビンゴ。 (上のdmesgもUbuntu12.04です)
※CentOS6.4やfedora19が現状最新。全部は試してないけれど、fedora17ではHIDデバイスとして認識までしていたので、たぶんいけるんじゃないかと思います。
(動いてたマシンをfedora17→Ubuntu12.04に入れ替えた時点で心が折れたので、動作確認はこれだけ^^;)

Setting up TEMPer USB thermometer on CentOS
http://www.omniweb.com/wordpress/?p=915

こちらの参照元(本家&ダウンロードリンク)は下記。
・情報ページ: http://www.penguinsunbound.com/User:goeko/Temp_Sensor
・ダウンロード: http://momtchil.momtchev.com/files/pcsensor-1.0.0-multi.tgz

まずソースをwgetなりでダウンロード。
# wget http://momtchil.momtchev.com/files/pcsensor-1.0.0-multi.tgz
# tar zxvf pcsensor-1.0.0-multi.tgz

tgzを展開すると、udev登録用のサンプルがあるので、/etc/udev/rules.d/に突っ込んでリブートします。
(USBだからドングル差しなおしでもいい?けど、リブート後の動作が保障できないので安全のため。)

# cd pcsensor-1.0.0-multi
# cat 99-tempsensor.rules
SUBSYSTEMS=="usb", ACTION=="add", ATTRS{idVendor}=="0c45", ATTRS{idProduct}=="7401", MODE="666"
# cp -p 99-tempsensor.rules /etc/udev/rules.d/
# shutdown -r 0

デバイスIDがさっき確認したdmesgの出力にあったもの(0c45:7401)と同じじゃないと駄目です。たぶん。
2013/8月現在、市場に出ている「TEMper1.4」はこれになってるはず。

それ以外はHIDで認識するなら、デバイスIDを書き換えてみると動くかもしれないですね。
(中国産なのでお察しください…ですが。でも現状では1.4が最新で、これ以前のものは入手困難っぽい)
※dmesg以外にlsusbの出力も見てみるとヒントになるかも。

リブートが終わって起動したら、

# cd pcsensor-1.0.0-multi
# make clean   ※怪しいのでバイナリは一旦消しましょう。
# make
# ./pcsensor -c

これで、下記のような結果を吐いてくれれば成功。

2013/08/18 01:46:55 Temperature 31.12C

デフォルトの出力結果です。
pcsensor.c のprintfをいじれば数字だけとかも吐けるようになりますね。

ソースをいじったあとは、Perlあたりでラッパーを作り、RDBにINSERTするようなスクリプトを組めば長期間のデータも取れるでしょう。
参考程度ならcronでファイルに吐いてもいいか。
Cacti使う人も同様にちょっと修正すればいけると思います。

ただ、うちではときどき取得に失敗するので、単純にファイルに吐くだけじゃなくて「駄目なときはリトライ」が必要になるかも?と思っているところ…

(エラー出力のとき)
USB interrupt read: Resource temporarily unavailable
Fatal error> USB read failed

でもまあもう一回「pcsensor -c」を叩けばちゃんと結果が取れます。
延長ケーブルが駄目っていう初歩的なケースもあるようなので、一応マシンのUSBポートに直接刺してみるといいかも。(ただし、ドングル自体が金属で包まれているので、直接ぶっさしたらマザーボードと同じ温度になりそうですね…^^;)

とりあえず、上記でなんとか値が取れるのがわかったので、今後は取得した温度をWebサーバに送ってWebからグラフを見れるようにしたいなぁ、なんて画策をしています。
あと、IrDAポートも用意してエアコン自動制御とか…夢が広がりんぐ(笑)

とにかく情報が少ないので、少しでも参考になれば幸いです。
まあ、買ってきても即ゴミ箱行きって事ももありうるので、一応そういう覚悟をしてから買いましょう。
(中国製だけに…)

にゃー。