RaspberryPiでUPS(APC Smart-UPS LCDシリーズ)を監視
停電時にローカルネットワーク下のマシンを全てシャットダウンさせる
apcupsdを使えばクソ高いネットワークカードを購入する必要はない
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;