上海問屋で販売している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温度計で測定してみたメモ」にて記載しています。