Просмотр Исходного

{toc}

h2. Подсистема контроля UPS

h3. Зачем нужна подсистема контроля UPS?

При отсутствии подключенного UPS, подсистема минимизирует риски потери информации при работе биллинга путем перевода базы данных в синхронный режим. В этом режиме изменения и новые данные сразу записываются на диск.
При наличии подключенного UPS, подсистема переключает базу данных в асинхронный режим, в этом случае изменения и новые данные хранятся в памяти и периодически сбрасываются на диск подсистемой ввода/вывода операционной системы. Это дает гораздо большую производительность, чем при синхронном режиме.

h3. Ответы на очевидные вопросы

_Возникает вопрос_: А нужно ли настраивать UPS, если база и так надежно защищена синхронным режимом?
_Ответ_: Да, нужно. Потому что синхронный режим не гарантирует корректную работы БД после сбоя по питанию, а также кроме БД в биллинге есть другие подсистемы, которые при внезапном отключении питания могут принести долгий простой и много боли при восстановлении.

h2. Настройка подсистемы

h3. Установка пакета Network UPS Tools

# создать пользователя и группу с именем "nut", дать пользователю nut права root
{code}useradd nut
usermod -a -G root nut{code}
# перейти во временную директорию /tmp и скачать пакет Network UPS Tools (далее по тексту --- *nut*), при необходимости установить wget;
{code}yum install nut -y{code}
# настройка udev.
{code}cp /lib/udev/rules.d/62-nut-usbups.rules /etc/udev/rules.d/{code}

h3. Конфигурационные файлы

Все конфигурационные файлы находятся в директории "*/etc/ups*".
* *ups.conf* \- настройки *nut* для работы с UPS (драйвер/порт/наименование).
* *upsd.conf* \- настройка основного демона *upsd* Network UPS Tools.
* *upsd.users* \- контроль доступа к UPS демону (профили пользователей).
* *upsmon.conf* \- настройка текущего клиентского агента.

h4. ups.conf

Конфигурация подключенных UPS.

* *\[ups_name\]* \- это имя используется как адрес вашего UPS. Вы можете его изменить на любое произвольное имя;
* *driver* \- драйвер, используемый для работы с UPS;
* *port* \- порт, на котором висит UPS (для подключения через USB указываете значение "auto"). Для snmp-ups: имя хоста SNMP агента. Для newhidups: значение "auto" для автоматического соединения с USB UPS;
* *bus* \- канал/шина на котором расположен порт;
* *desc* \- описание устройства;
* *sdorder* \- необязательный элемент. При наличии нескольких UPS подключенных к этому серверу можно выключать UPS в определенном порядке. используя *upsdrvctl* к примеру можно выключить все 0s или 1s, 2s и тд. Для исключения последовательной остановки используйте \-1;
* *nolock* \- необязательный элемент, его не рекомендуется использовать в этом конфиге. Он служит для отключения блокировки порта при пользовании утилитой;
* *maxstartdelay* \- необязательный элемент. Может быть, заданна как глобальная переменная выше вашего первого UPS. Это значение определяет, сколько *upsdrvctl* будет ожидать окончания запуска драйвера. Данная возможность предоставляет стабильность в работе. Значение по умолчанию равно 45 секундам;
* *cable* \- Если драйвер UPS требует дополнительных параметров, вы можете указать их здесь. Не указывайте это значение, если ваше подключение к UPS стандартно.

h4. upsd.conf

Служит для контроля доступа к серверу и для установки других значений конфигурации. Этот файл содержит подробные сведения о предоставлении доступа, таким образом, обеспечивается безопасность. В идеальном случае, только процесс *upsd* должен иметь возможность прочитать данные из этого файла.

* *MAXAGE* \- по умолчанию 15 секунд. Это частота обновления данных клиентов после остановки драйвера UPS. Следует использовать другое значение только в том случае, если у вас трудности с обновлением данных;
* *LISTEN address port* \- здесь указывается IP адрес и порт 3493 (по умолчанию) для прослушивания подключений;
* *MAXCONN connections* \- по умолчанию используется 1024 подключений. Каждый UPS, каждого LISTEN адреса и каждого клиента считается как одно подключение. Если на сервере заполнится количество подключений, он больше не будет принимать новых входящих клиентских подключений.

