FreeBSDでOMRON UPSを監視する

OMRONのUPSを使っているが、長年監視を放置していた。いい加減監視したいと思って設定したので、記録を残しておく。
まず、OpenBSD/NetBSDな人は以下を参照のこと。

オムロン製UPSをOpenBSD/NetBSDで使うためのメモ (GitHub Gist)

本記事は上記を参考に、FreeBSD 14.0向けに設定してみた記録になる。

やることは以下。

  • nutをインストールする
  • UPSのVendor IDとProduct IDを調べる
  • nutユーザがデバイスを使えるようにdevdを設定する
  • nutを設定する(※本稿では全部は扱わない)

諸事情あってproduct IDはすべて伏せている。参考にして設定する奇特な人は、XXXXのような部分は適宜読み替えてほしい。

nutをインストールする

pkgでいっぱつ。

# pkg install nut

UPS関係だから名前にUPSが入ってるだろうと思って pkg search ups しても出てこない。
nutという名前は覚えて帰ろう。

UPSのVendor IDとProduct IDを調べる

なんでもいいので調べる。
ここでは dmesgugenX.X を調べたあと、usbconfigdump_device_desc を使って調べた。

# usbconfig -d ugenX.X dump_device_desc
ugen0.3:  at usbus0, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON (100mA)
(...snip...)
  idVendor = 0x0590 
  idProduct = 0xXXXX 

nutユーザがデバイスを使えるようにdevdを設定する

nutはnutユーザで動作するので、通常 root:wheel/dev/ugenX.X (の指す /dev/usb/X.X) を触れない。
devd を設定して、OMRON UPSだったらnutユーザにプレゼントしよう。
設定後は service devd restart をお忘れなく。

/usr/local/etc/devd/nut-usb-omron.conf:

notify 100 {
  match "system" "USB";
  match "subsystem" "INTERFACE";
  match "type" "ATTACH";
  match "vendor" "0x0590";
  match "product" "0xXXXX";
        action "chgrp nut /dev/$cdev; chmod g+rw /dev/$cdev";
};

/usr/local/etc/devd/nut-usb.conf を参考に書いたが、subsystemはDEVICEではなくINTERFACEになるようだ。
うまくいかないなら devd -d を実行して確認するといい。

nutを設定する

こんな感じ。
driverは参考資料では blazer_usb だが、maintenance-onlyだよ、というので nutdrv_qx に変えた。

/usr/local/etc/nut/ups.conf:

[XXXXX]
        driver = nutdrv_qx
        port = auto
        desc = "OMRON XXXXX"
        vendorid = 0590
        productid = XXXX
        subdriver = ippon

通信テストは、以下のようにしてドライバを直接実行すればいい。read: (... のような出力が定期的に出ればOK。

# /usr/local/libexec/nut/nutdrv_qx -DDDD -a XXXXX

あとはUPSがどうなったらどうしたい、の話になるので、man nut.conf でも実行してnutと仲良くなるといい。

私はドライバ出力を食ってprometheusに出力したかっただけなので、nut自体は使っていない。