Raspberry piから2台のAPC UPSの状態を取得する

APC RS 550Gを2台使っていて、そのモニタリングをRaspberry piから行いたくなったので、そのメモ書きです。

lsusbを確認すると、2個、APCのUPSが見えています。

$ lsusb
Bus 001 Device 005: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
Bus 001 Device 009: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
Bus 001 Device 003: ID 0424:ec00 Microchip Technology, Inc. (formerly SMSC) SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Microchip Technology, Inc. (formerly SMSC) SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

BusとDeivceを-sで指定しつつ、-vで詳細を出力します。

$ lsusb -v -s 001:005

Bus 001 Device 005: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
Couldn't open device, some information will be missing
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 550G FW:855.L4 -P.A USB FW:L4 -P
  iSerial                 3 J11550xxxxxx
  bNumConfigurations      1

詳細からiSerialをみて、udevルールを作ります。

$ sudo echo 'KERNEL=="hiddev*", ATTRS{idVendor}=="051d", ATTRS{idProduct}=="0002", ,ATTRS{serial}=="J11550xxxxxx", SYMLINK+="apcups1"' >  /etc/udev/rules.d/90-ups.rule
$ sudo echo 'KERNEL=="hiddev*", ATTRS{idVendor}=="051d", ATTRS{idProduct}=="0002", ,ATTRS{serial}=="J11550yyyyyy", SYMLINK+="apcups2"' >> /etc/udev/rules.d/90-ups.rule

udevルールを適用しなおすと、/dev/apcups1と2が作成されています。これで/dev/apcups1でアクセスすると必ず”J11550xxxxxx”のUPSの情報が取得できます。

$ sudo udevadm trigger
$ ls -al /dev/apc*
lrwxrwxrwx 1 root root 11 Mar 13 12:57 /dev/apcups1 -> usb/hiddev1
lrwxrwxrwx 1 root root 11 Mar 13 12:57 /dev/apcups2 -> usb/hiddev0

次に設定ファイルをコピーし、DEVICEをそれぞれ/dev/apcups1と/dev/apcups2を指定します。他差分もdiffの通りにします。

$ sudo cp -p /etc/apcupsd/apcupsd.conf /etc/apcupsd/apcupsd-1.conf
$ sudo cp -p /etc/apcupsd/apcupsd.conf /etc/apcupsd/apcupsd-2.conf

diff /etc/apcupsd/apcupsd-1.conf /etc/apcupsd/apcupsd-2.conf
18c18
< UPSNAME UPS1
---
> UPSNAME UPS2
90c90
< DEVICE /dev/apcups1
---
> DEVICE /dev/apcups2
220c220
< EVENTSFILE /var/log/apcupsd-1.events
---
> EVENTSFILE /var/log/apcupsd-2.events
255c255
< STATFILE /var/log/apcupsd-1.status
---
> STATFILE /var/log/apcupsd-2.status

設定ファイルを分けたのでそれぞれのデーモンを起動します。

# apcupsd -f /etc/apcupsd/apcupsd-1.conf
# apcupsd -f /etc/apcupsd/apcupsd-2.conf

最後にapcaccessで確認します。シリアルがそれぞれ別になっており、状態が取得できています。

$ apcaccess -f /etc/apcupsd/apcupsd-1.conf
APC      : 001,036,0863
DATE     : 2024-03-13 13:45:10 +0000
HOSTNAME : rp3b-01
VERSION  : 3.14.14 (31 May 2016) debian
UPSNAME  : UPS1
CABLE    : USB Cable
DRIVER   : USB UPS Driver
UPSMODE  : Stand Alone
STARTTIME: 2024-03-13 13:44:39 +0000
MODEL    : APC RS 550G
STATUS   : ONLINE
LINEV    : 100.0 Volts
LOADPCT  : 45.0 Percent
BCHARGE  : 100.0 Percent
:
STATFLAG : 0x05000008
SERIALNO : J11550xxxxxx
BATTDATE : 2024-01-21
NOMINV   : 100 Volts
NOMBATTV : 12.0 Volts
NOMPOWER : 330 Watts
FIRMWARE : 855.L4 -P.A USB FW:
END APC  : 2024-03-13 13:45:37 +0000
$ apcaccess -f /etc/apcupsd/apcupsd-2.conf
APC      : 001,036,0866
DATE     : 2024-03-13 13:03:30 +0000
HOSTNAME : rp3b-01
VERSION  : 3.14.14 (31 May 2016) debian
UPSNAME  : rp3b-01
CABLE    : USB Cable
DRIVER   : USB UPS Driver
UPSMODE  : Stand Alone
STARTTIME: 2024-03-13 12:49:46 +0000
MODEL    : APC RS 550G
STATUS   : ONLINE
LINEV    : 101.0 Volts
LOADPCT  : 51.0 Percent
BCHARGE  : 100.0 Percent
:
SERIALNO : J11550yyyyyy
BATTDATE : 2024-01-21
NOMINV   : 100 Volts
NOMBATTV : 12.0 Volts
NOMPOWER : 330 Watts
FIRMWARE : 855.L4 -P.A USB FW:
END APC  : 2024-03-13 13:03:34 +0000

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)