UPSの状態と制御

FREQUPS FシリーズでのUPSの状態の取得と制御についてです。

シリアル接続

当初のモデルから用意されているシリアル接続による制御です。

  1. シリアル接続で使用するケーブルは、(何も細工のない)ストレートのRS232Cケーブルです。
  2. モデムの制御ラインで状態の取得とUPSの制御をします。言い替えれば、シリアル接続での通常のデータ通信を行なっているわけではありません。
    • DTR: UPSに停止の指示
    • CTS: UPSから停電の状態を通知
    • CAR: UPSからバッテリー残量の低下を通知

三菱電機からソースも公開されているツールが提供されていますが、pkgsrcにあるbkpupsdを使用すると同用にモデムの制御ラインで扱える他社のUPSも扱えます。

ただ原因は不明なのですが、旧機種と違ってシリアルポートの状態が安定しません。実害はなく、2012年11月21日の京都市内の停電の時も停電(正確には1秒未満の電圧低下らしい)をきちんと検知してくれました。以下のように少々暴れます。

Nov 22 04:09:49 ns bkpupsd[616]: status changed: -500(CAR|DSR)
Nov 22 04:09:50 ns bkpupsd[616]: status changed: +500(CAR|DSR)
Nov 22 04:09:59 ns bkpupsd[616]: status changed: -500(CAR|DSR)
Nov 22 04:10:00 ns bkpupsd[616]: status changed: +100(CAR)
Nov 22 04:10:01 ns bkpupsd[616]: status changed: +400(DSR)
Nov 22 04:10:41 ns bkpupsd[616]: status changed: -500(CAR|DSR)

この安定しない状態はNetBSDのバグだったようで、いつの間にか出なくなりました。

USB接続

仕様ではシリアル接続とは排他使用となっています。三菱電機の提供するUPSの制御ソフトウェアでは、特別にUSB用のものは用意されていなくて、USBシリアルとして認識されるはずです。

残念ながら、NetBSDではシリアルポートとして認識することはできていません。USB 1.xをサポートしているチップで、ucycom(4)で扱えるものと互換チップらしいですが、そもそもucycom(4)ではハードウェアのフロー制御をサポートしていないため、肝心のモデム制御のラインの状態を取得できないと考えられます。

FreeBSDでは、きちんと実装されているようなので、そちらを参照して直せば良いのでしょうけれど、今時USB 1.xだけのシリアル接続の機器というのもあまりないでしょうし、誰かが直してくれるのを待つのも無理そうな気配です。