goo blog サービス終了のお知らせ 

rabbit51

it's since Nov.30 2005
May.29 2014, transferred from broach

APC Smart-UPS 500(SMT500J)でsmart protocol(J606)を使う

2020-10-11 19:00:00 | UPS
APC Smart-UPS 500(SMT500J)のバッテリー定数( Battery Constant )を確認設定をするため、modbus経由のシリアルインターフェースでsmart protocolが使える方法を探していた。

Post-smart protocol, pre-MODBUS APC UPS Communication using a COM port on a 2010 APC SMT2200 running firmware 7.1(2016/3/21)」で基板上のコネクタJ606にUARTを接続してsmart protocolが扱えるビデオ記事を見つけた。その情報から「Hacking the newer APC ups's(2016/9/24)」で基板上のJ606コネクタのRxD/TxD/GNDのピン番号の特定方法を公開してくれた。
特定方法

初めにJ606のGNDピンを見つける。デジタルマルチメータを導通モード(導通時にビープ)にしてシャーシとJ606のピン間で導通のあるピンを探す(UPSをオフにして全ての入力ソースを外しておく)。3ピン2列のどちらかの真中を確認する。どちらかでビープ音がするはず。そのピンが5番ピン。5番ピンが自分に近い側に配置されているように基盤を観て、上側の真中のピンが2番ピン。2番ピンの左側が1番ピン。USB-TTL-uartのTXを1番ピンに、RXを2番ピンに、GNDを5番ピンへ接続する。 
基盤上のシルク印刷されたピン番号と異なるので注意が必要(なぜ番号を変えたか不明)。APC Smart-UPS 1500Iの基板写真と思われるがJ606の5番ピン(解説の1番ピン)印刷がボンヤリと観える。

(1)APC Smart-UPS 500 LCD 100(SMT500J)でJ606を探す
SU500を分解した事がある。SMT500JもSU500と同様に基板がバッテリー収納部上方から出力トランスの上方部にかけて取り付けられている。インバーターのFET類放熱板がトランスなどの固定金具と一体になっていたので取り外しに難儀する。とりあえず、バッテリー収納部の上方にある基盤を目視、どの辺にコネクタがあるか確認してみた。

操作パネル接続用ケーブルコネクタの右側に6ピンのコネクタが一つ。右の奥の方に6ピンのコネクタが1つ。奥のシャーシーにバッテリー接続用のコネクタが確認出来る。iPhoneのカメラを使って基盤を写した。

J606発見!一番取り扱いのしやすい位置にある。基盤を分解せずに済む。


奥のコネクタも確認。iPhoneのレンズ位置を上手く配置できないので、コネクタ番号を写すことが困難。


Olympusのデジカメで写す。「J602」。


「J606」のピン番号をシルク印刷のピン番号とする

デジタルマルチメータ で4番ピンGNDと各ピンを計測してみた。1,2番ピンは、+5ボルト安定。3,5番ピンは、変化し3.3~7ボルト。6番ピンは、3.3ボルト安定。3,5,6番ピンは、USB-uartのCMOS系入出力と思われる。
(1) V+(5.004V)
(2) V+(5.003V)
(3) RxD (3.7xV variable)
(4) GND (0V)
(5) TxD (3.27xV variable )
(6) Control (3.352V stable)

(2)USB to/from UART変換
DSD TechSH-U09C2 USB to TTL Adaptorを使用した。

信号データの確認は、Debian10にcuをインストールして行った。2400bps 8N1で接続。Windowsでは、TeraTerm等を使う。USB to TTL AdaptorのTTL Levelは、3.3Vとした
root@debian10:~# sg dialout 'cu -s 2400 -l /dev/ttyUSB0'
3番ピンにRxD/4番ピンにGNDラインを接続して確認

この文字列が流れつづける。smart protocolの応答データ。

5番ピンにRxD/4番ピンにGNDラインを接続して確認

この文字列が流れつづける。smart protocolのコマンド。各コマンドの応答がRxDに流れている。3番ピンには、コマンド応答以外のデータも流れている。

Hacking the newer APC ups's」によれば、3番ピンにRxD/5番ピンにTxD/4番ピンにGNDラインを接続し、「Shift+Y」をキーインさせると信号が切り替わり「SM」応答が出力され、smart protocolが使えると記載されている。
が、「Shift+Y」を何度キーインさせても止まらない。

6番ピンの存在を思い出した。変化しない「3.3V」。制御入力の予感。「0V」信号を入れてみる。5番ピンの信号が停止。3番ピンの信号応答も停止。「Shift+Y」をキーイン。「SM」応答!
「1<pause 4 sec>1」「PROG」これで設定変更が可能。

Battery Constantを調べてみた
「4=09」「5=B4」「6=10」「0=BA」
何回かBatteryをRBC20J-Sと入れ替えているので「0=BA」が初期値か判らない。

5番ピンのコマンドを入れてみた「'8B\/bCulosqkX0LFPjOGf」「l」を忘れた。3番ピンの結果と符合する。

最終的に、6番ピンは、RTSラインを接続し、「cu」で接続するとRTS信号が0Vになり切り替わるよう接続した。
USB to Serial--------J606
RxD -------------------- (3)
TxD -------------------- (5)
RTS -------------------- (6)
GND ------------------- (4)

接続すると、SMT500J背面に接続した「USB」と「Serial」が切断されると共にフロントパネルの表示も止まる。

接続を断とすると「USB」と「Serial」が復活し、フロントパネルの表示も再開する。
フロントパネルの下からUSB-uart接続用のフラットケーブルが取り出せる。常時使用する事も無いのでフロントパネル裏に入れて置くか、使用する毎にJ606に接続するのでも良いかと思う。

(3)smart protocolでしか出来ない事
・Battery Constant の確認調整
純正品以外の高容量バッテリーを使う場合、SU500では、キャリブレーションで設定出来なかった
「Battery Constant」の設定が必要だった。
SMT500Jでは、不明だが、設定手段が確保できた。

