定期的にやってくる UPS のバッテリー交換が面倒になってきたので,リチウムイオンバッテリーを使用した UPS に交換してみました.Linux 上で Network UPS Tools (NUT) を使って管理する方法を紹介したいと思います.
設定内容
NUT は Server / Client モデルで連携して動作する仕組みになっています.UPS と USB で接続したマシン(親機)ではServer と Client の両方を動かし,そのマシンと連携して動かすマシン(子機)では Clinet のみを動かします.
親機側では次の設定を行います.
- udev (認識した UPS を所定のデバイスファイルに結びつけ,Server を起動させる)
- アクセスアカウント設定
子機側では次の設定を行います.
- 監視する UPS の指定
設定内容
以降では,Ansible の設定ファイルを使って設定内容を紹介していきます.
親機
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
- name: Install Packages apt: pkg: [ 'nut' ] state: present - name: Setting NUT - udev template: src: 'udev/90-omron-ups.rules.j2' dest: '/etc/udev/rules.d/90-omron-ups.rules' - name: Setting NUT - modify systemd definition lineinfile: path: '/lib/systemd/system/nut-server.service' regexp: '{{ item.regexp }}' line: '{{ item.line }}' insertbefore: '{{ item.insertbefore }}' with_items: - regexp: 'After=.*' line: 'After=nut-driver.service network-online.target sys-subsystem-ups-devices-ups.device' insertbefore: '^\[Service\]' - regexp: 'WantedBy=.*' line: 'WantedBy=network-online.target sys-subsystem-ups-devices-ups.device' insertbefore: 'EOF' - regexp: 'BindsTo=.*' line: 'BindsTo=sys-subsystem-ups-devices-ups.device' insertbefore: '^\[Service\]' - name: Setting NUT - nut.conf replace: path: '/etc/nut/nut.conf' regexp: '^#?MODE=.*' replace: 'MODE=netserver' - name: Setting NUT - ups.conf blockinfile: dest: '/etc/nut/ups.conf' content: | [bl50t] driver = blazer_usb port = /dev/ups desc = "Omron UPS BL50T" vendorid = 0590 productid = 00CB subdriver = ippon default.battery.voltage.high = 27.5 default.battery.voltage.low = 23.3 insertbefore: EOF - name: Setting NUT - upsd.conf blockinfile: dest: '/etc/nut/upsd.conf' content: | LISTEN 127.0.0.1 LISTEN {{ ansible_default_ipv4.address }} insertbefore: EOF notify: restart nut-server - name: Setting NUT - upsd.users blockinfile: dest: '/etc/nut/upsd.users' content: | [upsmon] password = upspass upsmon master insertbefore: EOF - name: Setting NUT - upsmon.conf blockinfile: dest: '/etc/nut/upsmon.conf' content: | MONITOR bl50t@localhost 1 upsmon upspass master insertbefore: EOF |
最低電圧 default.battery.voltage.low に指定している 23.3 は,UPS を放電させて確認しました.
使用しているテンプレート 90-omron-ups.rules.j2 はこんな感じ.
1 2 3 |
# Generated by Ansible for {{ ansible_hostname }}.{{ network.domain }} # Omron BL50T - blazer_usb SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="0590", ATTRS{idProduct}=="00cb", MODE="0664", GROUP="nut", SYMLINK+="ups", TAG+="systemd", ENV{SYSTEMD_ALIAS}+="/sys/subsystem/ups/devices/ups" |
また,notify で使っているハンドラはこんな感じです.
1 2 3 4 5 6 7 8 9 10 |
- name: reload udev rules shell: udevadm control --reload-rules listen: "reload udev" - name: trigger udev shell: udevadm trigger listen: "reload udev" - name: restart nut-server service: name=nut-server state=restarted |
子機
1 2 3 4 5 6 7 8 9 10 11 12 13 |
- name: Setting NUT - nut.conf replace: path: '/etc/nut/nut.conf' regexp: '^#?MODE=.*' replace: 'MODE=netclient' - name: Setting NUT - upsmon.conf blockinfile: dest: '/etc/nut/upsmon.conf' content: | MONITOR {{ ups.nas }} 1 upsmon upspass master insertbefore: EOF notify: restart nut-client |
上記で使用した変数 ups.nas には「bl50t@親機のIPアドレス」を設定しておきます.
また,notify で使っているハンドラはこんな感じです.
1 2 |
- name: restart nut-client service: name=nut-client state=restarted |
おまけ
OMRON の UPS では,バックアップモードに切り替える電圧閾値(感度)を切り替えることが可能です.エアコンのコンセントが近くにあって,バックアップが誤動作しがちな場合は設定を変更するのがお勧めです.
設定は,UPS設定ユーティリティソフト [キャッシュ] を使うことで簡単に切り替えられます.
参考文献
- Omron BY50S を Linux で使う (udev のイケてる設定編)
- https://qiita.com/sugi_0000/items/89c025e3804cfcfdf11e
udev の設定を参考にしました.上で紹介したものは,systemd との連携に関する記述を追加しています.
コメント