USB温度計 TEMPer


tkp_AhWdC7uqS3f1KaLpl.jpg

TEMperとは

Amazonでだいたい1000円前後で売られているUSBスティック型の温度センサー。かなり昔からあるらしくLinuxで動作させるための情報も多いが、マイナーチェンジを繰り返しているようで見た目は同じでも中身は全く別物という事も結構あるらしい。今回自分が買ったのは413d:2107 TEMPerGold_V3.1というやつらしい。

こいつをLinuxで使うためには色々ツールがあるようなのですが、今回はpythonで1ファイルなスクリプトを見つけたので、それを利用する事にします。依存関係もlibusbなどを使う必要はなく、python3-serialだけ入っていれば大丈夫らしい。

依存関係

# apt install python3-serial

ツールのインストール

# cd /usr/local/src
# git clone https://github.com/urwen/temper.git
# cd temper
# cp temper.py /usr/local/bin/

一般ユーザから操作するには/dev/hidrawデバイスのパーミッションが必要なのでudevでルールを加えるといいです。ただ、読取りに意外と時間がかかるので、どこかに温度情報を定期的に出力して、それをアプリケーションから参照するようにした方がいいかもしれない。

# echo 'KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0666", GROUP="root"' > /etc/udev/rules.d/99-hidraw-permissions.rules

結局上の方法はやめて、rootからcronで下記のような登録をしました。

*/5	*   * * *   root    /usr/local/bin/temper.py | sort > /var/tmp/temper

とりあえずZabbixで見れるようにしようとzabbix-agent.confに下記を追記。

# USB温度計
UserParameter=usb.temper[*],cat /var/tmp/temper | awk "NR==$1" | awk '{print $$7}' | sed -e 's/C*$$//'

こんな感じでグラフにできました。

tkp_BYH81z5cHcgf20Xs7LJPbyX5gv.png

1週間ほど使ってみたのですが、温度計の誤差が大きく、temper.pyに下記のような修正をしました。

--- temper.py	2019-05-10 11:55:38.671103676 +0900
+++ /usr/local/bin/temper.py	2019-05-13 22:00:09.354489523 +0900
@@ -30,6 +30,9 @@
 import struct
 import sys
 
+# Adjust Error
+ADJUST_ERROR = -7
+
 # Non-standard modules
 try:
   import serial
@@ -330,7 +333,7 @@
     '''
     if name not in info:
       return '- -'
-    degC = info[name]
+    degC = info[name] + float(ADJUST_ERROR)
     degF = degC * 1.8 + 32.0
     return '%.1fC %.1fF' % (degC, degF)

うちの場合は-7度するとSEIKOの時計のオマケの温度計とおおむね一致するようになりました。

tkp_HGw5EEAowTlzj0iVx5o.jpg