・Trickle(float) 充電の電圧調整
バッテリー寿命に大きく影響してくる。過去の記事などでは、この電圧が高目でバッテリー交換頻度が高くなる設定がされているのではないか?との記事が見受けられた。最近では、「バッテリー保証」が含まれた製品を出しているのでどうなのだろうか?
調達したSMT500JのBATTVは、27.0V-27.1Vと低い設定だった。温度変化で27.0V-27.6Vの範囲に収まるか要確認
SU500のBATTVは、27.6Vで上限値だったが、27.3Vに変更した。この設定で時々BCHARGEが99%になる事がある。夏場から冬場への温度変化でどうなるか要確認。

「5=B4」:プロトコル「5」は、バッテリーと制御ボード間の配線抵抗に関連したパラメータ
「6=10」:プロトコル「6」は、バッテリー不良の判断に使用されるパラメータ
これらのパラメータに関する資料が無いので変更しない方が良いとコメントされている

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

APC SMT500J にSynology DS216J (USB)とDebian10(Serial)から同時接続

2020-10-09 18:00:00 | UPS
APC Smart-UPS 500(SMT500J)にSynology DS216JとDebian10( XPS8300 )から同時接続してみる

APC SMT500Jでシリアル・USBを同時利用する」を観てこの機種を選定した。この例では、QNAP NASとWindows Server+PowerShute。

DS216Jは、USB接続。
Debian10(Server)は、apcupsdを使いUSB-Serial(PL2303)接続。


(1)シリアルケーブル
SMT500Jには、シリアルケーブル(APC 940-0625A)が付属している。本体側のコネクタ・ジャックがRJ50(10P10C)で、端末側がDB9F(DCE)となっている。信号線は、TxD/RxD/GND/FGの4本。
USB-Serialは、USB-RS232C([USB-CVRS9]サンワサプライ/ATEN UC232Aドライバー互換)を使った。

DB9M(DTE)なので940-00625Aと対向接続してロックネジ固定。

NVR510のコンソール接続に使うCableCreation製CD0495(FTDI-FT232RLチップセット内蔵)のRJ45(8P8C)プラグは、UPSのRJ50(10P10C)ジャックに直接接続できるが、信号線が適合しない。TxD(DTE)がGND(DCE)に接続されるので「挿入しない」方が良い。


市販のUSB-Serial(RJ45)では、信号線が適合しないと思う。RJ45プラグで変換ケーブルを作りRJ45ケーブルコネクタで接続する。SMT500Jでは、RJ50(10P10C)の1,10番ピンが使われていない。

APC ES/APC RS(BE/BR)系のUPSは、インターフェースポート(RJ50)がUSBポート用に使用され、1,10番ピンが5V+とDATA+なのでRJ50プラグが必要。「かしめ工具」もRJ50対応品が必要。APC RSは、同じRJ50ジャックに異なるケーブルを使いSerial対応となる。機種毎に確認が必要。

(2)USBケーブル
SMT500JのUSBは、TYPE-BジャックがRJ50(10P10C)の左側に配置されている。USBケーブルは、TYPE-BプラグとTYPE-Aプラグのケーブルで接続する。DS216Jは、UPSとのUSBケーブルを単独ポートで接続するよう記載されていたが、USBハブを介してUSB HDD2台と共に接続した。DS216Jのポートは、USB3.0でHUBも3.0。HDDは、2.0でUPSは、多分2.0。

(3)DS216JのUPS設定
USBケーブルでUPSと接続され認識すると下記画面が表示される。
接続されていない場合は、ネットワーククライアント設定の画面となる。
コントロールパネルの「ハードウェアと電源」「UPS」で「UPSサポートの利用」にチェック
「システムがセーフモードになったらUPSを停止します。」にチェックをしない。
「ハードウェアと電源」「全般」「電源復旧」で「電源の問題が修正されたときに自動的に再起動する」にチェック


(4)Debian10のUPS設定
SU500は、
SU500
UPSCABLE 940-0024C
UPSTYPE apcsmart
DEVICE /dev/ttyUSB0
でシリアル接続出来た。smart protocolが基本。
同じ設定でSMT500Jは、接続出来ない。
SMT500J w/ Serial 接続出来ない
UPSCABLE 940-0625A
UPSTYPE apcsmart
DEVICE /dev/ttyUSB0
シリアル接続は、SMT500Jの「セッテイ」「modbus:ユウコウ」として
SMT500J w/ Serial
UPSCABLE 940-0625A
UPSTYPE modbus
DEVICE /dev/ttyUSB0
modbusは、smart protocolを利用出来ない。
USB接続は
SMT500J w/ USB
UPSCABLE usb
UPSTYPE usb
DEVICE

upsのshutdownは、Debian10がkillpowerを発行する。DS216Jは、セーフモードで待機する。

(4)その他
Smart UPS 500 (NEC designed by APC) でDebian10 とDS216J(Synology) に電源供給」と比較して、NAS DS216JとサーバーDebian10(XPS8300)共にUPSと物理的に接続された事によりネットワーク関連不具合や障害と無関係に停電対応が出来るはず。また、停電検知がNASとサーバー相互に独立しているので作業時のリスクが少なくなった。

PR-S300SEのIPv4 DHCPとIPv6 Prefix Delegationを使用している
復電時にIPv4 DHCPでアドレス指定のリクエストが有効にならず起動順にIP配布されたため、IPの固定設定に変更した。
IPv6 PDは、固定設定が出来ない。IPv6機器の起動順位も設定出来ない。解決方法を模索中。

SMT500Jのsmart protocolによるトリクル充電電圧設定やバッテリー定数の設定が出来ていない。
スーパーナットなどの容量の多い電池に変更した時、バッテリー定数の設定が出来ないとSU500の例からも問題。
SMT500Jのバッテリー定数設定方法の調査が必要。

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Smart UPS 500 (NEC designed by APC)のバッテリーをスーパーナットRBC20J-Sに交換

