Fernweh

homeward bound

UPSを買った。APC RS550S, apcupsd

UPS を買った

家のブレーカーは気軽にトリップさせたい

 これは UPS おすすめ記事とかではないので、UPS の導入を検討している方に有益な情報はありません。

 10年以上前だけど APC SU700j 使ってたな。30Aのブレーカの家に二人で住んでいた頃、ドライヤーと電子レンジを同時に使って雑にトリップしてた。

 そのあと引っ越したあともしばらく惰性でUPS付けてた。東日本大震災があり、しかしなぜか輪番停電は受けなかったので特に活躍はなかった。そのあと3度目くらいのバッテリ寿命を迎えて APC SU700j ごと廃棄した。

 上の写真のEXIFは2007年だったけどどこで撮ったか覚えてない。落合の廃工場だったか。そもそもブレーカじゃないなこれ。

APC RS550S (BR550S-JP)

どうせ中開けて遊ぶならジャンクを買おう

機種選定の基準

  • 家庭用
  • apcupsd *1 とかのOSSが対応してる (must)
  • 12V バッテリを2本使うのはだるいから1本のやつ (must)
  • 出力 200~300W; 500VAくらい
  • 正弦波
  • 安い
  • 改造、ハックの情報が存在する (should)

 正直、APC でも SmartUPS シリーズはハックの情報がそれなりにあるけど Back-UPS BR シリーズのはあんまりない。SUシリーズは企業がリプレースで廃棄したリユース品が大量に出回っているのに対して、Back-UPS シリーズは業務用としてはあまり導入されないからだろうか。

 バッテリが1本で動くモデルがSUにあるならSUでよかったけど多分ないよね。たいした出力いらないのにバッテリ2本使うのはだるい。

 PCからはUSBシリアルとして認識されるもんだと思ってたら, USB HID だから驚いた。HID Power Deivces って subclass があるのを知らなかった。これによってOSが直接バッテリとして認識するみたい。Windows10 デスクトップパソコンに繋いだら、特にドライバやアプリをインストールすることもなくラップトップみたいにOSにバッテリー残量とかが認識された。まあこれのせいで後でビビるんだけど…。

ref. usb.org PDF Universal Serial Bus Usage Tables for HID Power Devices

Linux では以下のような感じ。Ubuntu Desktop からもラップトップのようにバッテリが認識された。

allen@vmx260: $ lsusb
Bus 003 Device 005: ID 051d:0002 American Power Conversion Uninterruptible Power Supply

allen@vmx260: $ lsusb -v (タップして展開..)

Bus 003 Device 005: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x051d American Power Conversion
  idProduct          0x0002 Uninterruptible Power Supply
  bcdDevice            0.90
  iManufacturer           1 American Power Conversion
  iProduct                2 APC RS 550S  FW:941.c6 .A USB FW:c6          
  iSerial                 3 3B2022
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0022
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xe0
      Self Powered
      Remote Wakeup
    MaxPower                2mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.00
          bCountryCode           33 US
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength    1049
         Report Descriptors: 
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval             100
Device Status:     0x0002
  (Bus Powered)
  Remote Wakeup Enabled

dmesg

Apr 27 00:19:28 vmx260 kernel: [   17.867416] hid-generic 0003:051D:0002.0002: hiddev0,hidraw1: USB HID v1.00 Device [American Po
wer Conversion APC RS 550S  FW:941.c6 .A USB FW:c6          ] on usb-0000:13:00.0-2/input0

apcaccess

allen@vmx260:~$ apcaccess status
PC      : 001,036,0863
DATE     : 2023-04-27 03:12:57 +0900
HOSTNAME : vmx260
VERSION  : 3.14.14 (31 May 2016) debian
UPSNAME  : vmx260
CABLE    : USB Cable
DRIVER   : USB UPS Driver
UPSMODE  : Stand Alone
STARTTIME: 2023-04-27 00:19:27 +0900
MODEL    : APC RS 550S
STATUS   : ONLINE
LINEV    : 101.0 Volts
LOADPCT  : 0.0 Percent
BCHARGE  : 63.0 Percent
TIMELEFT : 444.1 Minutes
MBATTCHG : 10 Percent
MINTIMEL : 5 Minutes
MAXTIME  : 0 Seconds
SENSE    : High
LOTRANS  : 85.0 Volts
HITRANS  : 120.0 Volts
ALARMDEL : No alarm
BATTV    : 13.0 Volts
LASTXFER : No transfers since turnon
NUMXFERS : 0
TONBATT  : 0 Seconds
CUMONBATT: 0 Seconds
XOFFBATT : N/A
SELFTEST : NO
STATFLAG : 0x05000008
SERIALNO : 3B2022
BATTDATE : 2023-04-25
NOMINV   : 100 Volts
NOMBATTV : 12.0 Volts
NOMPOWER : 330 Watts
FIRMWARE : 941.c6 .A USB FW:c6
END APC  : 2023-04-27 03:13:09 +0900

なんか表示少なくない??? と思ったら

apcaccess(8): status info from apcupsd - Linux man page より引用::

