LinuxとUPSとNUTとシリアルポート

Linux

はじめに

シリアルポートしか付いていないOMRONのUPSを購入しました。
パソコンと通信するためのソフトウェアは、OMRONのSimple Shutdown Software(オープンソース版)も使えますが、2024年3月で提供停止なので選択から外しました。
今回はNUT(Network UPS Tools)を使ったのでメモしておきます。

環境

パソコンとUPSは1対1で接続します。

- Debian12 bookworm
- nut 2.8.0-7
- OMRON BU3002R
nut - Debian Wiki

nut.confの設定

NUTのパッケージをインストールします。

sudo apt install nut

単独で動作するようにupsmon.confを編集します。

cd /etc/nut
sudo cp nut.conf nut.conf-org
sudo vi nut.conf

standaloneに変更します。

MODE=standalone

シリアルポートの確認

パソコンのBIOS設定でシリアルポートを有効にします。
OSを起動して、シリアルポートが認識されていることを確認します。

sudo dmesg | lv

ttyS0とttyS1の2個が認識されました。

 [    1.801048] 00:03: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A
 [    1.815275] 00:04: ttyS1 at I/O 0x2f8 (irq = 3, base_baud = 115200) is a 16550A

ups.confの設定

UPSのドライバや挙動を設定します。

cd /etc/nut
sudo cp ups.conf ups.conf-org
sudo vi ups.conf

・シリアルポートなのでドライバはblazer_ser
・シリアルポートなのでデバイスは/dev/ttyS0
・root権限で動かすのでroot
・電源OFFコマンドをパソコンに送信後に、UPSの電源OFFするまでの時間(offdelay)
・確実にUPSの電源をOFFして、起動させるための時間(ondelay)

blazer_serはBlazer社のUPS用ドライバが使えました。
また、root権限でないと動作しませんでした。

 [bu3200r]
  driver   = blazer_ser
  port     = /dev/ttyS0
  desc     = "OMRON BU3002R Serial Cable"
  user     = root
  offdelay = 60
  ondelay  = 120
USBHID-UPS(8)

設定反映と確認

設定反映のため、サービスを再起動します。

sudo systemctl restart nut-server

サービスの状態を確認します。

sudo systemctl status nut-server

blazer_serコマンドで通信できるか確認します。
bu3200rは、ups.confで設定した名称です。

sudo /usr/lib/nut/blazer_ser -DDDDD -a bu3200r

rootで動作し、ups.confの設定が反映されています。

Network UPS Tools - Megatec/Q1 protocol serial driver 1.58 (2.8.0)
   0.000000     [D3] do_global_args: var='maxretry' val='3'
   0.000052     [D3] main_arg: var='driver' val='blazer_ser'
   0.000058     [D3] main_arg: var='port' val='/dev/ttyS0'
   0.000067     [D5] send_to_all: SETINFO driver.parameter.port "/dev/ttyS0"
   0.000078     [D3] main_arg: var='desc' val='OMRON BU3002R Serial Cable'
   0.000082     [D3] main_arg: var='user' val='root'
   0.000087     [D1] Overriding previously specified user 'nut' with 'root' specified for driver section
   0.000093     [D3] main_arg: var='offdelay' val='60'
   0.000097     [D5] send_to_all: SETINFO driver.parameter.offdelay "60"
   0.000102     [D3] main_arg: var='ondelay' val='120'
   0.000111     [D5] send_to_all: SETINFO driver.parameter.ondelay "220"
   0.000118     [D1] debug level is '5'
   0.001208     [D5] send_to_all: SETINFO device.type "ups"
   0.001234     /dev/ttyS0 is locked by another process

upscコマンドでも確認します。
bu3200rは、ups.confで設定した名称です。

sudo upsc bu3200r
UPSCMD(8)

rootで動作していることや、UPSの情報が取得できました。

Init SSL without certificate database
battery.voltage: 81.90
battery.voltage.high: -1.08
battery.voltage.low: -0.87
device.type: ups
driver.name: blazer_ser
driver.parameter.offdelay: 60
driver.parameter.ondelay: 120
driver.parameter.pollinterval: 2
driver.parameter.port: /dev/ttyS0
driver.parameter.synchronous: auto
driver.version: 2.8.0
driver.version.internal: 1.58
input.frequency: 59.9
input.voltage: 206.8
input.voltage.fault: 0.0
output.voltage: 199.9
ups.beeper.status: disabled
ups.delay.shutdown: 60
ups.delay.start: 5400
ups.load: 6
ups.status: OL
ups.temperature: 28.1
ups.type: online

Comments