hack のためのネタ帳, etc,,,

設定 (2012-07-23,2012-08-01)

以下のページによると omron BY50Snut の blazer_usb ドライバと ippon サブドライバで動くとのこと。 じゃ omron BY50FW もそれで動くんじゃない?と思い、相違点だけ書き換えたらすんなり動いた。

環境は以下。
# uname -a
Linux hostname 2.6.32-5-686 #1 SMP Mon Oct 3 04:15:24 UTC 2011 i686 GNU/Linux
# lsb_release -a
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 6.0.3 (squeeze)
Release:	6.0.3
Codename:	squeeze
# dpkg -l nut
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version        Description
+++-==============-==============-============================================
ii  nut            2.4.3-1.1squee network UPS tools - core system
# dpkg -l udev
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version        Description
+++-==============-==============-============================================
ii  udev           164-3          /dev/ and hotplug management daemon

まず nut を install しておく例えば以下のようにする。
# aptitude install nut
次に lsusb コマンドで BY50FW の idVendor, idProduct 及び USB 接続されている Bus と Device を調べる。
# lsusb | grep -i omron
Bus 002 Device 002: ID 0590:0065 Omron Corp. 
上記の idVendor, idProduct の値を用いて、以下のファイルで次のように設定を行う(passwordは適当な値に変更すること)。
/etc/nut/nut.conf
MODE=standalone
/etc/nut/ups.conf
[by50fw]
driver    = blazer_usb
port      = auto
desc      = "OMRON BY50FW"
vendorid  = 0590
productid = 0065
subdriver = ippon
/etc/nut/upsd.users
[upsmon]
password = password
upsmon master
/etc/nut/upsmon.conf
MONITOR by50fw@localhost 1 upsmon password master
/etc/udev/rules.d/52-nut-usbups-local.rules
ACTION!="add|change", GOTO="nut-usbups_rules_end"
SUBSYSTEM=="usb_device", GOTO="nut-usbups_rules_real"
SUBSYSTEM=="usb", GOTO="nut-usbups_rules_real"
BUS!="usb", GOTO="nut-usbups_rules_end"

LABEL="nut-usbups_rules_real"
# omron UPS BY50FW - blazer_usb
ATTR{idVendor}=="0590", ATTR{idProduct}=="0065", MODE="664", GROUP="nut"

LABEL="nut-usbups_rules_end"
上記 udev の rule は /lib/udev/rules.d/52-nut-usbups.rules をコピーして来て、他の UPS の設定を BY50FW の idVendor, idProduct で書き換え、不要部分を削除して作成した。

次に udev に rule を再読み込みさせ USP に trigger をかける。
#udevadm control --reload-rules
#udevadm trigger --verbose --attr-match=idVendor=0590 --attr-match=idProduct=0065
/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1
trigger されるパスは接続した USB 端子により異なるが、おおよそ上記のように trigger された事が確認できたら /dev/bus/usb/Bus/Device (Bud, Device は最初に lsusb で調べた値) の group が nut になっているか確認する。
うちの環境では Bus, Device は 002, 002 だったので以下のようにして確認した。
# ls -l /dev/bus/usb/002/002
crw-rw-r-- 1 root nut 189, 129 2012-08-01 19:48 /dev/bus/usb/002/002
上記のように group が nut になっているれば成功。
もし group が root のままなら udev の rule の書き方に間違いがある可能性が高いが reload rules と trigger に若干時間がかかるので、数秒置いてから ls しなおしてみると成功しているかもしれない。

udev の設定が完了したら blazer_usb のドライバで上記で設定した by50fw にアクセスできるか確認
# /lib/nut/blazer_usb -a by50fw -DDD
設定に成功していれば以下のように表示が出続けるので Ctrl-C で止める。
Network UPS Tools - Megatec/Q1 protocol USB driver 0.03 (2.4.3)
   0.000000	debug level is '3'
   0.169933	Checking device (1D6B/0001) (005/001)
   0.170033	- VendorID: 1d6b
   0.170047	- ProductID: 0001
   0.170059	- Manufacturer: unknown
   0.170071	- Product: unknown
   0.170082	- Serial Number: unknown
   0.170094	- Bus: 005
   0.170105	Trying to match device
   0.170131	Device does not match - skipping