h4. upsd.users

Контроль доступа для UPS демона (профили пользователей). Именно в этом файле вы указываете, кто и в какой мере будет работать с *nut*.
* *\[NAME\]* \- имя пользователя;
* *password* \- пароль пользователя;
* *actions* \- возможность настройки см ниже;
* *instcmds* \- выполняемые команды см ниже;
* *upsmon* \- вид подключения клиентов см ниже.

Каждый UPS монитор может определяться как один из трех возможных типов:
*upsmon master* \- полные полномочия управления питанием подключенных к системе UPS. Отвечает за выключение разряженного аккумулятора. Выключение происходит после безопасного выключения всех *slave* мониторов. Если ваш UPS подключен непосредственно к системе через последовательный порт, то для upsmon этой системы следует определить его как *master*.

*upsmon slave* \- эта система, под управлением *upsmon master* и она не выключается непосредственно. Операционная система будет выключена перед отключением питания *master*. Используйте этот режим при запуске монитора на других серверах работающих на том же UPS. И очевидно, что только один сервер может быть подключен к последовательному порту на UPS, коим будет является *master*. Все остальные сервера будут *slave*.

*upsmon monitor-only* \- при этом режиме будут создаваться уведомления о состоянии или изменении работы батареи, переключении на линию и т.д., но не будет завершать работу системы.

*actions* \- Действия пользователя с применением upsd.

* SET - изменить значения определенных переменных в UPS;
* FSD - установка флага "принудительного выключения" для UPS.

*instcmds* \- разрешения пользователю на инициирование конкретных команд. Применяя "ALL" вы разрешаете использовать все команды, Существует множество команд выполните "*upscmd \-l&nbsp; <имя UPS в настройках>*" чтобы увидеть, что ваше оборудование поддерживает. Вот, к примеру, несколько команд.
* test.panel.start - старт теста передней панели
* test.battery.start - старт теста батареи
* test.battery.stop - остановка теста батареи
* calibrate.start - запуск калибровки батареи
* calibrate.stop - остановка калибровки батареи

h4. upsmon.conf

Этот конфигурационный файл предоставляет основные функции в программе мониторинга UPS, например это безопасное завершение работы при сбое питания, уведомления и другие переменные. В многоуровневой схеме утилиты *nut* это клиент.
* *MINSUPPLIES* \- указываем количество блоков питания которые должны получать мощность сохраняя систему запущенной. Большинство систем имеют один БП. Но дорогие сервера, например HP NetServer LH4 могут работать с 2 из 4 БП и ему нужно ставить 2;
* *SHUTDOWNCMD* \- upsmon выполняет эту команду, когда систему необходимо выключить;
* *POLLFREQ* \- опрос мониторами с частотой (измеряется в секундах) для обычной деятельности. Вы можете отрегулировать эту частоту опроса, чтобы upsmon не “зашумлял” вашу сеть, но не вносите слишком большие значения тк. оно может пропустить отключение питания;
* *POLLFREQALERT* \- опрос UPS с частотой в секундах. Можно сделать значение поменьше, чем POLLFREQ для лучшей чувствительности работы батареи;
* *HOSTSYNC* \- как долго upsmon будет ждать перед переходом к следующему upsmon. master upsmon использует это число при ожидании slaves чтобы отключиться после того как он установил флаг принудительное завершение работы (FSD). И если slaves не отключаться после этого тайм аута, то выключение продолжится без них;
* *DEADTIME* \- интервал ожидания перед объявлением статуса UPS как «мертвый». Upsmon требует, чтобы UPS предоставлял свою статус информацию, каждые несколько секунд (см. POLLFREQ и POLLFREQALERT). Если статус загрузки, UPS помечен fails. И если оно остается fails более чем DEADTIME секунд, то UPS помечается как «мертвый». Выставляйте значение этой переменной в несколько (в три раза пойдет) раз больше чем *POLLFREQ* и *POLLFREQALERT*;
* *POWERDOWNFLAG* \- флаг файла для форсирования завершения работы UPS в master системе;
* *NOTIFYMSG* \- изменение сообщения, отправленные upsmon при возникновении определенных событий;
* *NOTIFYCMD* \- upsmon отправляет сообщение при происшествиях;
* *NOTIFYFLAG* \- изменение поведения upsmon при возникновении событий NOTIFY;
* *RBWARNTIME* \- предупреждение замены аккумулятора в секундах;
* *NOCOMMWARNTIME* \- предупреждение по времени при не общении к UPS в секундах;
* *FINALDELAY* \- через сколько выполнить SHUTDOWNCMD.

