LinuxサーバにUSB温度計を2つつけてみた

dealextremeから、USB温度計が届いたので、Linuxサーバに複数取り付けてみた。
(ちなみに、上海問屋では欠品ですが、Dealextremeの公式ショップで買うと送料込みで$9.2で、3週間~4週間で到着します。)

いままでは、Relavk Labsの「TEMPer Temperature Sensor Linux Driver」のCrayさんコメントにある「pcsensor-0.0.1.tgz」を使っていましたが、これは1つのみの対応でした。
(ちなみに、Crayさんが「pcsensor-1.0.1.tgz」にアップデートしたとコメントしていましたが、相変わらず1個のみの対応でした。http://www.isp-sl.com/pcsensor-1.0.1.tgz

複数のUSB温度計をつけた場合に対応しているものを探したところ、同じコメント欄に発見しました。
Momtchil Momtchevさんが「pcsensor-1.0.0-multi.tgz」を作ったとコメントしています。
コメント内のリンク先は消えていましたが、「A modified TemperUSB driver that supports multiple devices」にて配布されていました。

(2013/01/24追記: デバイス指定ができる改良版をpcsensor-1.0.2 for TEMPerV1.2 with multi device supportにて公開中)

 $  ./pcsensor
2013/01/16 18:30:12 Temperature 77.45F 25.25C
2013/01/16 18:30:12 Temperature 91.18F 32.88C
$

が・・・デバイスの指定はできないようです。

詳細オプションをつけるとこんな感じです。

$ ./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 004 on 003
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 001
lvr_winusb with Vendor Id: c45 and Product Id: 7401 found.
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
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 19 40 65 72 46 31
01 82 77 01 00 00 00 00
82 01 00 40 65 72 46 31
01 86 ff 01 00 00 00 00
54 45 4d 50 65 72 46 31
2e 32 4d 50 65 72 46 31
01 01 4a d6 ff 7f 00 00
01 80 33 01 00 00 00 00
80 02 20 e0 65 72 46 31
01 82 77 01 00 00 00 00
82 01 00 e0 65 72 46 31
01 86 ff 01 00 00 00 00
54 45 4d 50 65 72 46 31
2e 32 4d 50 65 72 46 31
01 80 33 01 00 00 00 00
80 02 19 40 65 72 46 31
2013/01/16 18:30:49 Temperature 77.45F 25.25C
01 80 33 01 00 00 00 00
80 02 20 e0 65 72 46 31
2013/01/16 18:30:49 Temperature 91.18F 32.88C
$

USB温度計で測定してみたメモ

Linux上でpcsensorコマンド(http://www.isp-sl.com/pcsensor-0.0.1.tgz)を使って、何度か手動計測をおこなった。
その結果、後述のような感じで出力が得られた。

気になった点
・0.12度~0.13度ぐらいのきざみ幅で上昇している?
・時々取得に失敗している

取得に失敗する点は、まぁ、仕方ない、ということにして、刻み幅の件について、ソースファイルを確認してみた。

・温度取得関連部分

*tempC = temperature * (125.0 / 32000.0);

摂氏に変換する際に、125/32000と実行しているので、刻み幅の0.12~0.13というのは、そこらへんから来ているということでよさそう。

華氏表示については、摂氏で取得した値からコンバートしているだけだった。

(9.0 / 5.0 * tempc + 32.0)

以下は、取得した結果。

# ./pcsensor 
2012/12/26 14:37:52 Temperature 74.75F 23.75C
# ./pcsensor 
2012/12/26 14:37:53 Temperature 74.75F 23.75C
# ./pcsensor 
2012/12/27 14:16:06 Temperature 74.30F 23.50C
# ./pcsensor 
2012/12/27 14:16:08 Temperature 74.30F 23.50C
# ./pcsensor 
2012/12/27 14:16:19 Temperature 74.75F 23.75C
# ./pcsensor 
2012/12/27 14:16:21 Temperature 74.75F 23.75C
# ./pcsensor 
2012/12/27 14:16:24 Temperature 74.75F 23.75C
# ./pcsensor 
USB interrupt read: Resource temporarily unavailable
Fatal error> USB read failed
# ./pcsensor 
2012/12/27 14:16:28 Temperature 75.88F 24.38C
# ./pcsensor 
2012/12/27 14:16:30 Temperature 76.33F 24.62C
# ./pcsensor 
2012/12/27 14:16:32 Temperature 76.78F 24.88C
# ./pcsensor 
2012/12/27 14:16:34 Temperature 77.22F 25.12C
# ./pcsensor 
2012/12/27 14:16:36 Temperature 77.90F 25.50C
# ./pcsensor 
2012/12/27 14:16:39 Temperature 78.58F 25.88C
# ./pcsensor 
2012/12/27 14:16:44 Temperature 79.70F 26.50C
# ./pcsensor 
2012/12/27 14:16:50 Temperature 80.60F 27.00C
# ./pcsensor 
2012/12/27 14:16:52 Temperature 81.05F 27.25C
# ./pcsensor 
2012/12/27 14:16:58 Temperature 81.95F 27.75C
# ./pcsensor 
2012/12/27 14:17:01 Temperature 82.18F 27.88C
# ./pcsensor 
2012/12/27 14:17:03 Temperature 82.62F 28.12C
# ./pcsensor 
2012/12/27 14:17:09 Temperature 83.08F 28.38C
# ./pcsensor 
2012/12/27 14:17:10 Temperature 83.30F 28.50C
# ./pcsensor 
2012/12/27 14:17:12 Temperature 83.53F 28.62C
# ./pcsensor 
USB interrupt read: Resource temporarily unavailable
Fatal error> USB read failed
# ./pcsensor 
Couldn't find the USB device, Exiting
# ./pcsensor 
2012/12/27 14:17:20 Temperature 84.20F 29.00C
# ./pcsensor 
2012/12/27 14:17:23 Temperature 84.43F 29.12C
# ./pcsensor 
2012/12/27 14:17:25 Temperature 84.65F 29.25C
# ./pcsensor 
2012/12/27 14:17:29 Temperature 84.88F 29.38C
# ./pcsensor 
2012/12/27 14:17:30 Temperature 85.10F 29.50C
# ./pcsensor 
2012/12/27 14:17:36 Temperature 85.33F 29.62C
# ./pcsensor 
2012/12/27 14:17:38 Temperature 85.55F 29.75C
# ./pcsensor 
2012/12/27 14:17:47 Temperature 86.00F 30.00C
# ./pcsensor 
2012/12/27 14:17:49 Temperature 86.22F 30.12C
# ./pcsensor 
2012/12/27 14:17:50 Temperature 86.22F 30.12C
# ./pcsensor 
2012/12/27 14:17:52 Temperature 86.45F 30.25C
# ./pcsensor 
2012/12/27 14:17:54 Temperature 86.45F 30.25C
# ./pcsensor 
2012/12/27 14:17:56 Temperature 86.45F 30.25C
# ./pcsensor 
2012/12/27 14:17:58 Temperature 86.68F 30.38C
# ./pcsensor 
2012/12/27 14:18:03 Temperature 86.90F 30.50C
# ./pcsensor 
USB interrupt read: Resource temporarily unavailable
Fatal error> USB read failed
# ./pcsensor 
2012/12/27 14:18:07 Temperature 87.12F 30.62C
# ./pcsensor 
2012/12/27 14:18:08 Temperature 87.12F 30.62C
# ./pcsensor 
2012/12/27 14:18:13 Temperature 87.35F 30.75C
# ./pcsensor 
2012/12/27 14:18:16 Temperature 87.58F 30.88C
# ./pcsensor 
2012/12/27 14:18:20 Temperature 87.58F 30.88C
# ./pcsensor 
2012/12/27 14:18:22 Temperature 87.80F 31.00C
# ./pcsensor 
2012/12/27 14:18:23 Temperature 87.80F 31.00C
# ./pcsensor 
2012/12/27 14:18:24 Temperature 87.80F 31.00C
# ./pcsensor 
2012/12/27 14:18:25 Temperature 87.80F 31.00C
# ./pcsensor 
2012/12/27 14:18:32 Temperature 88.03F 31.12C
# ./pcsensor 
2012/12/27 14:18:35 Temperature 88.25F 31.25C
# ./pcsensor 
2012/12/27 14:18:36 Temperature 88.25F 31.25C
# ./pcsensor 
2012/12/27 14:18:38 Temperature 88.25F 31.25C
# ./pcsensor 
2012/12/27 14:18:40 Temperature 88.47F 31.38C
# ./pcsensor 
2012/12/27 14:18:41 Temperature 88.47F 31.38C
# 
# ./pcsensor 
USB interrupt read: Resource temporarily unavailable
Fatal error> USB read failed
# ./pcsensor 
Couldn't find the USB device, Exiting
# ./pcsensor 
2012/12/27 14:18:45 Temperature 88.47F 31.38C
# 
# ./pcsensor 
2012/12/27 14:18:47 Temperature 88.47F 31.38C
# 
# ./pcsensor 
2012/12/27 14:18:48 Temperature 88.70F 31.50C
# 
# ./pcsensor 
2012/12/27 14:18:53 Temperature 88.70F 31.50C
# ./pcsensor 
2012/12/27 14:18:55 Temperature 88.70F 31.50C
# ./pcsensor 
2012/12/27 14:18:56 Temperature 88.70F 31.50C
# ./pcsensor 
2012/12/27 14:18:56 Temperature 88.70F 31.50C
# ./pcsensor 
2012/12/27 14:18:57 Temperature 88.93F 31.62C
# ./pcsensor 
2012/12/27 14:18:59 Temperature 88.93F 31.62C
# ./pcsensor 
2012/12/27 14:18:59 Temperature 88.93F 31.62C
# ./pcsensor 
2012/12/27 14:19:00 Temperature 88.93F 31.62C
# ./pcsensor 
2012/12/27 14:19:06 Temperature 88.93F 31.62C
# ./pcsensor 
2012/12/27 14:19:08 Temperature 89.15F 31.75C
# ./pcsensor 
2012/12/27 14:19:16 Temperature 89.15F 31.75C
# ./pcsensor 
2012/12/27 14:19:18 Temperature 89.15F 31.75C
# ./pcsensor 
USB interrupt read: Resource temporarily unavailable
Fatal error> USB read failed
# ./pcsensor 
Couldn't find the USB device, Exiting
# ./pcsensor 
2012/12/27 14:19:22 Temperature 89.38F 31.88C
# ./pcsensor 
2012/12/27 14:19:28 Temperature 89.38F 31.88C
# ./pcsensor 
2012/12/27 14:19:29 Temperature 89.38F 31.88C
# ./pcsensor 
2012/12/27 14:19:30 Temperature 89.38F 31.88C
# ./pcsensor 
2012/12/27 14:19:31 Temperature 89.38F 31.88C
# ./pcsensor 
2012/12/27 14:19:31 Temperature 89.38F 31.88C
# ./pcsensor 
2012/12/27 14:19:33 Temperature 89.38F 31.88C
# ./pcsensor 
2012/12/27 14:19:34 Temperature 89.38F 31.88C
# ./pcsensor 
2012/12/27 14:19:35 Temperature 89.38F 31.88C
# ./pcsensor 
2012/12/27 14:19:35 Temperature 89.38F 31.88C
# ./pcsensor 
2012/12/27 14:19:36 Temperature 89.38F 31.88C
# ./pcsensor 
2012/12/27 14:19:37 Temperature 89.38F 31.88C
# ./pcsensor 
2012/12/27 14:19:37 Temperature 89.60F 32.00C
# ./pcsensor 
2012/12/27 14:19:38 Temperature 89.60F 32.00C
# 

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

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

TEMPerのUSB温度計が届いた

上海問屋のUSB温度計はPCsensor OEMで紹介したUSB温度計ですが、上海問屋では売り切れだったので、DealExtremeで購入しました。

12/11:発注
12/13:DXから発送連絡
12/15:上海の郵便局の消印
12/22:東京に到着

という感じで、RegisterMailでないのに、2週間で届くというなかなかの好タイムでした。

DVC00113.JPG

こんなパッケージで届きました。

とりあえず、Windows8パソコンに指してみたところ、Windows標準のHIDドライバで認識されました。
認識直後から現在温度が自動的に入力される、という自体に陥りました。

ですが、とりあえず、1回、はずして、もう1回さしたところ、それは止まりました。
が・・・何かあったら、自動入力されそうで、ちょっと怖いです・・・

Linuxサーバでの実験は明日おこなう予定です。

なお、USBでの認識は以下でした。

HID\VID_0C45&PID_7401&REV_0001&MI_00

その後、Windows PC 4台に接続してみたのですが、いきなり入力状態にはなりませんでした。
なんだったんでしょうかねぇ・・・・

Amazon Glacierを使ったバックアップを検討中

現在、Amazon Glacierを使ったバックアップを検討中。
そのため、関連情報を収集しています。

今回、メインで考えているのは、Linuxサーバ上にあるデータのバックアップです。
いまのところ、すぐに用途が満たせそうなのは、MT-AWS-Glacierかなぁ・・・という感じですかねぇ?

.Develop: Amazon Glacierを使ってデータの長期間保存を始める
Glacierの全体像を含めた解説と、実際のJavaプログラム作成例

nabokov7; rehash: 個人データをまとめて Glacier にバックアップする (ためのツールを公開しました)
→ github:glacier-targz-uploader

Wokashi: Amazon Glacierを操作するコマンドが僕を苦しめる
→ github:GlacierTools

・github:AWS-Glacier-SNS-PowerShell
PowerShellでGlacier関連操作を行う為のコマンド群

MT-AWS-Glacier
github: vsespb / mt-aws-glacier
フォーラム: Perl Multithreaded multipart sync to Glacier
perlベースで作成されたAmazon Glacierアップロードツール。
マルチスレッドアップロード対応。
フォルダsync動作も可能

・github: uskudnik / amazon-glacier-cmd-interface
python 2.6ベースで作成されたツール。

Cloud Gates
一般的なFTP/SFTP/WebDAVクライアントからAmazon S3/Glacierにアクセスするためのゲートウェイ提供サービス

・github: MoriTanosuke / glacieruploader

・codezine: クラウドとサーバーを同期できる便利ツール「S3Sync」 ~Amazon EC2/S3環境構築のすべて~
Amazon S3を使う場合のS3SyncというCLIを使った例。

CloudBerry Explorer for Amazon S3
Windows向け商用製品。フリー版とPro版($39.99)がある。
Amazon S3とGlacierに対応。
Pro版はデータ圧縮と、アップロードしたデータとの比較ができる、とのこと。
また複数のファイルを同時転送とかもできるようだ。
この会社はいろいろおもしろいのを作っていて、CloudBerry Cloud Migratorなんていう、各クラウド系ストレージ間でデータ移行するためのツールも出している。
FTP,MS Azure Blob Storage, Amazon S3, Amazon Glacier, Rackspace Cloud Storageに対応、とのこと。

モバイルバージョンを終了