...
   0.170429	Checking device (0590/0065) (002/002)
   0.192262	- VendorID: 0590
   0.192289	- ProductID: 0065
   0.192300	- Manufacturer: OMRON
   0.192311	- Product: BY50FW
   0.192323	- Serial Number: unknown
   0.192334	- Bus: 002
   0.192346	Trying to match device
   0.192410	Device matches
   0.195292	Trying megatec protocol...
   0.199266	send: Q1
   0.447231	read: (099.8 086.9 099.8 083 60.0 13.5 32.5 00101000
...
もし上記の udev の設定に失敗していると、以下のように Operation not permitted と言われて止まる
Network UPS Tools - Megatec/Q1 protocol USB driver 0.03 (2.4.3)
   0.000000	debug level is '3'
   0.169889	Checking device (1D6B/0001) (005/001)
   0.169985	- VendorID: 1d6b
   0.169998	- ProductID: 0001
   0.170011	- Manufacturer: unknown
   0.170023	- Product: unknown
   0.170034	- Serial Number: unknown
   0.170046	- Bus: 005
   0.170057	Trying to match device
   0.170083	Device does not match - skipping
...
   0.170383	Checking device (0590/0065) (002/002)
   0.170419	- VendorID: 0590
   0.170432	- ProductID: 0065
   0.170444	- Manufacturer: unknown
   0.170456	- Product: unknown
   0.170468	- Serial Number: unknown
   0.170480	- Bus: 002
   0.170491	Trying to match device
   0.170544	Device matches
   0.170564	failed to claim USB device: could not claim interface 0: Operation not permitted
   0.170582	failed to detach kernel driver from USB device: could not detach kernel driver from interface 0: Operation not permitted
   0.170599	failed to claim USB device: could not claim interface 0: Operation not permitted
   0.170615	failed to detach kernel driver from USB device: could not detach kernel driver from interface 0: Operation not permitted
   0.170632	failed to claim USB device: could not claim interface 0: Operation not permitted
   0.170648	failed to detach kernel driver from USB device: could not detach kernel driver from interface 0: Operation not permitted
   0.170664	failed to claim USB device: could not claim interface 0: Operation not permitted
   0.170681	failed to detach kernel driver from USB device: could not detach kernel driver from interface 0: Operation not permitted
   0.170695	Can't claim USB device [0590:0065]: could not detach kernel driver from interface 0: Operation not permitted

ここまで上手く行ったら nut を起動
# invoke-rc.d nut start
Starting Network UPS Tools: driver(s) upsd upsmon.
最後に upsc コマンドで BY50FW の状態を確認
# upsc by50fw
battery.voltage: 13.50
beeper.status: disabled
device.type: ups
driver.name: blazer_usb
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.parameter.productid: 0065
driver.parameter.subdriver: ippon
driver.parameter.vendorid: 0590
driver.version: 2.4.3
driver.version.internal: 0.03
input.frequency: 60.0
input.voltage: 100.3
input.voltage.fault: 86.9
output.voltage: 100.3
ups.delay.shutdown: 30
ups.delay.start: 180
ups.load: 85
ups.productid: 0065
ups.status: OL BYPASS
ups.temperature: 32.5
ups.type: offline / line interactive
ups.vendorid: 0590
上記のようにラインやバッテリーの状態が確認できたら成功

このままだと、バッテリーの充電率が分からないので、
満充電と空になった時の battery.voltage の値を upsc コマンドで調べておいて
/etc/nut/ups.conf で設定した [by50fw] のところに以下のような記述を追加しておくと良いとの事
default.battery.voltage.high = 13.7
default.battery.voltage.low  = 11.0
nut を再起動すると battery.charge の値が利用可能となる。

参考:
タグ

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

編集にはIDが必要です