FreeBSD で OMRON UPS を監視する

OMRON の BN75S という UPS を使用していますが、OMRON の公式ソフトウェアでは FreeBSD は対応していません。
USB なのでなんとかならないかなといろいろ調べてみたところ、うまく認識できましたのでご紹介します。

USB の確認

USB ケーブルでつなぎ、dmesg コマンドで ugen として認識していることとその番号を確認します。
ここでは仮に ugen0.2 として認識していたとして話を進めます。

以下のコマンドで Vendor ID と Product ID を確認します。

usbconfig -d ugen0.2 dump_device_desc

また後述する UPS を管理するソフトウェア Network UPS Tools(NUT) でアクセス出来るよう、パーミッションを変更します。

chmod 0666 /dev/ugen0.2

また起動時や USB 挿抜時にパーミッションが戻ってしまうので、/etc/devfs.conf に以下のように記述すると良いようです。
こちらは私は未検証ですが……。

perm    ugen0.2 0666

Network UPS Tools の設定

Network UPS Tools は ports/pkg からインストールできます。
sysutils/nut です。
インストールが終わったら、/usr/local/etc/nut 以下に設定ファイルを書いていきます。

nut.conf

MODE=standalone

ups.conf

[BN75S]
driver = blazer_usb
port = auto
desc = "OMRON BN75S"
vendorid = 0590
productid = 006f
subdriver = ippon

ここでの vendorid と productid は、先ほど usbconfig コマンドで確認したものを記述して下さい。

upsd.conf

空のファイルを用意して下さい。

upsd.users

[upsuser]
    password  = upspass
    upsmon master

モニタリングの為のユーザ情報です。
upsuser と upspass の部分は、後述する upsmon.conf に書くものと一致させます。

upsmon.conf

RUN_AS_USER root
MONITOR BN75S@localhost 1 upsuser upspass master
SHUTDOWNCMD "/sbin/shutdown -p now"

NOTIFYCMD /usr/local/etc/nut/notify.sh
NOTIFYMSG ONLINE        "UPS %s on line power"
NOTIFYMSG ONBATT        "UPS %s on battery"
NOTIFYMSG LOWBATT       "UPS %s battery is low"
NOTIFYMSG SHUTDOWN      "Auto logout and shutdown proceeding"
NOTIFYMSG REPLBATT      "UPS %s battery needs to be replaced"
NOTIFYFLAG ONLINE       SYSLOG+WALL+EXEC
NOTIFYFLAG ONBATT       SYSLOG+WALL+EXEC
NOTIFYFLAG LOWBATT      SYSLOG+WALL+EXEC
NOTIFYFLAG SHUTDOWN     SYSLOG+WALL+EXEC
NOTIFYFLAG REPLBATT     SYSLOG+WALL+EXEC

モニタリングに関する設定です。
NOTIFYFLAG に EXEC が入ると、NOTIFYCMD で指定したコマンドに NOTIFYMSG を引数として渡して実行されます。
メール送信による通知に使っています。

upssched.conf

CMDSCRIPT /usr/local/bin/upssched-cmd

notify.sh

#!/bin/sh

DATE=`date +"%Y-%m-%d %H:%M:%S"`

### Notification from UPS
/usr/sbin/sendmail -t <<_EOF_
From: [email protected]
To: [email protected]
Subject: [UPS_alert] $1

*** Alert from Network UPS Tools ***
date: ${DATE}
mess: $1
_EOF_

こんな感じでメールを送信するスクリプトを置いておきます。
置く場所は upsmon.conf の NOTIFYCMD で記述された場所です。
パーミッションも設定しておいて下さい。

これらの設定で通信できるか以下の要領で確認します。

/usr/local/libexec/nut/blazer_usb -u root -a BN75S -DDDD

さてここまで設定したら rc.conf で以下のように有効にします。
ちなみに upslog は /var/log/ups.log に状態を記録するものです。

nut_enable="YES"
nut_upslog_enable="YES"
nut_upslog_ups="BN75S@localhost"
nut_upsmon_enable="YES"

以下のようにデーモンを起動します。

/usr/local/etc/rc.d/nut start
/usr/local/etc/rc.d/nut_upslog start
/usr/local/etc/rc.d/nut_upsmon start

ここまで来れば実際の値などは以下で取得できますので、
出力結果を加工すれば munin などでグラフも書けますね。

upsc BN75S

FreeBSD,technical

Posted by yokky