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*$$//'
こんな感じでグラフにできました。
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の時計のオマケの温度計とおおむね一致するようになりました。