====== RaspberrypiにUPSを監視させる ======
====== やりたいこと ======
RaspberryPiでUPS(APC Smart-UPS LCDシリーズ)を監視
停電時にローカルネットワーク下のマシンを全てシャットダウンさせる
apcupsdを使えばクソ高いネットワークカードを購入する必要はない
====== UPS ======
UPSのファームウエアを最新にして、動作モードをMODBUSに変更しないとだめ
http://apcupsd.cvs.sourceforge.net/viewvc/apcupsd/apcupsd/ReleaseNotes?pathrev=Release-3_14_11
http://www.on-sky.net/~hs/index.cgi?date=20140813
====== ますたー ======
APC Smart-UPS LCD以降は独自プロトコルのせいで
apcupsd最新版(3.14.13以上)でなければUSB接続で監視できない
rasbianでapt-getしておちてくるのは3.14.12なので自分でmakeしようと思ったがなんかエラーでてよくわからないから
archlinuxのarmv7h用パッケージ解凍して無理やりいれる
http://us.mirror.archlinuxarm.org/armv7h/community/apcupsd-3.14.13-3-armv7h.pkg.tar.xz
apcups.confのUPS設定部分はこれ。これより下の方は適当
UPSCABLE usb
UPSTYPE usb
DEVICE
BATTERYLEVEL 残りバッテリー%になったらシャットダウン
MINUTES 残りバッテリー分になったらシャットダウン
TIMEOUT 0
/etc/init.d/apcupsつくって起動でーもんスクリプト書く。deb拾ってきていれてもいいか。
sysv-rc-conf apcups onで自動起動
するはずだったがしない。イミフメイだから/etc/init.d/rc.localにかいてごまかす
一定条件になるとUPS電源落とすように設定
本来であればこれもinit.dに記述すべきだがやっぱり動かない
なのでapccontrolのシャットダウン処理部分にapcupsd --killpowerいれこみ
さらにpowerfailファイルがないと動かないのでonbatteryでtouchさせる
offbatteryでは消す。
停電→onbattery→ups shutdown→pi shutdown
復電時にはUPS再起動に伴ってpi自動起動
さらにpiからwol飛ばしNAS起動させる
このためにcroneでwakeuplan常に飛ばし続けるが停電時、条件そろうと再起動ループしてしまう
対策としてpowerfailの有無(あればバッテリー駆動、なければAC駆動)で分岐処理させて対応
====== すれいぶ ======
うぃんどうずもlinuxもmacもmakeしろ
synology nasはこれ起動スクリプトにする
#!/bin/sh
# startup scripts for APCUPSD.
apcupsd_enable=${apcupsd_enable:-YES}
apcupsd_program=${apcupsd_program:-/opt/sbin/apcupsd}
apcupsd_flags=${apcupsd_flags:-"--kill-on-powerfail"}
apcupsd_pidfile=${apcupsd_pidfile:-/var/run/apcupsd.pid}
apcupsd_lockfile=${apcupsd_pidfile:-/var/spool/lock/apcupsd.lock}
case in
start)
case "${apcupsd_enable}" in
[Yy][Ee][Ss])
rm -f /var/run/powerfail
rm -f /var/run/nologin
if [ -f ${apcupsd_program} ]; then
echo -n " apcupsd"
${apcupsd_program} ${apcupsd_flags} || return=" Failed."
touch ${apcupsd_lockfile}
fi
;;
esac
;;
stop)
PID=$(pidof apcupsd)
kill $PID || return=" Failed."
rm -f ${apcupsd_pidfile}
;;
restart)
stop
sleep 5
start
;;
status)
/opt/sbin/apcaccess status
;;
*)
echo "usage: {start|stop|restart|status}" 1>&2
;;
esac
exit 0;