上海問屋で販売しているUSB温度計DNSB-35137と同じものであろうTEMPer goldをLinuxサーバにつなげてみた。
CentOS5.8では、以下の様な認識となりました。
2 | usb 3-1: new low speed USB device using uhci_hcd and address 2 |
4 | input: RDing TEMPer1V1.2 as /class/input/input3 |
5 | input,hidraw0: USB HID v1.10 Keyboard [RDing TEMPer1V1.2] on usb-0000:00:1d.1-1 |
6 | hiddev96,hidraw96: USB HID v1.10 Device [RDing TEMPer1V1.2] on usb-0000:00:1d.1-1 |
2 | Bus 003 Device 002: ID 0c45:7401 Microdia |
7 | bDeviceClass 0 (Defined at Interface level) |
11 | idVendor 0x0c45 Microdia |
15 | iProduct 2 TEMPer1V1.2 |
18 | Configuration Descriptor: |
34 | bInterfaceClass 3 Human Interface Device |
35 | bInterfaceSubClass 1 Boot Interface Subclass |
36 | bInterfaceProtocol 1 Keyboard |
38 | HID Device Descriptor: |
42 | bCountryCode 0 Not supported |
44 | bDescriptorType 34 Report |
51 | bEndpointAddress 0x81 EP 1 IN |
53 | Transfer Type Interrupt |
56 | wMaxPacketSize 0x0008 1x 8 bytes |
64 | bInterfaceClass 3 Human Interface Device |
65 | bInterfaceSubClass 1 Boot Interface Subclass |
66 | bInterfaceProtocol 2 Mouse |
68 | HID Device Descriptor: |
72 | bCountryCode 0 Not supported |
74 | bDescriptorType 34 Report |
81 | bEndpointAddress 0x82 EP 2 IN |
83 | Transfer Type Interrupt |
86 | wMaxPacketSize 0x0008 1x 8 bytes |
(2013/01/17追記: iSerialは「0」固定なので、個体識別ができません。USBのBUS/DEVICEアドレスの違いで識別する必要があります)
温度を取得するには、「http://www.isp-sl.com/pcsensor-0.0.1.tgz」が一番簡単だと思います。
ドライバ等は特にインストールせず、標準HIDドライバを利用して操作をおこなってくれます。
(2013/01/24追記: 上記のpcsensor-0.0.1.tgzを元に改良したドライバを公開中 → 改良版ドライバ)
配布tgzの中には、ソースファイルと、glibc2.7環境用の32bitバイナリが含まれています。
2 | 99-tempsensor.rules Makefile pcsensor pcsensor.c |
4 | pcsensor: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), not stripped |
pcsensorを実行してみてエラーにならないか確認します。
2 | ./pcsensor: /lib/libc.so.6: version `GLIBC_2.7' not found (required by ./pcsensor) |
上記のようにエラーとなるようであれば、コンパイルしなおします。
2 | rm : remove 通常ファイル `pcsensor'? y |
4 | cc -DUNIT_TEST -o pcsensor pcsensor.c -lusb |
これで改めて実行してみます。
2 | 2012/12/25 14:36:27 Temperature 74.08F 23.38C |
pcsensorコマンドはいくつかオプションがあります。
6 | -l[n] loop every 'n' seconds, default value is 5s |
7 | -c output only in Celsius |
8 | -f output only in Fahrenheit |
9 | -m output for mrtg integration |
・詳細表示
2 | usb_set_debug: Setting debugging level to 255 (on) |
3 | usb_os_init: Found USB VFS at /dev/bus/usb |
4 | usb_os_find_busses: Found 003 |
5 | usb_os_find_busses: Found 002 |
6 | usb_os_find_busses: Found 001 |
7 | usb_os_find_devices: Found 001 on 003 |
8 | usb_os_find_devices: Found 002 on 003 |
9 | skipped 1 class/vendor specific interface descriptors |
10 | skipped 1 class/vendor specific interface descriptors |
11 | error obtaining child information: Inappropriate ioctl for device |
12 | usb_os_find_devices: Found 001 on 002 |
13 | usb_os_find_devices: Found 001 on 001 |
14 | lvr_winusb with Vendor Id: c45 and Product Id: 7401 found. |
15 | USB error: could not detach kernel driver from interface 0: No data available |
16 | Device already detached |
17 | USB error: could not detach kernel driver from interface 1: No data available |
18 | Device already detached |
19 | 01 01 6f 20 64 61 74 61 |
20 | 01 80 33 01 00 00 00 00 |
21 | 80 02 17 80 65 72 31 46 |
22 | 01 82 77 01 00 00 00 00 |
23 | 82 01 00 80 65 72 31 46 |
24 | 01 86 ff 01 00 00 00 00 |
25 | 54 45 4d 50 65 72 31 46 |
26 | 31 2e 31 50 65 72 31 46 |
27 | 01 80 33 01 00 00 00 00 |
28 | 80 02 17 60 65 72 31 46 |
29 | 2012/12/25 14:37:42 Temperature 74.08F 23.38C |
・摂氏のみ表示
2 | 2012/12/25 14:37:57 Temperature 23.50C |
・華氏のみ出力
2 | 2012/12/25 14:38:02 Temperature 74.30F |
・MRTG向けの出力
githubのedorfaus / TEMPeredは、Cmake 2.8以上を要求してきており、CentOS5.8環境はCmake 2.6.4なのでコンパイルできない、という状態だったので、断念しました。
もうちょっと測定してみた結果について「USB温度計で測定してみたメモ」にて記載しています。