当サイトのUPSの状態を見る
soramimi.jpは自宅サーバで運用されています

2013-08-12

UPS(無停電電源装置)を監視する

Raspberry Piで、UPS(無停電電源装置)を監視します。apcupsdを使用します。

UPS(無停電電源装置)

左はやや古いもので、背面にシリアルポートを装備しています。右は新しいもので、USBポートが付いています。

シリアルポート接続

まず、Raspberry Piのシリアルポートを使用できるようにする必要があります。拡張用ピンヘッダから信号を取り出し、RS-232Cのレベルコンバーターを経由して、DB9コネクタを付けます。

Raspberry Piでシリアル通信

下記サイトが参考になります。

Raspberry Pi でシリアル通信 Chick Lab

シリアルポートを装備したUPSを接続するには、専用のケーブルが必要です。純正品は940-0024Cという型番です。ネットオークションでも入手できますが、たかがケーブルに結構な金額がかかってしまいますので、自作することにします。

RS-232C延長ケーブル

DB9オス←→DB9メスのケーブルを用意します。

ケーブルは http://www.networkupstools.org/cables.html のとおりに結線します。

APC PowerChute 9400-0024C Compatible Cable Pinout

Mはオス(UPSに接続する側)、Fはメス(PCに接続する側)です。

ハンダ付けしたら、熱収縮チューブで絶縁します。

動作確認してから、自己融着テープとアルミテープを巻いて、テプラで型番を貼って完成。

USB接続

普通のUSBケーブルで接続する以外、特にすることはありません。

※USB接続はあまりおすすめしません。Raspberry PiとSmart-UPSのUSBインターフェースとの間に相性問題があると考えられ、しばらく運用してみたところ、1~2週間程度でRaspberry Piがフリーズすることがありました。全てのUSBシリアル変換チップをテストしたわけではありませんので、一概に使えないとは言えませんが、Raspberry PiでUPSを監視する場合は、シリアルポート直結の方が安定動作するようです。

起動時パラメータの修正

Raspberry Piの初期状態では、シリアルポートは、コンソールとしてログインできるように設定されています。これを無効化し、汎用シリアルポートとして、プログラムから利用できるように設定します。

/boot/cmdline.txt を修正します。

※見やすいように改行して掲載していますが、実際のファイルは各行が空白で区切られ、一行で記述されています。

変更前(初期状態)

dwc_otg.lpm_enable=0
console=ttyAMA0,115200
kgdboc=ttyAMA0,115200
console=tty1
root=/dev/mmcblk0p2
rootfstype=ext4
elevator=deadline
rootwait  

変更後(シリアル接続の場合)

コンソールの設定(ttyAMA0,115200と書かれている項目)を削除します。

rpitestmode=1 を追加します。詳しいことは分かりませんが、これはおまじないのようです。 なくても動作するようですが、必要だと書かれてあるサイトもあり、実際のところ、なんのための設定なのか不明です。

dwc_otg.lpm_enable=0
rpitestmode=1
console=tty1
root=/dev/mmcblk0p2
rootfstype=ext4
elevator=deadline
rootwait 

/etc/inittab にも変更を加えます。

#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
シリアルログインに関する最後の行をコメントアウトします。

変更後(USB接続の場合)

シリアルポートは使わないので、コンソールの設定(ttyAMA0,115200と書かれている項目)はあってもなくても関係ありません。

最後に dwc_otg.fiq_fix_enable=0 を追加します。この設定は、Raspberry PiとUSB←→シリアルコンバーターとの相性問題を解消するためのおまじないです。これが無いと、数時間から数日の間、連続稼働すると、Raspberry Piがフリーズすることがあります。厳密にはフリーズではなくて、CPUとSDカードは動作しているようですが、USBとイーサネットが動作しなくなるので、外部からアクセスすることができなくなってしまいます。

dwc_otg.lpm_enable=0
console=ttyAMA0,115200
kgdboc=ttyAMA0,115200
console=tty1
root=/dev/mmcblk0p2
rootfstype=ext4
elevator=deadline
rootwait
dwc_otg.fiq_fix_enable=0

apcupsd

基本的なことは下記サイトにほとんど記載されています。

apcupsd で APC製 UPS を電源管理する方法

インストール

aptitude install apcupsd apcupsd-cgi apache2

apcupsd-cgiとapache2はオプションです。ウェブブラウザから、apcupsdの状態を見ることができます。必要なければインストールしなくても構いません。

設定ファイル

/etc/apcupsd/apcupsd.conf を編集します。

シリアル接続の場合

UPSCABLE smart
UPSTYPE apcsmart
DEVICE /dev/ttyAMA0

インテル系PCの普通のLinuxの場合、DEVICEは /dev/ttyS0 となりますが、Raspberry Piの場合は /dev/ttyAMA0 を指定します。

USB接続の場合

UPSCABLE usb
UPSTYPE usb
DEVICE

USB接続の場合、DEVICEは空にしておきます。

/etc/default/apcupsd を編集

ISCONFIGUREDを有効にします。(コメントアウトされていたら先頭の # を削除、noと書いてあったらyesに変更)

apcupsdの再起動

Raspberry Piを reboot するか、 service apcupsd start をします。

apcaccessで情報が表示されたら成功です。

apcupsdが起動してから最初の約10秒くらいの間はapcaccessが失敗します。

Error contacting apcupsd @ localhost:3551: Connection refused

apcupsdの起動後、一息ついてからapcaccessを実行してください。