----
h3. Что нужно знать перед настройкой UPS

Если только собираетесь покупать UPS, то рекомендуется ознакомиться со списком совместимости *nut* --- [http://www.networkupstools.org/stable-hcl.html] в фильтре указать интересующие параметры.
!fully_suported.png|border=1!
1. ознакомиться со списком максимально совместимых UPS;

2. определить тип подключения UPS. Это может быть USB, COM, Ethernet, other. Определить можно по спецификации UPS в инструкции пользователя, и/или визуально, при наличии необходимых знаний;

3. если UPS один и подключается через USB (а так же максимально совместим с *nut*), то в настройках можно указать порт как *"auto"*;

4. если UPS не один, *nut* не может определить порт в режиме "auto", или тип подключения не через USB, то нужно выяснить порт, через который произведено подключение UPS;

5. найти драйвер для вашего UPS по ссылке --- [http://www.networkupstools.org/ddl/] находите модель UPS и смотрите строку *driver.name*;

6. если UPS в единственном числе и подключен на прямую к серверу, то нужно использовать standalone мод, если же схема другая (UPS подключен не напярмую, несколько ups), то *nut* нужно сконфигурировать под данную схему, обращайтесь в тех. поддержу;

7. *Не все UPS одинаково полезны\!* Некоторые UPS не могут, после обратного перехода с батареи на сеть, включить ПК.

{note}
Важно\! Если UPS подключен к другому серверу, Вы можете снимать его статус через NUT, установленный на биллинге. Для этого нужно исправить файл
{code}
/app/base/cfg/config
{code}
и указать в поле ups['host'] адрес сервера, к которому подключен UPS.
Пример конфигурации:
{code}
# Если в host указать адрес сервера, то статус UPS будет сниматься с него.
ups['enabled']='1'
ups['host']='*.*.*.*'
{code}
{note}

----
h3. Пример настройки nut

0. обязательно прочитать заметки\!


1. Указываем *nut*, &nbsp;то есть что UPS один и подключен на прямую к серверу ;
{code}vim /etc/ups/nut.conf
— далее изменяем переменную
MODE = standalone{code}
2. Добавляем UPS (в качестве примера был выбран APC Black-UPS ES 700);
{code:lang=actionscript}vim /etc/ups/ups.conf
— добавляем строки
[apces700]
driver = usbhid-ups
desc = "Back-UPS ES 700"
bus = "004"
 port = "005"
vendorid = 051d
productid = 0002{code}
В случае, если управление ups будет происходить по snmp, данный файл будет выглядеть примерно следующим образом:
{code}
[apces700]
driver = snmp-ups
port = 10.0.0.1
community = public
snmp_version = v1
pollfreq = 15
desc = "Example SNMP v1 device"
{code}
Где 10.0.0.1 - ip адрес, по которому доступен ups.
По совместимости Вашего ИБП с драйвером можете обратиться к документации драйвера [http://networkupstools.org/docs/man/snmp-ups.html]


В некоторых случаях при настройке подключения через COM порт достаточно параметров.
{code}
[apces700]
driver = serial
desc = "Back-UPS ES 700"
port = /dev/ttyS0
{code}

{info}
При использовании переходника USB-to-Serial порт нужно указать такой:

{code}
port = /dev/ttyUSB0
{code}
{info}

3. Устанавливаем IP и порт, на котором демон, будет принимать данные о состоянии UPS;
{code}vim /etc/ups/upsd.conf
— добавляем строки
LISTEN 127.0.0.1 3493{code}
4. Добавляем пользователя, от имени которого будет производится мониторинг и отправка команд в систему;
{code}useradd upsuser
passwd upsuser{code}
5. Добавляем созданного пользователя в настройки;
{warning}Если в пароле используются спецсимволы, например №\!#%^& - в о всех конфигурационных файлах пароль следует заключать в кавычки:
{code}password = 'my!#%password'{code}{warning}

{code}vim /etc/ups/upsd.users
— добавляем строки
[upsuser]
password = password
actions = SET
instcmds = ALL
upsmon master{code}
6. Устанавливаем основные настройки *nut*;
{code:lang=actionscript}vim /etc/ups/upsmon.conf
— добавляем строки
MONITOR apces700@localhost 1 upsuser password master
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
NOTIFYCMD /usr/sbin/upssched
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower
NOTIFYMSG ONLINE "UPS %s on line power"
NOTIFYMSG ONBATT "UPS %s on battery"
NOTIFYMSG LOWBATT "UPS %s battery is low"
NOTIFYMSG FSD "UPS %s: forced shutdown in progress"
NOTIFYMSG COMMOK "Communications with UPS %s established"
NOTIFYMSG COMMBAD "Communications with UPS %s lost"
NOTIFYMSG SHUTDOWN "Auto logout and shutdown proceeding"
NOTIFYMSG REPLBATT "UPS %s battery needs to be replaced"
NOTIFYMSG NOCOMM "UPS %s is unavailable"
NOTIFYMSG NOPARENT "upsmon parent process died - shutdown impossible"
NOTIFYFLAG ONLINE SYSLOG+EXEC
NOTIFYFLAG ONBATT SYSLOG+EXEC
NOTIFYFLAG LOWBATT SYSLOG+EXEC
NOTIFYFLAG FSD SYSLOG+EXEC
NOTIFYFLAG COMMOK SYSLOG+EXEC
NOTIFYFLAG COMMBAD SYSLOG+EXEC
NOTIFYFLAG SHUTDOWN SYSLOG+EXEC
NOTIFYFLAG REPLBATT SYSLOG+EXEC
NOTIFYFLAG NOCOMM SYSLOG+EXEC
NOTIFYFLAG NOPARENT SYSLOG+EXEC
NOCOMMWARNTIME 300
FINALDELAY 0{code}
7. Запускаем демон;
{code}service ups start{code}
8. Проверяем возможности UPS;

{code}upscmd -l apces700@localhost{code}
ИЛИ
{code}upscmd apces700@localhost{code}


9. Настраиваем планировщик *nut*;
{code}vim /etc/ups/upssched.conf
— добавляем
CMDSCRIPT /etc/ups/cmd.sh
PIPEFN /tmp/upspipe
LOCKFN /tmp/upslock
AT COMMBAD * EXECUTE commbad
AT COMMOK * EXECUTE commok
AT NOCOMM * EXECUTE nocomm
AT ONBATT * EXECUTE powerout
AT ONBATT * START-TIMER shutdownnow 90
AT LOWBATT * EXECUTE shutdowncritical
AT ONLINE * CANCEL-TIMER shutdownnow
AT ONLINE * EXECUTE powerup
{code}
10. Создаем скрипт поведения UPS при штатных ситуациях;
{code:lang=actionscript}touch /etc/ups/cmd.sh
chmod 777 /etc/ups/cmd.sh
vim /etc/ups/cmd.sh
- добавляем

#!/bin/bash
case $1 in
commbad)
logger "UPS communications failure"
;;
commok)
logger "UPS communications restored"
;;
nocomm)
logger "UPS communications cannot be established"
;;
powerout)
logger "UPS on battery. Shutdown in 90 seconds...."
upscmd -u upsuser -p password apces700@localhost shutdown.return
;;
shutdownnow)
logger "UPS has been on battery for 90 seconds. Starting orderly shutdown"
/etc/init.d/apps stop
/sbin/shutdown -h now
;;
shutdowncritical)
logger "UPS battery level CRITICAL. Shutting down NOW!!!!"
/sbin/shutdown -h now
;;
powerup)
logger "UPS on line. Shutdown aborted."
upscmd -u upsuser -p password apces700@localhost shutdown.stop
;;
*)
logger "Unrecognized command: $1"
;;
esac{code}

