TEMPerのUSB温度計をLinuxにつなげた

上海問屋で販売しているUSB温度計DNSB-35137と同じものであろうTEMPer goldをLinuxサーバにつなげてみた。

CentOS5.8では、以下の様な認識となりました。

1# dmesg|tail
2usb 3-1: new low speed USB device using uhci_hcd and address 2
3usb 3-1: configuration #1 chosen from 1 choice
4input: RDing TEMPer1V1.2 as /class/input/input3
5input,hidraw0: USB HID v1.10 Keyboard [RDing TEMPer1V1.2] on usb-0000:00:1d.1-1
6hiddev96,hidraw96: USB HID v1.10 Device [RDing TEMPer1V1.2] on usb-0000:00:1d.1-1
1# lsusb -v
2Bus 003 Device 002: ID 0c45:7401 Microdia
3Device Descriptor:
4  bLength                18
5  bDescriptorType         1
6  bcdUSB               2.00
7  bDeviceClass            0 (Defined at Interface level)
8  bDeviceSubClass         0
9  bDeviceProtocol         0
10  bMaxPacketSize0         8
11  idVendor           0x0c45 Microdia
12  idProduct          0x7401
13  bcdDevice            0.01
14  iManufacturer           1 RDing
15  iProduct                2 TEMPer1V1.2
16  iSerial                 0
17  bNumConfigurations      1
18  Configuration Descriptor:
19    bLength                 9
20    bDescriptorType         2
21    wTotalLength           59
22    bNumInterfaces          2
23    bConfigurationValue     1
24    iConfiguration          0
25    bmAttributes         0xa0
26      Remote Wakeup
27    MaxPower              100mA
28    Interface Descriptor:
29      bLength                 9
30      bDescriptorType         4
31      bInterfaceNumber        0
32      bAlternateSetting       0
33      bNumEndpoints           1
34      bInterfaceClass         3 Human Interface Device
35      bInterfaceSubClass      1 Boot Interface Subclass
36      bInterfaceProtocol      1 Keyboard
37      iInterface              0
38        HID Device Descriptor:
39          bLength                 9
40          bDescriptorType        33
41          bcdHID               1.10
42          bCountryCode            0 Not supported
43          bNumDescriptors         1
44          bDescriptorType        34 Report
45          wDescriptorLength      65
46         Report Descriptors:
47           ** UNAVAILABLE **
48      Endpoint Descriptor:
49        bLength                 7
50        bDescriptorType         5
51        bEndpointAddress     0x81  EP 1 IN
52        bmAttributes            3
53          Transfer Type            Interrupt
54          Synch Type               None
55          Usage Type               Data
56        wMaxPacketSize     0x0008  1x 8 bytes
57        bInterval              10
58    Interface Descriptor:
59      bLength                 9
60      bDescriptorType         4
61      bInterfaceNumber        1
62      bAlternateSetting       0
63      bNumEndpoints           1
64      bInterfaceClass         3 Human Interface Device
65      bInterfaceSubClass      1 Boot Interface Subclass
66      bInterfaceProtocol      2 Mouse
67      iInterface              0
68        HID Device Descriptor:
69          bLength                 9
70          bDescriptorType        33
71          bcdHID               1.10
72          bCountryCode            0 Not supported
73          bNumDescriptors         1
74          bDescriptorType        34 Report
75          wDescriptorLength      41
76         Report Descriptors:
77           ** UNAVAILABLE **
78      Endpoint Descriptor:
79        bLength                 7
80        bDescriptorType         5
81        bEndpointAddress     0x82  EP 2 IN
82        bmAttributes            3
83          Transfer Type            Interrupt
84          Synch Type               None
85          Usage Type               Data
86        wMaxPacketSize     0x0008  1x 8 bytes
87        bInterval              10

(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バイナリが含まれています。

1# ls
299-tempsensor.rules  Makefile  pcsensor  pcsensor.c
3# file pcsensor
4pcsensor: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), not stripped
5#

pcsensorを実行してみてエラーにならないか確認します。

1# ./pcsensor
2./pcsensor: /lib/libc.so.6: version `GLIBC_2.7' not found (required by ./pcsensor)
3#

上記のようにエラーとなるようであれば、コンパイルしなおします。

1# rm pcsensor
2rm: remove 通常ファイル `pcsensor'? y
3# make
4cc -DUNIT_TEST -o pcsensor pcsensor.c -lusb
5#

これで改めて実行してみます。

1# ./pcsensor
22012/12/25 14:36:27 Temperature 74.08F 23.38C
3#

pcsensorコマンドはいくつかオプションがあります。

1# ./pcsensor -h
2pcsensor version 0.0.1
3      Aviable options:
4          -h help
5          -v verbose
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
10#

・詳細表示

1# ./pcsensor -v
2usb_set_debug: Setting debugging level to 255 (on)
3usb_os_init: Found USB VFS at /dev/bus/usb
4usb_os_find_busses: Found 003
5usb_os_find_busses: Found 002
6usb_os_find_busses: Found 001
7usb_os_find_devices: Found 001 on 003
8usb_os_find_devices: Found 002 on 003
9skipped 1 class/vendor specific interface descriptors
10skipped 1 class/vendor specific interface descriptors
11error obtaining child information: Inappropriate ioctl for device
12usb_os_find_devices: Found 001 on 002
13usb_os_find_devices: Found 001 on 001
14lvr_winusb with Vendor Id: c45 and Product Id: 7401 found.
15USB error: could not detach kernel driver from interface 0: No data available
16Device already detached
17USB error: could not detach kernel driver from interface 1: No data available
18Device already detached
1901 01 6f 20 64 61 74 61
2001 80 33 01 00 00 00 00
2180 02 17 80 65 72 31 46
2201 82 77 01 00 00 00 00
2382 01 00 80 65 72 31 46
2401 86 ff 01 00 00 00 00
2554 45 4d 50 65 72 31 46
2631 2e 31 50 65 72 31 46
2701 80 33 01 00 00 00 00
2880 02 17 60 65 72 31 46
292012/12/25 14:37:42 Temperature 74.08F 23.38C
30#

・摂氏のみ表示

1# ./pcsensor -c
22012/12/25 14:37:57 Temperature 23.50C
3#

・華氏のみ出力

1# ./pcsensor -f
22012/12/25 14:38:02 Temperature 74.30F
3#

・MRTG向けの出力

1# ./pcsensor -m
223.50
323.50
414:38
5pcsensor
6#

githubのedorfaus / TEMPeredは、Cmake 2.8以上を要求してきており、CentOS5.8環境はCmake 2.6.4なのでコンパイルできない、という状態だったので、断念しました。


もうちょっと測定してみた結果について「USB温度計で測定してみたメモ」にて記載しています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

StatCounter - Free Web Tracker and Counter