当サイトのUPSの状態を見る
soramimi.jpは自宅サーバで運用されています
2013-08-12
Raspberry Piで、UPS(無停電電源装置)を監視します。apcupsdを使用します。
左はやや古いもので、背面にシリアルポートを装備しています。右は新しいもので、USBポートが付いています。
まず、Raspberry Piのシリアルポートを使用できるようにする必要があります。拡張用ピンヘッダから信号を取り出し、RS-232Cのレベルコンバーターを経由して、DB9コネクタを付けます。
Raspberry Piでシリアル通信下記サイトが参考になります。
Raspberry Pi でシリアル通信 Chick Lab
シリアルポートを装備したUPSを接続するには、専用のケーブルが必要です。純正品は940-0024Cという型番です。ネットオークションでも入手できますが、たかがケーブルに結構な金額がかかってしまいますので、自作することにします。
DB9オス←→DB9メスのケーブルを用意します。
ケーブルは http://www.networkupstools.org/cables.html のとおりに結線します。
Mはオス(UPSに接続する側)、Fはメス(PCに接続する側)です。
ハンダ付けしたら、熱収縮チューブで絶縁します。
動作確認してから、自己融着テープとアルミテープを巻いて、テプラで型番を貼って完成。
普通の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シリアルログインに関する最後の行をコメントアウトします。
シリアルポートは使わないので、コンソールの設定(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
基本的なことは下記サイトにほとんど記載されています。
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 を指定します。
UPSCABLE usb UPSTYPE usb DEVICE
USB接続の場合、DEVICEは空にしておきます。
ISCONFIGUREDを有効にします。(コメントアウトされていたら先頭の # を削除、noと書いてあったらyesに変更)
Raspberry Piを reboot するか、 service apcupsd start をします。
apcaccessで情報が表示されたら成功です。
apcupsdが起動してから最初の約10秒くらいの間はapcaccessが失敗します。
Error contacting apcupsd @ localhost:3551: Connection refusedapcupsdの起動後、一息ついてからapcaccessを実行してください。