Back-UPS RS 1500 (USB)
LINEV : Current input line voltage
LOADPCT : Percentage of UPS load capacity used
(snip)
*ITEMP : UPS internal temperature in degrees Celcius
(snip)
* presence dependant on USB firmware version.

* presence dependant on USB firmware version.

おーい! マジかよ。温度取れないとかはさすがにちょっと…。

テスト運転

 バッテリがどれくらい生きてるか確認のためテストしてみた。

 純粋な抵抗性負荷 (白熱電球など) があれば良かったんだけど、手元に500Wのアイランプとか大きいのしか無かったんで、適当なラップトップの USB-C ACアダプタをつないでる。負荷が揺れてるのはラップトップをいじってるせいです。あとLEDライトも足した。

datadog

 apcupsd の apcaccess の標準出力を datadog に送って可視化した。datadog は私にとって手っ取り早いのでそうした。バッテリが死んでるかどうかだけ分かればいいんで急拵えのダッシュボードはすごく雑です。

バッテリ動作中

 これは ONBATT 中の画像です。とりあえずバッテリ電圧と UPS の考えるバッテリ残量と残り時間を見たい。負荷は、まあ電池が12V/7Ahくらいだろうから 20W 程度で勘弁してやるか。残量20%で(測定中のOSを)自らシャットダウンさせるテストも兼ねておく (※これのせいで後でビビるんだけど)。

apcupsd バッテリ動作中

 ジャンクだからバッテリ期待してなかったけど、結構生きてた。新品が分かんないけどまだ7割くらい生きてるんじゃないかな。

  • いままでの APC 製の UPS は過充電気味でバッテリを短期間でダメにする印象があったけど、これは満充電後の運転中でも 13.64V (at 20℃) 程度しかかかっていなくて良い。この機種はバッテリ寿命がカタログスペック並に出るかも。満充電バッテリを外して数時間後のバッテリ開放電圧は 13.3V 程度。
  • UPSの自己申告でいうバッテリ残量 0% まで使った直後 10.71V 。ちょっと使いすぎじゃない? もしそういう設計であればこの機種では 0% まで使い切らない方がいいと思う。それかこのバッテリの寿命か不明。
  • 15-20W で1時間以上稼働した。Timeleft はけっこう正確。

これは20%まで放電後、15分程度充電したところ

apcupsd charging

  • 商用電力復帰後、充電が始まってもバッテリ残量表示はしばらく (10分間ほど) 下がり続ける(良い)。
  • 充電電流は 0.6A 前後 ? (直流クランプメータで見たから不正確だけど実際そんなものかな)。
  • 充電 20% → 100% に6時間程度かかった。
  • 温度の情報がとれず、ファンレスなので少し怖い

出力波形

 一応見てみた。きれいな正弦波です(ここまで綺麗である必要もないんだけど)。無負荷から突然150W程度の抵抗性負荷かけても特に動じなかったのでいいと思います。50Hzの地域だけどコールドスタートしたせいか 60Hz で出てる。

RS550 out

他の感想

  • 停電時(ONBATT時)の警告音を完全に off にもできる。というかいつ鳴るのか細かく設定できなくて、まるっとon/offになる(有償のPowerChuteで見てないから分からないけど)。バッテリが死んだときの警告音までoffになるかはまだ不明。
  • バッテリはホットスワップできる
  • 内部温度はとれないっぽい(マジかよ)
  • 背面パネルを外すとき、商用電源から基板に行ってるファストン端子が簡単にスッコ抜けて、組み戻したとき気付かなかった。こわい! この個体がおかしくなってるのか元々そうなのか不明
  • 内部のUART接続ポイントはまだ見てない。従来の APC SmartUPS Protocol *2が喋れるのか、っていうこの機種SUシリーズじゃないし出自もSUと関係ないはずだから喋れない気もするな。いや Cisco の元 Linksys 製品が, Cisco スタイルの running-config を見よう見まねで吐く製品みたいなのもあるけど…。

apcupsd の自動シャットダウン

ビビったって話

USBパススルーには気をつけよう。ビビる手順は以下の通りです

  1. apcupsd と datadog のテストに使う OS (Ubuntu22.04) は Windows 上の VM で動かしてて、UPS も USB パススルーで繋いだ。
  2. バッテリ残量 20% で OS の自己シャットダウンは正常に完了した (想定通り)。
  3. VM ゲスト OS がシャットダウンされたので USB パススルーが解除され、UPS は自動的にホスト OS に接続された(忘れてた)
  4. ホストOSは突然バッテリ残量わずかなUPSを認識し、ホストOSはすぐサスペンドした(たぶん?)。
  5. ディスプレイは消え、UPS の電源も自らオフになり、負荷のために繋いでたLEDライトも消えて部屋ごと暗くなった。VM ゲスト内だけでやってたつもりが突然ホストごと落ち、部屋も暗くなり、俺はジャンプスケアを食らった。

小型UPSの需要

 停電の可能性があるようなオフィスとかにサーバを置かない時代なので、小型~中型のUPS市場は縮小していそうだな とか思った。