genpower でSoundHouse のUPS を使う

更新履歴

はじめに

UPS のページに書きましたが、このUPS のRS-232C の出力はUPS 側にドライバーを持っていると思っていたのですが
PC 側の制御線の出力を接点で返すだけのようだと言うことが分かりました。
詳細は参考にしたページを参照して下さい。

環境

PC:自作 PC/AT 互換機 350W 電源
OS:Vine Linux 3.2
UPS:Soundhouse UPS500

準備

1. genpower-1.0.2.tar.gz を準備します

こちらからいただいてきました。最新バージョンは1.0.2 です。 # と言ってもタイムスタンプは古い。
環境に合わせて.h ファイルを直さなくてはいけないのですがgentest でUPS の挙動を知る必要がありますので取り敢えず展開してmake します。(各修正箇所は後で説明します。)
$ make

2. gentest で動作を確認します。

ケーブルはCOM2 に接続しましたので/dev/ttyS1 を指定します。
引数の -r -d はどちらの制御線を使用するかの指定です。
-r : RTS をHigh Level <-- このUPS ではRTS で反応した
-d : DTR をHigh Level <-- 反応無し

$ ./gentest -r /dev/ttyS1

--------------- 起動直後
DTR = Cleared
RTS = Set
CAR = Low ( )
CTS = Low ( )
DSR = Low ( )
RNG = Low ( )

--------------- ノーマル状態
DTR = Cleared
RTS = Set
CAR = High (*)
CTS = High (*)
DSR = Low ( )
RNG = Low ( )

--------------- コンセントを抜く
DTR = Cleared
RTS = Set
CAR = High ( )
CTS = Low (*)
DSR = Low ( )
RNG = Low ( )

--------------- コンセントを挿す
DTR = Cleared
RTS = Set
CAR = High ( )
CTS = High (*)
DSR = Low ( )
RNG = Low ( )

CTS が反応していることが分かります。ここまで分かればこっちのもの! 勝ったも同然
また、確認はしてないですが、CAR がバッテリーALARM 、DSR RNG は使用せずと推定して genpowerd.h を書き直します。

3.各ファイルの編集と make

各ファイルパス等は Vine Linux 2.6r1 に合わせています。

1. genpowerd.h の編集

/* Feb/05/2001 Tripplite Omnismart 450 PNP
Jhon H. Caicedo O.S.S.O */
{6, "omnismart-pnp", {TIOCM_RTS,1}, {TIOCM_RTS,1}, 5, {TIOCM_CTS,0}, {TIOCM_CAR,0}, {0,0}},
:::
/* Classic Pro */                                                                  <-- 追加
{7, "classic-pro", {TIOCM_RTS,0}, {0,0}, 5, {TIOCM_CTS,0}, {TIOCM_CAR,0}, {0,0}},  <-- 追加
:::
{-1, NULL}
};

わたしの 編集したファイルはこちら
もしかして出来るのかも知れませんが、UPS のKILL は出来ないようでしたので殺してあります。

2. パスを修正

オリジナルでは /etc/ になってますが、/var/run の方がきれいなような気がしますので直しました。

#define PWRSTAT "/var/run/powerstatus"
#define UPSSTAT "/var/run/upsstatus"

3. Makefile の修正

どうでもいいことですが、man のパスが合っていなかったので修正

MANDIR = /usr/share/man/man8

4. genpowerfail スクリプトの編集

パスを修正

statpath="/var/run/upsstatus"
spidpath="/var/run/shutdown.pid"

はまった点
オリジナルでは

spidpath="/var/run/shutdownpid"

Vine 2.6 は

spidpath="/var/run/shutdown.pid"   ( . があることに注意)

です。genpowerd を起動した時、いきなりshutdown が走ったのでちょっとだけ悩みました。

スクリプト中の

shutdown -r を shutdown -h に変更

時間などはお好で修正して下さい。
私のが変更して使用している使っているファイルはこれ
CABLE) *) は shutdown しないようにしてあります。

5. 再度 make! & install

$ make clean
$ make all
$ sudo make install

6. /etc/inittab の編集

default のpf 行とpr 行を # でコメントアウト

# When our UPS tells us power has failed, assume we have a few minutes
# of power left. Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.
#pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"  (コメントアウト)
# If power was restored before the shutdown kicked in, cancel it.
#pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"  (コメントアウト)

以下の行を追加

# genpower setting May 9 2003
pf::powerwait:/etc/genpowerfail start
pr:12345:powerokwait:/etc/genpowerfail stop

直したら kill -hup 1 等して INIT process を再起動しておいて下さい。

7. 動作確認

root になって
# /sbin/genpoerd /dev/ttyS1 classic-pro
で genpowed を起動します。

コンセントを抜いてみましょう。shutdown が走りますか?
コンセントを挿してみましょう。shutdown がキャンセルされますか?

動作がOK ならちゃんとした起動スクリプトを用意します。

8. genpower スクリプト

このまま rc.local などで
/sbin/genpowerd /dev/ttyS1 classic-pro を書いておいてもいいですが
こちらのページに*1スクリプトがありましたのでいただいてきました。
先頭を環境に合わせて直してください。

enabled=1
upsport=/dev/ttyS1
upstype=classic-pro

わたしのは これ

起動時に走ってくれるように
ln -s /etc/rc.d/init.d/genpower /etc/rc.d/rc3.d/S99genpower
ln -s /etc/rc.d/init.d/genpower /etc/rc.d/rc5.d/S99genpower

とでもしておきましょう。

さいごに

この文書は無保証です。自己責任にて使用ください。
また、参考にさせて頂いた参照ページの皆様ありがとうございました。

ご意見 ご感想 お問い合わせは kojima_s@sheltie.ddo.jp まで

UPS Top に戻る


*1 出典を忘れてしまいました