USB 温度計で気温を測る（TEMPer; ID=413d:2107）

研究室のサーバールームの空調が止まって大変なことになったことがある．室温が上昇したら slack 通知するようなものを作った．そのときに USB 温度計の扱いに苦労したのでそのことについて書く．

<img src="https://images-na.ssl-images-amazon.com/images/I/51pXunlbKPL._SL1000_.jpg" width=50%>
Amazon で購入できる usb 温度計 TEMPer

- https://www.amazon.co.jp/dp/B00KCFTQLW
- https://www.amazon.co.jp/dp/B004FI1570

付属のソフトウェアを使わずに温度を取ってこられるように，いろいろな人が github にプロジェクトを作っている．

- https://github.com/edorfaus/TEMPered
- https://github.com/padelt/pcsensor-temper
- https://github.com/padelt/temper-python

どこかのタイミングでマイナーチェンジされており，私が購入したもの（venderID:productID = **413d:2107**）は Github のリポジトリを clone するだけでは利用できなかった．

なんとか温度だけ取得する方法を見つけたので手順をまとめておく．

## 環境
- Linux CentOS7
- USB 温度計 TEMPer (venderID:productID = 413d:2107)

## 手順
### 購入した USB 温度計のデバイス ID の確認
```sh
$ lsusb
.
.
.
Bus 00X Device 00X: ID 413d:2107
```

USB温度計を接続した状態で `lsusb` コマンドを打つと， USB機器の一覧が表示される．ID が `413d:2107` のものがあることを確認する．

### hidapi のインストール
(USB) HID 機器との通信用ライブラリの [hidapi](https://github.com/signal11/hidapi) をインストールする．

```sh
$ git clone https://github.com/signal11/hidapi
$ cd hidapi/linux
$ make -f Makefile-manual
```

事前に依存パッケージのインストールが必要な場合がある．
>
On Linux, you will need to install development packages for libudev,
	libusb and optionally Fox-toolkit (for the test GUI). On
	Debian/Ubuntu systems these can be installed by running:
	    `sudo apt-get install libudev-dev libusb-1.0-0-dev libfox-1.6-dev`
If you downloaded the source directly from the git repository (using
	git clone), you'll need Autotools:
	    `sudo apt-get install autotools-dev autoconf automake libtool`

https://github.com/signal11/hidapi/blob/master/README.txt

### TEMPerd のインストール

この USB 温度計用のライブラリをインストールする．

- [edorfaus/TEMPered](https://github.com/edorfaus/TEMPered) から派生したリポジトリ [hughesr/TEMPered](https://github.com/hughesr/TEMPered)をcloneする．
- [edorfaus/TEMPered/issues/51](https://github.com/edorfaus/TEMPered/issues/51) で議論されていた内容が適用されているリビジョンに戻す．
    - 最新のものは mac 用に変更されており，linux では動作しない．
- cmake

```sh
$ git clone https://github.com/hughesr/TEMPered
$ cd TEMPered
$ git checkout hack-413d-2107
$ git reset --hard 75aa1e2
$ cmake .
$ make
```

- USB 温度計のデバイス ID がそもそも対応しているものなのであれば，clone して cmake するだけで良い．
- cmake がインストールされていない場合はインストールしておく．

### 温度を取得する
USB 温度計を接続して `utils` 内の `tempered` を実行する．

```sh
$ utils/tempered
/dev/hidraw1 0: temperature 16.12 °C
/dev/hidraw1 1: Failed to get the temperature: Not enough data was read from the sensor.
/dev/hidraw1 1: no sensor data available
```

これで温度データが取得できる．

## Python で温度データを利用する場合

温度以外の出力を省いて取得．

```get_temperature.py
import subprocess

def getTemperature():
    response = subprocess.check_output('/absolute/path/to/tempered', universal_newlines=True)
    temperature = response.split(" ")[3]
    return temperature

temperature = getTemperature()
```

## 関連記事
- [TEMPer/C#で室温を計測する](https://qiita.com/shimat/items/9be9a1f00a8bd6751f23)
- [ラズパイ(Linux) からUSB温度計で温度を測る](https://qiita.com/nekyo/items/bf5d22f3741e23d3679d)
- [TEMPer + Arch Linux + Muninで温度監視](https://qiita.com/air-gh/items/62dae0313f0ea009eafe)
- [RaspberryPiで温度を計測する](https://qiita.com/shuichiro/items/2b98848178b2da969903)
- [TEMPer1の温度データ取得プラグイン作成方法](https://qiita.com/zembutsu/items/0f8e570c4016ddb4aefa)