サンワサプライから発売された「ワットモニターUSB TAP-TST10」というUSB接続タイプの電力計をLinuxで使ってみた。
埜中公博さんの「SANWA SUPPLY TAP-TST10 control tool」を使ってデータ取得しました。
githubにある「taptst10ctl.py」をCentOS6で動作させてみました。
(2013/11/19: 公開場所が変わりました「https://github.com/nonakap/taptst10ctl」。USBのデバイスへのアクセス手法の違いで「taptst10ctl.py」と「taptst10ctl0.py」があります)
# python taptst10ctl.py
Traceback (most recent call last):
File "taptst10ctl.py", line 42, in <module>
import usb.core
ImportError: No module named usb.core
#
あー・・・pyusbが入ってないからか・・・
pyusb-1.0.0a2.zipをダウンロードしてきて「python setup.py install」
# python taptst10ctl.py
Traceback (most recent call last):
File "taptst10ctl.py", line 60, in <module>
dev.set_configuration()
File "/usr/lib/python2.6/site-packages/usb/core.py", line 547, in set_configuration
self._ctx.managed_set_configuration(self, configuration)
File "/usr/lib/python2.6/site-packages/usb/core.py", line 92, in managed_set_configuration
self.backend.set_configuration(self.handle, cfg.bConfigurationValue)
File "/usr/lib/python2.6/site-packages/usb/backend/libusb10.py", line 503, in set_configuration
_check(_lib.libusb_set_configuration(dev_handle, config_value))
File "/usr/lib/python2.6/site-packages/usb/backend/libusb10.py", line 403, in _check
raise USBError(_str_error[ret], ret, _libusb_errno[ret])
usb.core.USBError: [Errno 16] Resource busy
#
「Resource busy」と何か別のプログラムが使っているらしい。
「USBRH driver for Linux を CentOS 5 で使う」で紹介されている手法、手動でusbhidの認識を解除してみる方法を行ってみた。
# cd /sys/bus/usb/drivers/usbhid
# ls -l
lrwxrwxrwx 1 root root 0 7月 17 09:38 2013 4-2:1.0 -> ../../../../devices/pci0000:00/0000:00:12.1/usb4/4-2/4-2:1.0
--w------- 1 root root 4096 7月 17 09:25 2013 bind
lrwxrwxrwx 1 root root 0 7月 17 09:25 2013 module -> ../../../../module/usbhid
--w------- 1 root root 4096 7月 17 09:25 2013 new_id
--w------- 1 root root 4096 7月 17 09:25 2013 remove_id
--w------- 1 root root 4096 7月 17 09:25 2013 uevent
--w------- 1 root root 4096 7月 17 09:25 2013 unbind
# echo "4-2:1.0" > unbind
# ls
bind module new_id remove_id uevent unbind
#
これでusbhidを解除できたので、改めて実行。
# .taptst10ctl.py
No.,DateTime,Watt,kWh
1,2013/07/13 07:50,0.0,0.00
2,2013/07/13 08:00,47.0,0.00
3,2013/07/13 08:10,44.8,0.01
4,2013/07/13 08:20,18.5,0.01
5,2013/07/13 08:30,18.5,0.01
6,2013/07/13 08:40,18.1,0.02
<略>
637,2013/07/17 18:00,87.4,2.76
638,2013/07/17 18:10,83.8,2.78
639,2013/07/17 18:20,83.3,2.79
640,2013/07/17 18:30,82.8,2.80
641,2013/07/17 18:40,80.9,2.82
#
ちなみに、時々、以下のような感じで実行に失敗します。
その場合は、再実行すれば、だいたい大丈夫です。
# ./taptst10ctl.py
Traceback (most recent call last):
File "./taptst10ctl.py", line 92, in <module>
data = dev.read(ENDPOINT, 17, intf, 1000)
File "/usr/lib/python2.6/site-packages/usb/core.py", line 654, in read
self.__get_timeout(timeout)
File "/usr/lib/python2.6/site-packages/usb/backend/libusb10.py", line 559, in intr_read
timeout)
File "/usr/lib/python2.6/site-packages/usb/backend/libusb10.py", line 641, in __read
timeout))
File "/usr/lib/python2.6/site-packages/usb/backend/libusb10.py", line 403, in _check
raise USBError(_str_error[ret], ret, _libusb_errno[ret])
usb.core.USBError: [Errno 110] Operation timed out
#