2020-10-06 17:00:00 | UPS
SU500の電池交換ランプと定期的なアラーム


SU500標準のバッテリーRBC20J(12V5Ah x2)

少し膨張が観られる。価格¥13,000-ほどだった。

交換したスーパーナット(RBC20J-S

12V9Ah x2で容量がほぼ2倍。価格は¥14,000-(バッテリーキット)。
バラで購入してセルフキッティングすると約¥5~6,000-程度。
電池交換は、稼動状態で、電池の+/-接続端子(ファストン端子)を外し、電池交換、ファストン端子を接続で完了する。
交換後、セルフキャリブレーション(テストモード)が行われる。で完了。

交換後、「apcupsd」で情報を観ると
APC      : 001,051,1158
DATE     : 2020-08-28 12:55:26 +0900  
HOSTNAME : debian10
VERSION  : 3.14.14 (31 May 2016) debian
UPSNAME  : UPS_IDEN
CABLE    : Custom Cable Smart
DRIVER   : APC Smart UPS (any)
UPSMODE  : Stand Alone
STARTTIME: 2020-08-28 11:44:09 +0900  
MODEL    : SMART-UPS 500
STATUS   : ONLINE LOWBATT 
LINEV    : 102.0 Volts
LOADPCT  : 44.2 Percent
BCHARGE  : 100.0 Percent
TIMELEFT : 3.0 Minutes
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME  : 0 Seconds
MAXLINEV : 102.0 Volts
MINLINEV : 100.7 Volts
OUTPUTV  : 102.0 Volts
SENSE    : High
DWAKE    : 0 Seconds
DSHUTD   : 180 Seconds
DLOWBATT : 2 Minutes
LOTRANS  : 90.0 Volts
HITRANS  : 110.0 Volts
RETPCT   : 0.0 Percent
ITEMP    : 53.5 C
ALARMDEL : 5 Seconds
BATTV    : 27.9 Volts
LINEFREQ : 50.0 Hz
LASTXFER : Automatic or explicit self test
NUMXFERS : 0
TONBATT  : 0 Seconds
CUMONBATT: 0 Seconds
XOFFBATT : N/A
SELFTEST : NO
STESTI   : 336
STATFLAG : 0x05000048
DIPSW    : 0x00
REG1     : 0x00
REG2     : 0x00
REG3     : 0x00
MANDATE  : 01/30/01
SERIALNO : NS0105XXXXXX
BATTDATE : 01/30/01
NOMOUTV  : 100 Volts
NOMBATTV : 24.0 Volts
EXTBATTS : 0
FIRMWARE : 120.14S.A
END APC  : 2020-08-28 12:55:52 +0900
これでは、接続した瞬間にシャットダウンになってしまう。入手してから16-7年、製造から19年なので本体の問題なのか?、バッテリーに不具合があるのか?

バッテリー・ストア(南進貿易)に連絡してみると、確認済みのバッテリーを送ってもらえる事になった。
到着後、交換するも状態変わらず。
急遽、「SMT500J」を注文!(Serial/USBの同時接続使用が可能そうなので選択)

SMT500Jの表面パネルと裏面パネル


使用されているバッテリー(多分GSユアサのNP7-12)

コネクタで電池の挿抜だけで交換可能。
このバッテリーをSU500に接続してみる


SU500にSMT500Jのバッテリーを接続して確認

同時に負荷電流を計るため「20A/75mvのシャント抵抗」を挿入(安全対策のためマイナス側ラインへ)して計測
スーパーナットRBC20J-Sと変わらず。
SMT500JにスーパーナットRBC20J-Sを接続してみると同等のバッテリー稼動時間を表示。
SU500の問題と確定した
スーパーナットRBC20J-Sが¥14,000-なのでAPCのRS550とほとんど同価格の投資。。。
失敗か?調査してみると「キャリブレーション」の可能性が見えてきた

"Soft" Runtime Calibration
"Manual" Runtime Calibration
Resetting the UPS Battery Constant
順番に実施してみる事に

(1)"Soft" Runtime Calibration
100%充電されている事を確認し、「/etc/init.d/apcupsd stop」でapcupsdを停止する。apctestの「2) Perform a Battery Runtim Calibrtion」を実行する。LOADPCTは、40.5 %でTIMELEFTが6.0 Min。DS216Jの磁気ディスクがスタンバイすると35%と7.0 Min。
TIMELEFTが2 Minを切るとLOWBATTでキャリブレーション終了となる。バッテリー稼動時間は、約264秒。
何度か実行してみたが「変化なし」

(2)"Manual" Runtime Calibration
100%充電を確認し、入力電源を切断(Power failuer)でUPSがシャットダウンするまで実行する。
最終的にUPS出力が断されるので、ルータ・スイッチ類を外し、DS216J関連とXPS8300だけで実行するよう構成変更した。
この時のLOADPCTは、18.7%でTIMELEFTが21.0 Min。
シャットダウンまで950 sec(15m30s)だった。

開始前の電池電圧は、27.42V(トリクル充電)。電池駆動状態に入ると24.97Vから低下し、シャットダウン時24.85Vだった。
電池の特性的にも「22.1V」位まで放電出来るはずなので、SU500のキャリブレーションが適切で無いようだ。

実行後も「変化なし」

(3)Resetting the UPS Battery Constant
apctestの「6) Enter TTY mode communicating with UPS」(シリアル端末を2400bps8N1で直接接続しても良いらしい)を使ってUPSの「Battery Constant」の確認と設定を試みる。ガイドに従い、現在の設定値を確認してみた。
root@debian10:~# apctest
2020-10-03 17:03:43 apctest 3.14.14 (31 May 2016) debian
Checking configuration ...
sharenet.type = Network & ShareUPS Disabled
cable.type = Custom Cable Smart
mode.type = APC Smart UPS (any)
Setting up the port ...
Doing prep_device() ...