11. Добавляем демон в автозагрузку;
{code}chkconfig --level 35 ups on{code}
12. Проверяем состояние UPS.
{code}upsc apces700@localhost{code}

*13. Запускаем скрипт проверки UPS*

{code}
check_ups_status.sh
{code}

h3. Заметки

* Внимательно просмотрите листинги, <имя_пользователя>, <ваш_пароль>, <имя_UPS> --- это абстрактное обозначение *Ваших* данных, так же *не надо печатать угловые скобки*, т.е. попытка ввода в настройки *nut* строчек типа: <имя_пользователя>, <имя_UPS>, <etc>... --- приведет к ошибкам/некорректной работе;
* Если схема подключения отличается от "эталонной", то при возникновении затруднений --- обратиться в техподдержку;
* Если UPS один и подключается через USB, то в настройках можно указать порт ("port") как "auto" и не вводить "bus";
* Что бы узнать номер порта и шины UPS, можно воспользоваться утилитой lsusb (если UPS подключен через USB), другие варианты подключения (COM, Ethernet) нужно настраивать индивидуально;
* Нужный драйвер можно посмотреть на странице проекта --- [http://www.networkupstools.org/ddl/|http://www.networkupstools.org/ddl/], находите модель UPS и смотрите строку driver.name;
* Все параметры настройки UPS можно посмотреть в разделе "Конфигурационные файлы" --- пункт "ups.conf"
* В зависимости от списка команд можно гибко настраивать поведение UPS, если драйвер/UPS поддерживает то или иное действие;
* shutdown.return --- данную опцию нужно проверять командой: upscmd \-l <имя_UPS>@localhost
* Драйвер для Вашего устройства или производителя устройства можно попробовать найти в файле */usr/share/driver.list*, например:
{code}cat /usr/share/driver.list | grep -i Smart-UPS{code}
Вывод, в котором выведены драйвера с которыми можно попробовать интегрировать APC Smart-UPS:
{code}"APC" "ups" "1" "Smart-UPS" "" "apcsmart"
"APC" "ups" "2" "Smart-UPS USB" "USB" "usbhid-ups"
"APC" "ups" "3" "Smart-UPS RT XL" "AP9618 SNMP monitoring card" "snmp-ups"
{code}

h2. Проверка подсистемы

Пр окончанию настройки требуется выполнить итоговую проверку работоспособности схемы:
# Выполните остановку биллинга во избежание потери данных
{code}
/etc/init.d/apps stop
{code}
# По завершении остановки сервисов биллинга, убедитесь, что UPS подключен и функционирует
{code}
# upsc -L
apces700: Back-UPS ES 700
{code}
# Запустите мониторинг системного лога
{code}
tail -f -n 0 /var/log/messages | grep -Ei 'ups|shut'
{code}
# Отключите UPS от сети.
Сообщения в логе должны выглядеть приблизительно так:
{code}
upsmon[1393]: UPS apces700@localhost on battery
upssched[22505]: Executing command: powerout
logger: UPS on battery. Shutdown in 90 seconds....
upsd[1388]: Instant command: ups@127.0.0.1 did shutdown.return on apces700
upssched[22509]: Timer daemon started
upssched[22509]: New timer: shutdownnow (90 seconds)
usbhid-ups[1384]: instcmd: command [shutdown.return] handled
{code}
По истечении 90 секунд, сервер должен выключиться.

При успешном завершении работы, тест можно считать пройденным. При возникновении каких-либо ошибок, обратитесь в техподдержку CarbonSoft.


h2. Источники

[http://www.ignix.ru/book/freebsd/daemon/network_ups_tools]




[http://redhat-club.org/2011/настройка-nut-2.4.3-с-ups-eaton-env-в-rhel-centos-6|http://redhat-club.org/2011/%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-nut-2.4.3-%D1%81-ups-eaton-env-%D0%B2-rhel-centos-6]




[http://andy.od.ua/news_46.html]




[http://sysadminblog.sagrer.ru/stati-i-gajdy/linux/18-nastrojka-besperebojnika-na-primere-ippon-smart-powerpro-1000-v-linux.html]




h2. Дополнительная информация

Вероятное местоположение информации о типах используемых кабелей для подключения

/app/base/usr/local/lib/nut/docs/images/cables
/app/base/usr/local/lib/nut/docs/cables
/usr/share/doc/nut-2.6.5/docs/cables
/usr/share/doc/nut-2.6.5/docs/images/cables

h3. Подбор параметров для драйвера

Чтобы подобрать правильные параметры, можно попробовать запустить драйвер без запуска NUT.
# Укажите параметры запуска драйвера в файле */etc/ups/ups.conf* по статье выше
# Посмотрите возможные дополнительные опции в справке драйвера. например:
{code}/sbin/blazer_usb -h{code}
Вывод:
{code}Network UPS Tools - Megatec/Q1 protocol USB driver 0.09 (2.6.5)

usage: blazer_usb -a <id> [OPTIONS]
-a <id> - autoconfig using ups.conf section <id>
- note: -x after -a overrides ups.conf settings

-V - print version, then exit
-L - print parseable list of driver variables
-D - raise debugging level
-q - raise log level threshold
-h - display this help
-k - force shutdown
-i <int> - poll interval
-r <dir> - chroot to <dir>
-u <user> - switch to <user> (if started as root)
-x <var>=<val> - set driver variable <var> to <val>
- example: -x cable=940-0095B

Acceptable values for -x or ups.conf in this driver:

Serial-over-USB subdriver selection : -x subdriver=<value>
Regular expression to match UPS Manufacturer numerical ID (4 digits hexadecimal) : -x vendorid=<value>
Regular expression to match UPS Product numerical ID (4 digits hexadecimal) : -x productid=<value>
Regular expression to match UPS Manufacturer string : -x vendor=<value>
Regular expression to match UPS Product string : -x product=<value>
Regular expression to match UPS Serial number : -x serial=<value>
Regular expression to match USB bus name : -x bus=<value>
Apply the language ID workaround to the krauler subdriver (0x409 or 0x4095) : -x langid_fix=<value>
Delay before UPS startup (minutes) : -x ondelay=<value>
Delay before UPS shutdown (seconds) : -x offdelay=<value>
Parameters used for runtime calculation : -x runtimecal=<value>
Nominal charge time for UPS battery : -x chargetime=<value>
Minimum load to be used for runtime calculation : -x idleload=<value>
Skip reading rating information from UPS : -x norating
Skip reading vendor information from UPS : -x novendor
Preselect communication protocol (skip autodetection) : -x protocol
Read The Fine Manual ('man 8 blazer'){code}
# Запустите драйвер указав название UPS из */etc/ups/ups.conf* и включив повышенное логирование:
{code}/sbin/blazer_usb -a myups -DDDDDDDDDD -q{code}
Ниже представлен вывод в котором видно что UPS определился, драйвер отправил у нему команду, но в получил некорректный ответ по возможным протоколам:
{code}Network UPS Tools - Megatec/Q1 protocol USB driver 0.09 (2.6.5)
0.000000 debug level is '10'
0.000531 Checking device (03F0/7029) (006/002)
0.000559 - VendorID: 03f0
0.000564 - ProductID: 7029
0.000567 - Manufacturer: unknown
0.000571 - Product: unknown
0.000574 - Serial Number: unknown
0.000578 - Bus: 006
0.000581 Trying to match device
0.000604 Device does not match - skipping
0.000611 Checking device (1D6B/0001) (006/001)
0.000623 - VendorID: 1d6b
0.000627 - ProductID: 0001
0.000631 - Manufacturer: unknown
0.000634 - Product: unknown
0.000638 - Serial Number: unknown
0.000641 - Bus: 006
0.000645 Trying to match device
0.000649 Device does not match - skipping
0.000654 Checking device (06DA/FFFF) (005/094)
0.013669 - VendorID: 06da
0.013687 - ProductID: ffff
0.013694 - Manufacturer: PPC
0.013701 - Product: HID UPS
0.013711 - Serial Number: BKX2BBH00482
0.013719 - Bus: 005
0.013725 Trying to match device
0.013783 Device matches
0.013806 failed to claim USB device: could not claim interface 0: Device or resource busy
0.014461 detached kernel driver from USB device...
0.014672 send_to_all: SETINFO ups.vendorid "06da"
0.014685 send_to_all: SETINFO ups.productid "ffff"
0.014699 send_to_all: SETINFO device.type "ups"
0.014710 send_to_all: SETINFO driver.version "2.6.5"
0.014719 send_to_all: SETINFO driver.version.internal "0.09"
0.014731 send_to_all: SETINFO driver.name "blazer_usb"
0.014739 Trying megatec protocol...
0.015812 send: Q1
1.017703 read: Connection timed out
1.017729 blazer_status: short reply
1.017736 Status read 1 failed
1.019690 send: Q1
2.021680 read: Connection timed out
2.021711 blazer_status: short reply
2.021720 Status read 2 failed
2.023667 send: Q1
3.025677 read: Connection timed out
3.025706 blazer_status: short reply
3.025715 Status read 3 failed
3.025722 Trying mustek protocol...
3.027667 send: QS
4.029707 read: Connection timed out
4.029727 blazer_status: short reply
4.029733 Status read 1 failed
4.031687 send: QS
5.033673 read: Connection timed out
5.033700 blazer_status: short reply
5.033706 Status read 2 failed
5.035721 send: QS
6.037674 read: Connection timed out
6.037697 blazer_status: short reply
6.037703 Status read 3 failed
6.037708 Trying megatec/old protocol...
6.039662 send: D
7.041704 read: Connection timed out
7.041734 blazer_status: short reply
7.041743 Status read 1 failed
7.043672 send: D
8.045670 read: Connection timed out
8.045693 blazer_status: short reply
8.045700 Status read 2 failed
8.047666 send: D
9.049676 read: Connection timed out
9.049703 blazer_status: short reply
9.049709 Status read 3 failed
9.049714 Trying zinto protocol...
9.051703 send: Q1
10.053674 read: Connection timed out
10.053699 blazer_status: short reply
10.053705 Status read 1 failed
10.055728 send: Q1
11.057670 read: Connection timed out
11.057692 blazer_status: short reply
11.057698 Status read 2 failed
11.059667 send: Q1
12.061677 read: Connection timed out
12.061701 blazer_status: short reply
12.061707 Status read 3 failed
12.061712 No supported UPS detected
{code}
# Попробуйте изменить данные в конфигурационном файле и повторить операцию. Если Вам удастся найти подходящий драйвер и параметры, UPS настроить возможно.

h3. UPS INELT

Устройства INELT ранее интегрировались с драйвером megatec, в текущей версии NUT - с драйвером blazer_ser:
{code}cat /usr/share/driver.list | grep -i inelt
"INELT" "ups" "2" "Monolith 1000LT" "" "blazer_ser"
"INELT" "ups" "2" "Monolith 3000RT" "" "blazer_ser"{code}{code}

{code}

h3. UPS Ippon Smart Winner 1000
{note}Работает только при подключении к COM-порту\! *USB подключение не работает.*{note}

Укажите следующие настройки драйвера:
{code}[IpponSmartWinner1000]
driver = blazer_ser
port = /dev/ttyS0
default.battery.voltage.high = 26.00 #Напряжение при полном заряде
default.battery.voltage.low = 20.80 #Напряжение разряденной батареи
desc = "Ippon Smart Winner"{code}
Параметры *default.battery.voltage.high* и *default.battery.voltage.low* могут отличаться для Ваших батарей. Посмотрите параметры батареи в сопроводительной документации или опытным путем, зарядив UPS на 100% и посмотрев значение battery.voltage ниже приведенной командой:
{code}upsc IpponSmartWinner1000@localhost | grep 'battery.voltage:'{code}
Таким же способом можно посмотреть вольтаж разряженной батареи.
Полный набор возможных параметров драйвера Вы можете ухнать из его документации: [BLAZER_SER(8)|https://networkupstools.org/docs/man/blazer_ser.html]


h3. Платформа корректно завершает работу, но сервер не выключается, а уходит в перезагрузку.

Это может возникнуть по причине того что драйвер не распознает комнаду shutdown (не путать с shutdown.return), выполняемую стандартными скриптами CentOS 6 при выключении:

Для решения проблемы найдите в скрипте */etc/init.d/halt* строку с текстом "Shutdown UPS drivers" и приведите скрипт к следующему виду:
{code}# Shutdown UPS drivers
if [ "$command" = /sbin/halt -a -f /etc/sysconfig/ups ]; then
. /etc/sysconfig/ups
if [ -z $POWERDOWNFLAG ]; then
POWERDOWNFLAG=/etc/killpower
fi
if [ "$SERVER" = "yes" -a -f $POWERDOWNFLAG ]; then
#/sbin/upsdrvctl shutdown
#sleep 120
#/sbin/reboot --force
:
fi
fi{code}
Изменены тут три строчки в последнем "if": закоментирована отправка shutdown драйверу.

h3. UPS PowerWare 9120

При подключении по USB используется драйвер bcmxcp_usb ([https://networkupstools.org/docs/man/bcmxcp_usb.html]). По умолчанию в его настройках задан параметр shudown_delay в 120 сек, подающий команду на выключение UPS через 120 секунд после перехода на батареи. Этого времени может не хватить для корректного завершения работы контейнеров, поэтому необходимо добавить в файл */etc/ups/ups.conf* строку
{code}shutdown_delay = "120"{code} где 120 - изменяемое значение параметра в секундах.

h3. Dummy UPS для тестов

Для отладки и экспериментирования с параметрами можно воспользоваться [виртуальным UPS|https://networkupstools.org/docs/man/dummy-ups.html].
Для этог опонадобится слепок параметров реального UPS, которые можно будет динамический изменять. Таким образом, Вы сможете протестировать реакцию биллинга на изменение тех или иных параметров.
Если у Вас пока нет UPS, Вы можете использовать данные параметры:
{code}battery.charge: 100
battery.voltage: 27.40
battery.voltage.high: 26.00
battery.voltage.low: 20.80
battery.voltage.nominal: 24.0
device.type: ups
driver.parameter.pollinterval: 2
driver.version: 2.6.5
driver.version.internal: 1.55
input.current.nominal: 4.0
input.frequency: 49.9
input.frequency.nominal: 50
input.voltage: 235.7
input.voltage.fault: 229.6
input.voltage.nominal: 220
output.voltage: 204.8
ups.beeper.status: enabled
ups.delay.shutdown: 30
ups.delay.start: 180
ups.load: 0
ups.status: OL
ups.temperature: 26.8
ups.type: offline / line interactive{code}
Запишите их в файл */etc/ups/test.dev* и укажите следующие параметры UPS в */etc/ups/ups.conf*:
{code}[dummy]
driver = dummy-ups
port = test.dev
desc = "Dymmy ups for debugging Carbon UPS monitoring system"{code}
Драйвер постоянно читает данные из файла test.dev, чтобы эмулировать переход на питание от сети или батарейки исправьте значение ups.status:
* *OL* \- питание от сети
* *OB* \- питание от батареи

Добавьте init скрипт, который будет переписывать статус питания виртуального UPS при старте системы:
{code}touch /etc/init.d/upstest
chmod a+x /etc/init.d/upstest{code}
Листинг скрипта:
{code}#!/bin/bash

sed 's/ups\.status.*/ups.status: OL/g' -i /etc/ups/test.dev{code}
{info}Физический UPS можете по-разному реагировать на параметры заданные в */etc/ups/upsmon.conf*, поэтому результаты тестов не обязательно будут отражать поведение реального устройства{info}

h3. После перезагрузки UPS не запускается

В ряде случаев это может происходить. В качестве решения Вы можете перезапустить сервис UPS вручную:
{code}service ups restart{code}
И вызвать команду check_ups_status.sh чтобы проверить что интеграция с ИБП работает корректно:
{code:title=Команда}check_ups_status.sh{code}
{code:title=Примерный вывод (отличие будет в дате и hostname}2020-06-16 15:55:22 hostname check_ups_status.sh[23502:23604]: Обнаружен работающий UPS, база переводится в асинхронный режим{code}

h3. Некорректный статус UPS, Ups status: BOOST

Ошибка означает, что ИБП питается от сети электропитания, но повышает входное напряжение. Такое поведение можно встретить на ИБП APC серий Line-R, Back-UPS, Back-UPS PRO, Smart-UPS и APC AV.

Подробней об этом можно почитать [на сайте APC|https://www.apc.com/us/en/faqs/FA158913/]


Проверить состояние вручную можно командой upsc, передав ему имя ИБП из конфигурационного файла ups.conf и хост (если подключен локально в COM или UPS - то всегда localhost)
{code:title=Команда}upsc apc2200@localhost ups.status{code}
{code:title=Вывод}BOOST OL{code}

Если ошибка возникает постоянно, обратитесь за консультацией к инженеру-электрику чтобы он дал рекомендации как стабилизировать входное напряжение.
Возможно, достаточно настроить значение напряжение при котором система AVR сообщает об активаии буста. Обратитесь к документации.