Настройка UPS

Материал из Belgorod Linux User Group - Белгород

Перейти к: навигация, поиск

Установка и настройка UPS под Linux

Содержание

USB

Если у вас UPS подключен по RS-232 - можете пропустить это пункт. Смотрим виден ли наш УПС:

lsusb                                                                                     
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 003: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Виден. Можно приступать к настройке.

NUT

NUT - комплекс ПО, позволяющий "увидеть" UPS в Linux, промониторить его и выполнить скрипт выключения при критическом уровне значения заряда батареи.

Ставим NUT с флагом usb, а за одно и usbutils, если управляемый UPS у вас имеет USB интерфейс:

echo "sys-power/nut usb" >> /etc/portage/package.use
emerge -v sys-power/nut usbutils

upsdrv

Редактируем файл /etc/nut/ups.conf, прописывая в нем наш UPS:

Самое сложно тут наверное это подобрать driver. К примеру для модели IPPON Smart winner 3000 я где-то нашел, что нужен blazer_ser, для APC Smart-UPS 3000XL подошел универсальный драйвер USB-UPS-ов: usbhid-ups

В квадратных скобках пишем имя УПС-а (любое), а дальше драйвер, порт и описание.

[ippon3000]
driver = blazer_ser
port = /dev/ttyS0
desc = "IPPON Smart winner 3000"
[apc3000xl]
driver = usbhid-ups
port = auto
desc = "APC Smart-UPS 3000XL"

Запускаем upsdrv и добавляем его в автозагрузку

/etc/init.d/upsdrv start
rc-update add upsdrv default

Если у вас возникает ошибки типа:

can't claim usb device could not detach kernel driver from interface 0 operation not permitted

Проверьте конфиг ядра по части USB. Должно быть примерно так:

CONFIG_USB_HID=y
CONFIG_USB_EHCI_HCD=m
CONFIG_USB_OHCI_HCD=m
CONFIG_USB_UHCI_HCD=m
CONFIG_USB_DEVICEFS=y
# CONFIG_USB_DEVICE_CLASS is not set

Обязательно не вкомпилировать CONFIG_USB_DEVICE_CLASS в ядро, а то оно занимает устройство.

upsd

Редактируем файл /etc/nut/upsd.conf

Раскомментируем строку:

 LISTEN 127.0.0.1 3493

Далее в файле /etc/nut/upsd.users раскомментируем строку авторизации:

[upsmon]
               password  = pass
               upsmon master

Запускаем, добавляем в автозагрузку

/etc/init.d/upsd start
rc-update add upsd default

Проверяем:

upsc apc3000xl@localhost

Тут apc3000xl - имя УПС-а, которое мы записывали в ups.conf в квадратных скобках, а localhost - адрес, где висит демон, который мы только что запустили.

Нам важна вот эта строка:

upsc apc3000xl@localhost | grep ups.status
ups.status: OL
  • OL - Статус OnLine, означает что UPS подключен к сети 220 и там есть напряжение
  • OB - Статус OnBattery, означает что UPS в данное время питается от батареи, т.е. напряжения в сети нет.

Также будет полезна информация о заряде.

battery.charge: 100

upsmon

Чтобы следить за статусам UPS есть демон upsmon. Редактируем файл /etc/nut/upsmon.conf

Вначале файла вписываем директиву MONITOR с указанием нашего UPS-а:

MONITOR apc3000xl@localhost 1 upsmon pass slave

Также нас интересует команда выключения:

SHUTDOWNCMD "/sbin/shutdown -h +0"

при необходимости ее можно заменить на скрипт выключения к примеру виртуальных машин. Также при разрядке батареи создается файл-тригер

POWERDOWNFLAG /etc/killpower

его появление можно мониторить сторонними скриптами для того, чтобы отловить момент разрядки батареи.

Запускаем, добавляем, радуемся

/etc/init.d/upsmon start
rc-update add upsmon default

Смотрим если что лог /var/log/messages.

Проверить как останавливается система можно сказав upsd что UPS получил сигнал выключения питания

upsmon -c fsd


Ссылки

Личные инструменты