You are using a SMART cable type, so I'm entering SMART test mode
Hello, this is the apcupsd Cable Test program.
This part of apctest is for testing Smart UPSes.
Please select the function you want to perform.

1) Query the UPS for all known values
2) Perform a Battery Runtime Calibration
3) Abort Battery Calibration
4) Monitor Battery Calibration progress
5) Program EEPROM
6) Enter TTY mode communicating with UPS
Q) Quit

Select function number: 6

Enter an ESC character (or ctl-[) to exit.

YSM
426
5EF
6F9
03A
P018.7
j0021:
B27.60
C050.4
^[
TTY modeに入ったら、「Shift+Y」を入力する。SMの応答があったら、PROGモードに入らず、「4,5,6,0」の応答を確認する(0は数字のゼロ)。
SU500の標準設定は、「4=26」「5=EF」「6=F9」「0=89」(apc calibration manual
12V5Ahのバッテリーの標準値なので「0=3A」は低値。
「P」は、LOADPCT値(%)。「j」は、TIMELEFT値(分)。「B」は、BATTV値(V)。「C」は、ITEMP値(℃)。
「0=89」に変更してみる
Enter an ESC character (or ctl-[) to exit.

YSM
03A
j0021:
P018.7
11PROG
03A
+3B
+3c
・・・途中省略・・・
+88
+89
089
j0063:
P018.7
RBYE
^[
「SHIFT+Y」を入力。SMの応答があったら、「0, j, P」を確認。
「1」4秒のポーズ「1」でPROG応答(1は、数字のひとつ)。PROGモードに入る。
「0」で3Aの応答。「+」で3B, 「+」で3Cと順次インクリメントさせ、「+」89までインクリメント。
「0」で89を確認し、「j」でTIMELEFT値を確認。「P」でLOADPCT値も確認。
「SHIFT+R」でBYE応答。書き込み変更終了。「CTR+[」「q」でapctestを終了。
この状態で、apctestの「2) Perform a Battery Runtime Calibration」を実行。
2919 sec(48m39s)でBCHARGE=25%、TIMELEFT=12.0 minで終了。終了時のバッテリー電圧BATTV=24.74V。
まだバッテリーの容量に余裕がある。

「Battery Constant」を「FF」にして「"Manual" Runtime Calibration」を実行すると自動調整されるらしいので実行してみた。

「0=FF」「j=0123:」「P=019.2」で開始。
「10:30」に開始して「12:48」にシャットダウン。
UPS出力が「DSHUTD=180」時間後に断。この時BCHARGE=9% 、BATTV=19.5V
計測中のapcupsdのapccontrolでshutdownとkillpowerの停止を忘れたため、経過のメモだけで詳細な計測値を失う。シャットダウン前から電池電圧の録画をしていたためBATTV値は正確。電池駆動時間は、8460 sec(141m0s)。
結果、SU500の「Battery Constant=FF」を超えており、自動設定されなかった。

12V55Ahの自動車用バッテリーを2個接続して「Battery Constant」を設定している例があり、外部電池 EXTBATTSを設定して調整できるようだ。
別記事だが、自動車用電池で稼働させている写真(最後の方)。

シャットダウン発生までの時間138分で「Battery Constant」を設定する事にした。後は、自動キャリブレーションの調整に任せる。外部電池の数量(EXTBATTS)は、「>(半角)」で設定。
Enter an ESC character (or ctl-[) to exit.

YSM
0FF
j0126:
>000
11PROG
>000
+01
j0378:
0FF
-FE
・・・途中削除・・・
-C0
0C0
j0277:
0C0
-BF
・・・途中削除・・・
-A0
0A0
j0226:
0A0
-9F
・・・途中削除・・・
-70
j0150:
070
-6F
・・・途中削除・・・
-61
-60
060
j0124:
060
・・・途中削除・・・
+69
+6A
j0140:
06A
-69
j0138:
P018.7
j0138:
069
RBYE
^[
LOADPCT=18.7%、TIMELEFT=138.0 minは、EXTBATTS=1、0=69となった。
EXTBATTSの設定値は、自動車用の55Ahバッテリーの場合、55/7=7.86なのでEXTBATTS=7とする。「0」で調整出来なければ、EXTBATTS=EXTBATTS+1とする。スーパーナットのRBC20J-Sは、9Ahなので9/7=1.29 、EXTBATTS=1。
SUA500のバッテリーRBC48Lが12V7AhなのでEXTBATTS=0 の時「0」で調整できる最大容量と判断した。

トリクル充電値も調整してみた。
電池端子で「27.4V」となるよう

設定
Enter an ESC character (or ctl-[) to exit.

YSM
11PROG
B27.87
-F6
-F5
-F4
B27.60
RBYE
^[
BATTVの設定値は、「27.6V」で「F4」。バッテリー接続ケーブルのドロップも考慮された設定になる。外部電池に細い線で引回すとケーブルドロップが大きくなり動作しなくなることが紹介せれていたので注意。
現在の状態
root@debian10:~# apcaccess
APC      : 001,051,1153
DATE     : 2020-10-05 17:26:01 +0900  
HOSTNAME : debian10
VERSION  : 3.14.14 (31 May 2016) debian
UPSNAME  : SU500   
CABLE    : Custom Cable Smart
DRIVER   : APC Smart UPS (any)
UPSMODE  : Stand Alone
STARTTIME: 2020-10-04 09:39:39 +0900  
MODEL    : SMART-UPS 500
STATUS   : ONLINE 
LINEV    : 103.3 Volts
LOADPCT  : 18.7 Percent
BCHARGE  : 100.0 Percent
TIMELEFT : 138.0 Minutes
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME  : 0 Seconds
MAXLINEV : 104.0 Volts
MINLINEV : 102.7 Volts
OUTPUTV  : 103.3 Volts
SENSE    : High
DWAKE    : 0 Seconds
DSHUTD   : 180 Seconds
DLOWBATT : 2 Minutes
LOTRANS  : 90.0 Volts
HITRANS  : 110.0 Volts
RETPCT   : 0.0 Percent
ITEMP    : 45.9 C
ALARMDEL : 5 Seconds
BATTV    : 27.6 Volts
LINEFREQ : 50.0 Hz
LASTXFER : Line voltage notch or spike
NUMXFERS : 0
TONBATT  : 0 Seconds
CUMONBATT: 0 Seconds
XOFFBATT : N/A
SELFTEST : NO
STESTI   : 336
STATFLAG : 0x05000008
DIPSW    : 0x00
REG1     : 0x00
REG2     : 0x00
REG3     : 0x00
MANDATE  : 01/30/01
SERIALNO : NS0105XXXXXX
BATTDATE : 09/18/20
NOMOUTV  : 100 Volts
NOMBATTV : 24.0 Volts
EXTBATTS : 1
FIRMWARE : 120.14S.A
END APC  : 2020-10-05 17:26:25 +0900
もう暫く、製造後19年経つSU500が使用できそうだ。
ITEMP=45.9 Cだが、バッテリー表面温度は、37.0 C程度(外気温27.4 C時)
LOADPCT=18.7 %は、PR-S300SE/NVR510/GS116EとNVR500/WZR-HP-G300(OpenWrt)/AirMac Time Capsuleを稼働中
TIMELEFT=138 min
-------
DS216J(1TB mirror)/HDC2-U2.0(1TB mirror)/HDCA-U2.0(2TB)/XPS8300は、SMT500Jで稼働
LOADPCT=18.2 %, LOADAPNT=15.6 %, TIMELEFT=84.0 min
-------
上記全ての機材をSU500に接続すると
LOADPCT=49.9 % TIMELEFT=39 min

近隣の大きな停電事象
平成11(1999)年11月22日 航空自衛隊機墜落
(平成23(2011)年3月 東日本大震災・計画停電なし)
平成26(2014)年 6月12日 電線切断事故
平成28(2016)年10月12日 変電所火災
-------

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Smart UPS 500 (NEC designed by APC) でDebian10 とDS216J(Synology) に電源供給

2020-10-04 15:00:00 | UPS
バッテリー交換のアラームが鳴りはじめた

確かバッテリーは、APCの「RBC20J」だったと。販売終了品になっている。
今回交換すれば、3回目。頂き物のUPSなのだが、記憶の限り1回目のバッテリー交換が2009年11月頃。この時は、6時間毎に90秒程度鳴るアラームを無視していたら、「物凄い臭気」が発生。慌てて主電源を外し、使用停止状態にした。APCの交換バッテリーを通販で調達。
2014年12月頃に2回目のバッテリー交換。そして2020年7月頃からバッテリー交換アラームが鳴りはじめた。
1回目のバッテリー交換から11年。使用開始時期を失念したが、通算16-7年使用している事になる。幾ら何でも本体がいつ故障してもおかしくない。

UPSに接続されている機材は、ファイルサーバ、ネットワーク機材(ひかり電話HGW/ルータNVR510/スイッチGS116E/AirMac Time Capsule)とサーバ用途PC1台。

ファイルサーバは、DS216J(1TBytesミラー)とバックアップ用でUSB接続したIO DataのHDC2-U2.0(1TBytesミラー)とHDCA-U2.0。電源切断でHDD不具合が発生しても、ミラーDiskからの復旧あるいは、USBバックアップHDDからの再生で対応するため、UPSシャットダウン無しの接続で運用。

ネットワーク機材は、UPSパワーが尽きるまで頑張る。
AirMac Time Capsule(2TBytes)は、Time Machineバックアップの要であるがUPSシャットダウン無しの接続(そもそもシャットダウン制御が出来ない)。

サーバー用途PCは、当初「タワー型デスクトップ機ADX2600(マウスコンピューター)とCRTディスプレー(後にLCDディスプレー)」を接続使用していた。OSは、WindowsXP。付属のPowerChuteをシリアル接続していたが、常時稼働のサーバ機と異なり、使用中に停電自動シャットダウンに至る事は無かった。後継機材XPS8300(Dell)は、シリアルポートが無かった。今まで瞬断や非稼働中の停電だったのでUPSによるシャットダウン制御をしてこなかった。

Smart UPS 500 の交換バッテリーがバッテリーストア.comで「スーパーナットRBC20J-S」を見つけたので、後継機選出まで再稼働させ、負荷状態の把握とシャットダウン制御の確認を行う事とした。

(1)Debian10で接続するUPS用ツール
APCに特化している「APCUPSD」とDS216Jで使用されている「Nework UPS Tools(nut)」を検討してみた。
XPS8300には、シリアルポートが無い(基板上には、PS2/Serialコネクタが存在)ので、USB-RS232C([USB-CVRS9]サンワサプライ/ATEN UC232Aドライバー互換)を使用する。

「apcupsd/stable 3.14.14-2 amd64」と「nut/stable 2.7.4-8」をインストールしたが排他的にどちらか一方しかインストール出来ない。
また、nutは、シリアル接続の「Smart UPS 500」に接続するがプロトコルを認識しない。
root@debian10:/root# /usr/sbin/upsdrvctl start SU500
Network UPS Tools - UPS driver controller 2.7.4
Network UPS Tools - APC Smart protocol driver 3.1 (2.7.4)
APC command table version 3.1
[7] unrecognized
「/lib/nut」に各種ドライバーがあり「apcsmart-old」を試してみると認識した。nutは、シリアルデバイスをnutグループでアクセスするため「/etc/udev/rules.d/99_nut-serialups.rules」でアクセス権を与える。Debian10で「apt install nut」したが、「/etc/init.d/nut-server」などのinit起動ファイルがインストールされない。「service nut-server start/stop/restart」で起動停止。ただ、「upsc」で得られるups情報が少ないようなので、「apcupsd」を使う事にする。。
apcupsdのapcaccessでUPS情報を確認
root@debian10:/root# /sbin/apcaccess
APC      : 001,051,1158
DATE     : 2020-08-28 12:55:26 +0900  
HOSTNAME : debian10
VERSION  : 3.14.14 (31 May 2016) debian
UPSNAME  : UPS_IDEN
CABLE    : Custom Cable Smart
DRIVER   : APC Smart UPS (any)
UPSMODE  : Stand Alone
STARTTIME: 2020-08-28 11:44:09 +0900  
MODEL    : SMART-UPS 500
STATUS   : ONLINE LOWBATT 
LINEV    : 102.0 Volts
LOADPCT  : 44.2 Percent
BCHARGE  : 100.0 Percent
TIMELEFT : 3.0 Minutes
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME  : 0 Seconds
MAXLINEV : 102.0 Volts
MINLINEV : 100.7 Volts
OUTPUTV  : 102.0 Volts
SENSE    : High
DWAKE    : 0 Seconds
DSHUTD   : 180 Seconds
DLOWBATT : 2 Minutes
LOTRANS  : 90.0 Volts
HITRANS  : 110.0 Volts
RETPCT   : 0.0 Percent
ITEMP    : 53.5 C
ALARMDEL : 5 Seconds
BATTV    : 27.9 Volts
LINEFREQ : 50.0 Hz
LASTXFER : Automatic or explicit self test
NUMXFERS : 0
TONBATT  : 0 Seconds
CUMONBATT: 0 Seconds
XOFFBATT : N/A
SELFTEST : NO
STESTI   : 336
STATFLAG : 0x05000048
DIPSW    : 0x00
REG1     : 0x00
REG2     : 0x00
REG3     : 0x00
MANDATE  : 01/30/01
SERIALNO : NS0105XXXXXX
BATTDATE : 01/30/01
NOMOUTV  : 100 Volts
NOMBATTV : 24.0 Volts
EXTBATTS : 0
FIRMWARE : 120.14S.A
END APC  : 2020-08-28 12:55:52 +0900
室内温度が約35度。
UPSの使用温度範囲が0〜40度
装置内温度が53.5度。過酷な環境。
100%充電後で負荷44.2%でSTATUSが「LOWBATT」
標準のRBC20Jは、12V5Ah(x2)だがスーバーナットRBC20J-Sは、12V9Ah(x2)で、SU700のRBC137Jの12V7.2Ah(x2)より容量が大きい。負荷50%(160W)で17分(5Ah)、26分(7.2Ah)なので「LOWBATT」にならないはず。。。
長期在庫の容量低下品を摑まされたか。。。SU500の不具合か。。。一応問い合わせてみよう。。。
負荷容量を減し「TIMELEFT>MINTIMEL」を確保して作業を進める事にした。

(2)Synology DS216JのUPS対応
DS216JのUPS接続は、「USB」。シリアル接続が出来るのか不明。
USB-Serialの接続そのものは可能のようだ。upsも「/usr/syno/etc/ups/ups.conf」を操作すれば、可能かもしれない。確認しない事にする。
NUTには、「apcupsd-nut」というモデュールがあるらしい。が、ds216jに「apcupsd-nut」ドライバーは、無さそう。
Apcupsd NUT Wrapper Script」を「ucspi-tcp」で動作させ、「apcupsd」と連携させる事が出来るようだ。これを使う事にする。
最近のAPC upsだと機種によって、ds216jをusb接続、同時にdebian10をシリアル接続が出来そうだ。

(3)Apcupsd NUT Wrapper Script
debian10で「Apcupsd NUT Wrapper Script」を動かしてみた。起動時に実行されるよう「init.d」にも登録した。
root@debian10:/root# /etc/init.d/apcupsd-nut-srv
#!/bin/sh
### BEGIN INIT INFO
# Provides:          apcupsd-nut-srv
# Required-Start:    $network $remote_fs $syslog
# Required-Stop:     $network $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       APC UPS wrapper for NUT client
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/tcpserver
DAEMON1=/usr/local/bin/usvnutwrapper.sh
CONFIG=/etc/default/apcupsd-nut-srv
dir="/root"
cmd="/usr/bin/tcpserver -q -c 10 -HR 0.0.0.0 3493 /usr/local/bin/usvnutwrapper.sh"
user="root"

name=`basename $0`
pid_file="/var/run/$name.pid"
stdout_log="/var/log/$name.log"
stderr_log="/var/log/$name.err"

test -x $DAEMON || exit 0
test -x $DAEMON1 || exit 0
test -e $CONFIG || exit 0

set -e
. $CONFIG
if [ "x$ISCONFIGURED" != "yes" ] ;
then
    echo "Please check your configuration ISCONFIGURED in /etc/default/apcupsd-nut-srv"
    exit 0
fi

get_pid() {
    cat "$pid_file"
}

is_running() {
    [ -f "$pid_file" ] && ps -p `get_pid` > /dev/null 2>&1
}

case "$1" in
    start)
    if is_running; then
        echo "Already started"
    else
        echo "Starting $name"
        cd "$dir"
        if [ -z "$user" ]; then
            $cmd &
        else
            $cmd &
        fi
        echo $! > "$pid_file"
        if ! is_running; then
            echo "Unable to start, see $stdout_log and $stderr_log"
            exit 1
        fi
    fi
    ;;
    stop)
    if is_running; then
        echo -n "Stopping $name.."
        pkill -P `get_pid`
        kill `get_pid`
        for i in 1 2 3 4 5 6 7 8 9 10
        # for i in `seq 10`
        do
            if ! is_running; then
                break
            fi

            echo -n "."
            sleep 1
        done
        echo

        if is_running; then
            echo "Not stopped; may still be shutting down or shutdown may have failed"
            exit 1
        else
            echo "Stopped"
            if [ -f "$pid_file" ]; then
                rm "$pid_file"
            fi
        fi
    else
        echo "Not running"
    fi
    ;;
    restart)
    $0 stop
    if is_running; then
        echo "Unable to stop, will not attempt to start"
        exit 1
    fi
    $0 start
    ;;
    status)
    if is_running; then
        echo "Running"
    else
        echo "Stopped"
        exit 1
    fi
    ;;
    *)
    echo "Usage: $0 {start|stop|restart|status}"
    exit 1
    ;;
esac

exit 0
「Apcupsd NUT Wrapper Script」は、「ds216j」からのUPSコマンドをポート3493で受け、「apcaccess -p status」でSTATUS情報を得て「VAR ups ups.status "OL"」など変換して応答する。
ds216j上でnutのupscコマンドでups情報を取得してみる。以下の二つのコマンドに応答する。

sh-4.3# upsc ups@192.168.1.57:3493 ups.status
OL
sh-4.3# upsc ups@192.168.1.57:3493
device.mfr: USV NUT Apcupsd Wrapper
device.model: SMART-UPS 500
device.serial: NS0105xxxxxx
device.type: ups
ups.mfr: USV NUT Apcupsd Wrapper
ups.mfr.date: 01/30/01
ups.id: APC
ups.vendorid: 051d
ups.model: SMART-UPS 500
ups.status: OL
ups.load: 39.0
ups.serial: NS0105xxxxxx
ups.firmware: 120.14S.A
ups.firmware.aux: 120.14S.A
ups.productid: 001,051,1146
ups.temperature: 48.6
ups.realpower.nominal: -1
ups.test.result: No Test in the last 5mins
ups.delay.start: 0
ups.delay.shutdown: 180
ups.timer.reboot: -1
ups.timer.start: -1
ups.timer.shutdown: -1
battery.runtime: 300
battery.runtime.low: 120
battery.charge: 100.0
battery.charge.low: 5
battery.charge.warning: 50
battery.voltage: 27.9
battery.voltage.nominal: 24.0
battery.date: 08/28/20
battery.mfr.date: 08/28/20
battery.temperature: 48.6
battery.type: PbAc
driver.name: usbhid-ups
driver.version.internal: apcupsd 3.14.14 (31 May 2016) debian
driver.version.data: APC Smart UPS (any)
driver.parameter.pollfreq: 60
driver.parameter.pollinterval: 10
input.voltage: 102.0
input.voltage.nominal: 230
input.sensitivity: High
input.transfer.high: 110.0
input.transfer.low: 90.0
input.frequency: 50.0
input.frequency.nominal: 50
input.transfer.reason: 
output.voltage: 102.0
output.voltage.nominal: 100
server.info: debian10
ups.beeper.status: enabled

「usvnutwrapper.sh」の応答箇所に日付と応答内容をファイル出力するコマンドを追加して電源喪失時の推移を記録確認した。
Wed Sep 2 14:51:16 JST 2020 VAR ups ups.status "OL"
Wed Sep 2 14:51:21 JST 2020 VAR ups ups.status "OL"
---------- ups power failur --------------
Wed Sep 2 14:51:27 JST 2020 VAR ups ups.status "OB DISCHRG"
Wed Sep 2 14:51:33 JST 2020 VAR ups ups.status "OB DISCHRG"
----------- ups on battery -------
Wed Sep 2 14:52:35 JST 2020 VAR ups ups.status "LB OB DISCHRG"
Wed Sep 2 14:52:35 JST 2020 VAR ups ups.status "LB OB DISCHRG" -- ds216j safe mode
Wed Sep 2 14:52:40 JST 2020 VAR ups ups.status "LB OB DISCHRG"
----------- debian10 shut down -------
----------- ups power off -------------------    -- ds216j power off
----------- ups power on -------------------     -- ds216j power on
----------- debian10  boot up ----------
Wed Sep 2 15:02:17 JST 2020 VAR ups ups.status "LB OL"    -- ds216j safe mode
Wed Sep 2 15:02:22 JST 2020 VAR ups ups.status "LB OL"
----------- ups  charg battery ---------
Wed Sep 2 15:10:08 JST 2020 VAR ups ups.status "LB OL"
Wed Sep 2 15:10:14 JST 2020 VAR ups ups.status "OL"    -- ds216j still safe mode
Wed Sep 2 15:10:19 JST 2020 VAR ups ups.status "OL"
UPSの入力電源消失後、電池動作に移行。
STATUSがONLINEからONBATTとなりNUTクライアントに「OL」から「OB DISCHRG」応答する。
TIMELEFT=MINTIMELになるとLOWBATTとなり「LB OB DISCHRG」応答する。
ds216jは、「LB」を受け、セーフティモードへ移行する(電源断準備)。
apcupsdは、「shutdown -h」を実行し、halt直前にUPS電源断コマンド「killpower」を実行する。
upsは、DSHUTD時間後にups出力を断する(DLOWBATT>TIMELEFTまたはMBATTCHG>BCHARGEで即時出力断)。
upsの入力復電後、DWAKE時間後にups出力を回復させる。
killpowerは、一度発行されるとキャンセルできない。DSHUTD時間中に電源回復してもキャンセルされない。apcupsdの説明に「意図しないups出力断を発生させないため、必要に応じて/etc/apcupsd/apccontrolのkillpowerコマンドをコメントアウト」するよう記載されている。ひかり電話使用中にPR-S300SEの電源断を実施してしまった。
debian10及びds216jが起動する。起動順位によってds216jは、「ups接続失敗」か「LB OL」を受ける。「ups接続失敗」時は、通常動作、「LB OL」では、セーフティモード状態となる。
upsの充電が進みTIMELEFT>MINTIMELとなると「OL」を受けるが、セーフティモードから通常状態戻らない。

「usvsnutwrapper.sh」のコードを確認するとBCHARGEが100%になるまで「CHRG OL」が出力され、100%で「OL」が出力される。
BCHARGEのチェックは、fullstatus()チェックで行われる。
ds216jは、DSMにログインされていると「LIST var ups」コマンドが1分毎に実行されるが、ログオフすると実行されない。結果、多くの場合、fullstatus()チェックが実行されず、「CHRG OL」が出力されない。sshログインでは、「LIST var ups」コマンドが発行されない。
下記の処理を加え、「CHRG OL」出力されるようにした。
usvnutwrapper.sh
getstatusdata() {
APCACCESS="$(apcaccess -h $APCUPSDSERVER -p STATUS)"
APCBCHARGE="$(apcaccess -h $APCUPSDSERVER -p BCHARGE | cut -d'.' -f1)"
VALUE="${APCACCESS%%[[:cntrl:]]}"
UPS_STATUS=""
                                if [ $APCBCHARGE = "100" ]; then BATTNOTFULL=0; else BATTNOTFULL=1; fi
                                if [[ $VALUE == *"ONLINE"* ]]; then
                                        UPS_STATUS="OL $UPS_STATUS";
                                        if [ $BATTNOTFULL = 1 ]; then UPS_STATUS="CHRG $UPS_STATUS"; fi
                                fi
                                if [[ $VALUE == *"ONBATT"* ]]; then UPS_STATUS="OB DISCHRG $UPS_STATUS";  fi
                                if [[ $VALUE == *"LOWBATT"* ]]; then UPS_STATUS="LB $UPS_STATUS"; fi
「LB CHRG OL」から「CHRG OL」「OL」の変化でもds216jのセーフモードから通常起動状態へ推移しない。
テストの結果、「ups接続失敗」から「CHRG OL」「OL」へ変化するとセーフモードから通常起動状態へ推移する。
「usvnutwrapper.sh」でONBATTの時だけLOWBATTとなるよう対応してみた。
root@debian10:~# diff /usr/local/bin/usvnutwrapper.sh.org /usr/local/bin/usvnutwrapper.sh
111,115c111,116
< 				UPS_STATUS="OL $UPS_STATUS";
< 				if [ $BATTNOTFULL = 1 ]; then UPS_STATUS="CHRG $UPS_STATUS"; fi	#if battery is not at 100%, add charging flag
<  				fi
< 				if [[ $VALUE == *"ONBATT"* ]]; then UPS_STATUS="OB DISCHRG $UPS_STATUS"; fi #onbattery with discharge flag
< 				if [[ $VALUE == *"LOWBATT"* ]]; then UPS_STATUS="LB $UPS_STATUS"; fi
---
> 				UPS_STATUS="OL $UPS_STATUS";
> 				if [ $BATTNOTFULL = 1 ]; then UPS_STATUS="CHRG $UPS_STATUS"; fi	#if battery is not at 100%, add charging flag
> 				fi
> 				if [[ $VALUE == *"ONBATT"* ]]; then UPS_STATUS="OB DISCHRG $UPS_STATUS";  #onbattery with discharge flag
> 					if [[ $VALUE == *"LOWBATT"* ]]; then UPS_STATUS="LB $UPS_STATUS"; fi
> 				fi
186a188,189
> APCBCHARGE="$(apcaccess -h $APCUPSDSERVER -p BCHARGE | cut -d'.' -f1)"
> APCTIMELEFT="$(apcaccess -h $APCUPSDSERVER -p TIMELEFT | cut -d'.' -f1)"
189c192
< 
---
> 				if [ $APCBCHARGE = "100" ]; then BATTNOTFULL=0; else BATTNOTFULL=1; fi 
191,195c194,199
< 					UPS_STATUS="OL $UPS_STATUS";
< 					if [ $BATTNOTFULL = 1 ]; then UPS_STATUS="CHRG $UPS_STATUS"; fi
< 				fi
< 				if [[ $VALUE == *"ONBATT"* ]]; then UPS_STATUS="OB DISCHRG $UPS_STATUS"; fi
< 				if [[ $VALUE == *"LOWBATT"* ]]; then UPS_STATUS="LB $UPS_STATUS"; fi
---
> 					UPS_STATUS="OL $UPS_STATUS";
> 					if [ $BATTNOTFULL = 1 ]; then UPS_STATUS="CHRG $UPS_STATUS"; fi
> 				fi
> 				if [[ $VALUE == *"ONBATT"* ]]; then UPS_STATUS="OB DISCHRG $UPS_STATUS";
> 					if [[ $VALUE == *"LOWBATT"* ]]; then UPS_STATUS="LB $UPS_STATUS"; fi
> 				fi
204d207
< 			
214a218
> APCMINTIMEL="$(apcaccess -h $APCUPSDSERVER -p MINTIMEL | cut -d' ' -f1)"
240c244
< 			echo -en "VAR ups ${COMMAND:12} \"$UPS_STATUS\"\n" 
---
> 			echo -en "VAR ups ${COMMAND:12} \"$UPS_STATUS\"\n" 
307d310
< 	
復電時に「OL」となるためds216jが稼動状態で起動する。

(4)UPS対策
Smart UPS 500(SU500)の3回目電池交換が完了したが、機材の老朽化が懸念される。後継機候補としてバッテリー容量の少ない(バッテリー稼動時間が少ない)低価格品で複数台使用するか、後継機のSmart UPS 500(SMT500)とするか検討の結果、SMT500を導入する事とした。選定理由には、スーパーナットのバッテリー容量確認も影響した。

スーパーナットのRBC20J-Sの容量確認
・後継UPSを選定(SMT500J)
・UPSバックアップするシステム機材構成
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする