上海問屋で販売しているUSB温度計DNSB-35137と同じものであろうTEMPer goldをLinuxサーバにつなげてみた。
CentOS5.8では、以下の様な認識となりました。
# dmesg|tail
usb 3-1: new low speed USB device using uhci_hcd and address 2
usb 3-1: configuration #1 chosen from 1 choice
input: RDing TEMPer1V1.2 as /class/input/input3
input,hidraw0: USB HID v1.10 Keyboard [RDing TEMPer1V1.2] on usb-0000:00:1d.1-1
hiddev96,hidraw96: USB HID v1.10 Device [RDing TEMPer1V1.2] on usb-0000:00:1d.1-1
# lsusb -v
Bus 003 Device 002: ID 0c45:7401 Microdia
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0c45 Microdia
idProduct 0x7401
bcdDevice 0.01
iManufacturer 1 RDing
iProduct 2 TEMPer1V1.2
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 59
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
Remote Wakeup
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 1 Boot Interface Subclass
bInterfaceProtocol 1 Keyboard
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.10
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 65
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 10
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 1 Boot Interface Subclass
bInterfaceProtocol 2 Mouse
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.10
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 41
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
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バイナリが含まれています。
# ls
99-tempsensor.rules Makefile pcsensor pcsensor.c
# file pcsensor
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を実行してみてエラーにならないか確認します。
# ./pcsensor
./pcsensor: /lib/libc.so.6: version `GLIBC_2.7' not found (required by ./pcsensor)
#
上記のようにエラーとなるようであれば、コンパイルしなおします。
# rm pcsensor
rm: remove 通常ファイル `pcsensor'? y
# make
cc -DUNIT_TEST -o pcsensor pcsensor.c -lusb
#
これで改めて実行してみます。
# ./pcsensor
2012/12/25 14:36:27 Temperature 74.08F 23.38C
#
pcsensorコマンドはいくつかオプションがあります。
# ./pcsensor -h
pcsensor version 0.0.1
Aviable options:
-h help
-v verbose
-l[n] loop every 'n' seconds, default value is 5s
-c output only in Celsius
-f output only in Fahrenheit
-m output for mrtg integration
#
・詳細表示
# ./pcsensor -v
usb_set_debug: Setting debugging level to 255 (on)
usb_os_init: Found USB VFS at /dev/bus/usb
usb_os_find_busses: Found 003
usb_os_find_busses: Found 002
usb_os_find_busses: Found 001
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 002 on 003
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 002
usb_os_find_devices: Found 001 on 001
lvr_winusb with Vendor Id: c45 and Product Id: 7401 found.
USB error: could not detach kernel driver from interface 0: No data available
Device already detached
USB error: could not detach kernel driver from interface 1: No data available
Device already detached
01 01 6f 20 64 61 74 61
01 80 33 01 00 00 00 00
80 02 17 80 65 72 31 46
01 82 77 01 00 00 00 00
82 01 00 80 65 72 31 46
01 86 ff 01 00 00 00 00
54 45 4d 50 65 72 31 46
31 2e 31 50 65 72 31 46
01 80 33 01 00 00 00 00
80 02 17 60 65 72 31 46
2012/12/25 14:37:42 Temperature 74.08F 23.38C
#
・摂氏のみ表示
# ./pcsensor -c
2012/12/25 14:37:57 Temperature 23.50C
#
・華氏のみ出力
# ./pcsensor -f
2012/12/25 14:38:02 Temperature 74.30F
#
・MRTG向けの出力
# ./pcsensor -m
23.50
23.50
14:38
pcsensor
#
githubのedorfaus / TEMPeredは、Cmake 2.8以上を要求してきており、CentOS5.8環境はCmake 2.6.4なのでコンパイルできない、という状態だったので、断念しました。
もうちょっと測定してみた結果について「USB温度計で測定してみたメモ」にて記載しています。