- ИБП с софтом для Линукса
- APC UPS
- Contents
- Install the package
- Configure APC UPS
- Hibernating instead of shutting down
- Create the hibernate script
- Link the hibernate script for apcupsd to use it
- Make apcupsd kill UPS power once the hibernate is done
- Troubleshooting
- The desktop environment will also sense the UPS if connected by USB cable
- hid-generic : control queue full
- Настройка APC Smart UPS 1000 в Ubuntu server 14.04 LTS и установка модуля Webmin
- Реализация USB-интерфейса ИБП на основе ARM-платы MC HCK
- 1. Внутри USB
- 2. USB-протокол ИБП/хост
- 3. Железо
- 4. Практическая реализация
- 5. Проверка в реальной жизни
- 6. Заключение
ИБП с софтом для Линукса
Хочу купить ИБП, понятное дело, сразу смотрю на APC, т.к. там с софтом под Линукс всё в порядке (по крайней мере было). Но APC — это немного дороговато, хотя и терпимо, но, всё же, хотелось бы узнать, нет ли чего подешевле, но тоже с линуксовым софтом. Хочу, чтобы демон умел рапортовать основную статистику (вольтаж, потребляемая мощность, заряд), а также умел выполнять произвольные хуки при пропадании/появлении напряжения.
Через него будет включен домашний комп-роутер, так что рэковые и промышленные решения можно не вспоминать.
Это я уже и так читаю, мне хотелось бы историй успеха от живых людей с живыми упсами.
[возможно вредный совет]Бери самый простой ИБП бытовой, потом когда батарея начнет умирать, просто выкидывай и покупай новый за те же деньги, он уже будет лучше. Это лучше чем бегать потом искать батарею (аккумулятор, а он еще и тяжелый со всеми вытекающими из этого минусами) или рисковать подорваться вместе с аккумулятором если ты рискнешь его самостоятельно восстановить. Да если честно, очень удивлен, что на каждом шагу нет сервисов по замене и восстановлению аккумуляторов как есть для машин, казалось бы ничего сложного.
сразу смотрю на APC, т.к. там с софтом под Линукс всё в порядке
В порядке, если не попасть на модель с протоколом Mikrolink. Надо обращать внимание на наличие, дополнительно, MODBUS:
http://sourceforge.net/p/apcupsd/mailman/message/32911931/
Это лучше чем бегать потом искать батарею
А что её искать ? Как будто это дефицит.
Да если честно, очень удивлен, что на каждом шагу нет сервисов по замене и восстановлению аккумуляторов
Там ничего восстанавливать не надо, надо просто менять. В APC Smart батарея легко меняется.
Powercom поддерживает. Только нужен интерфейс RS-232.
Да нет проблем с заменой на неродные АКБ.
за последние 15 лет я встречал в ИБП только 3 типа АКБ
6V 6-7-9Ah 151x34x94 мм (в одноюнитовых упсах) 12V 7-9h 151х94х65 мм ( в мелких упсах ) 12V 12Ah 151x94x99
И один раз, очень давно видел 6V 12Ah
Гугление про АКБ в конкретной модели ИБП обычно сразу дает результат. Стоимость неродных в 2-5 раз ниже.
Если АКБ один, то все совсем просто, если их 2 то, чуть сложнее, а если их 8, то просто тяжело.
После смены АКБ их обязательно нужно зарядить и разрядить пару раз с замером времени!
C nut проблем нет.
Да, в рознице батареи фиг найдешь. Не через интернет ведь такую тяжесть заказывать.
нет ли чего подешевле, но тоже с линуксовым софтом
У меня powercom. Про софт от производителя ничего не слышал, но nut их поддерживает хорошо. При работе от батарейки при снижении заряда штатно гасит комп.
у меня стоит ippon Back power Pro 500, счас попробую через nut завести, до этого работал просто как батарея.
Источник
APC UPS
This document describes how to install the APC UPS daemon. The APC UPS can communicate with the Linux system through either a RS-232 or USB serial connection. In the event of a prolonged power outage, should the APC UPS lose most of its battery capacity, it can tell the Linux box to perform a safe shutdown.
Contents
Install the package
Configure APC UPS
The main configuration file for the APC UPS daemon can be found in /etc/apcupsd/apcupsd.conf . The default configuration is for devices connected over a USB cable.
First, enable and start apcupsd.service .
Next, wait about a minute and confirm the daemon is running and properly monitoring the battery:
To fully test your setup:
- Change TIMEOUT from 0 to 1 in the /etc/apcupsd/apcupsd.conf file.
- Remove wall power from the UPS.
- Observe that your Linux box powers down, in short order.
- Plug the UPS back into the wall.
- Power on your Linux box.
- Change TIMEOUT from 1 back to 0 in the /etc/apcupsd/apcupsd.conf file.
When everything is ok, all that is left to do is enable the apcupsd service.
Hibernating instead of shutting down
You can make your system hibernate instead of shutting down. First, make sure the system hibernates cleanly. To set up hibernation, see Power management/Suspend and hibernate.
Create the hibernate script
Create this in /usr/local/bin/hibernate as root:
Make it executable by running:
Link the hibernate script for apcupsd to use it
Create a symbolic link from the /etc/apcupsd directory to the script. The result is the apcupd’s apccontrol script, in this directory, will call the hibernate script instead of doing the default shutdown action for these operations.
If you are running apcupsd as a client to another machine running apcupsd as a server and want your machine to hibernate if the sever is shutdown or if communication to the server is lost then you may also wish to add:
Make apcupsd kill UPS power once the hibernate is done
Once the PC has hibernated successfully, it is common practice to switch off the UPS in order to conserve battery charge and prevent full battery drain. This can be achieved through a power suspend event in systemd.
Create /usr/lib/systemd/system-sleep/ups-kill and put the following contents in it:
Make the script executable by doing:
Troubleshooting
The desktop environment will also sense the UPS if connected by USB cable
For example, the default KDE setting is to put the computer in sleep if it has been on UPS battery for more than 10 minutes and the mouse has not moved. On many computers this causes a crash. This can be changed from KDE System Settings > Power Management > On battery.
hid-generic : control queue full
If you are using a systemd-based initramfs you might run into the «control queue full» log message happening many times every second. You will want to add hid-generic to you modules and regenerate your initramfs.
Источник
Настройка APC Smart UPS 1000 в Ubuntu server 14.04 LTS и установка модуля Webmin
Началось все с того, что у меня сгорел служивший верой и правдой много лет Back-UPS 500VA. Не беда, подумал я и заменил его на APC Smart UPS 1000, что для моего сервера оказалось гораздо лучше. Сразу скажу, изначально сервер работал на форточках и проблем с бесперебойником не было. После замены ИБП и окончательно-бесповоротном переходе на Ubuntu я задался вопросом: собственно, как мониторить состояние сети электропитания и состояние бесперебойника? Погуглив некоторое время, я наткнулся на несколько инструкций по подключению бесперебойников к никсовым машинам, но почему-то они все были про Back UPS и USB. В частности, меня натолкнуло на написание этой статьи аналогичная статься на Хабре «Начальная настройка ИБП APC в Linux с точки зрения чайника».
Но у меня же старенький тысячник с ком-портом и про USB он и слыхом не слыхивал.
Предупреждаю! Внимательно выбирайте кабель COM-COM. Например, стандартный кабель от свича DES3526 вызывает аварийное отключение бесперебойника. У меня подошел проводок от другого UPS (на сколько помню — Sven).
Как выяснилось, демон для мониторинга/управления все-таки есть, только все инструкции к нему безнадежно устарели (включая официальные!).
Установка демона APC:
После установки начался геморрой с настройкой. Наступая на все грабли по очереди я все же добился своего:
Для снижения количества неудачных настроек для начала найдем порт ttyS:
У меня активных портов оказалось всего 2:
В разделе UPSNAME я обозвал свой бесперебойник:
В разделе UPSCABLE был выбран тип Smart:
В разделе UPSTYPE выбран apcsmart и нужный порт:
Далее осталось только сообщить демону, что мы не забыли его настроить:
Меняем в строке ISCONFIGURED=no на ISCONFIGURED=yes
И напоследок запустить сие чудо:
Когда эта скотина все-таки запустилась без ошибок, я сильно обрадовался. Осталось только вывести данные бесперебойника на веб-морду серва. Тут кроется загвоздочка: веб-морда у меня Webmin, модуль для него есть, но идет он не настроенный.
Установка модуля Apcupsd в Webmin:
Для начала скачаем модуль на рабочую станцию отсюда.
Затем зайдем в модули Webmin и добавим скачанный модуль.
Все установилось, но модуль ничего не показывает и пишет что не настроен — ничего! Допиливаем до рабочего состояния:
На рабочей станции приводим пути в настройках модуля в порядок:
Жмем сохранить и — вуаля!
*В связи с безвременной кончиной фотохостинга savepic скриншоты с уже подключенным Apc Smart UPS 3000 RM
Статью написал для того, чтобы никто больше не наступал на те же грабли и не гуглил бесполезными запросами.
Источник
Реализация USB-интерфейса ИБП на основе ARM-платы MC HCK
Возникла задача сделать USB-устройство, которое, будучи вставленным в NAS, воспринималось бы им как USB-линк к источнику бесперебойного питания (именно через такое USB-соединение NAS узнает от ИБП об исчезновении питания, разрядке батарей и т.д.).
1. Внутри USB
Для решения задачи важно понимать, как USB устроен и работает. Очень короткое и доходчивое введение для знающих английский язык называется USB in a NutShell (upd: есть перевод). Затем советую по возможности пролистать книгу «USB Complete».
После этого, если потребуется, уже можно что-то уточнять в спецификациях, изучать классы, знакомиться с USB 3.0 SuperSpeed и т.д., но я уверен, что текста USB in a Nutshell и хороших примеров достаточно, чтобы сделать свое первое экспериментальное устройство.
2. USB-протокол ИБП/хост
В моем NAS операционная система основана на Linux и для общения с ИБП использует Network UPS Tools (NUT).
Выбирем в исходных текстах NUT самый простой драйвер; на всякий случай проверим, что он есть в списке ИБП, поддерживаемых NAS.
Самым простым и коротким показался drivers/richcomm_usb.c для устройств какого-то китайского производителя. Если сравнить его со скелетом, то становится ясно, что протокол у китайцев максимально примитивен: это «сухие контакты» без каких-либо подробностей; даже не HID-устройство. Но нас это вполне устраивает.
Рассмотрим основную функцию общения с ИБП:
Видно, что при совершении запроса хост посылает устройству управляющий пакет плюс 4 байта, адресуя все это интерфейсу/классу (0x21; см. описание полей USB request). Устройство отвечает 6 байтами, которые отправляются в endpoint 1 (0x81; см. описание Endpoint Address).
Значения отсылаемых байт можно посмотреть в функции query_ups(), а смысл принятых байт — в функции upsdrv_updateinfo(). Если кратко, то мы отсылаем вместе с control message массив < 0x01, 0x00, 0x00, 0x30 >, а в принятом массиве смотрим на пару бит в нужном байте: они и сообщают статус питания (от сети/от батарей) и состояние батареи (заряжена/почти разряжена).
Отдельно отмечу: в качестве Vendor ID китайцы решили использовать 0x925 — число, которое они напрямую скопировали из примеров к упоминавшейся выше книге «USB Complete» Яна Аксельсона. Естественно, это плохое решение, потому что данный Vendor ID выдан Lakeview Research, компании Яна Аксельсона, и использовать его в своих проектах как минимум некорректно. Китайцы могли бы хотя бы почитать FAQ по проблеме USB VendorID/Product ID или послушать интересный доклад на эту же тему на Open Hardware Summit 2012.
Для того, чтобы наше устройство определилось драйверами Network UPS Tools, нам тоже придется использовать чужой Vendor ID/Product ID. Конкретно в данном случае (отсутствие массового производства, осознанная мимикрия и т.д.) ничего страшного в этом нет.
3. Железо
Итак, всей этой информации достаточно, чтобы начать программировать. В качестве платформы для реализации я решил попробовать плату MC HCK на микроконтроллере Freescale Kinetis K20: я заказывал несколько прототипов MC HCK в прошлом году. Мне понравилась идея недорогой ($5-7), но достаточно мощной платы для различных экспериментов, выполненная в удобном форм-факторе.
Кстати, нацеленная практически на эту же нишу, но гораздо более известная плата Teensy 3.1 использует аналогичный МК, но с большим объемом памяти.
Описание использованного контроллера можно найти здесь. Если кратко, то это очень недорогой ARM Cortex-M4 50Mhz с 32kb flash + 32kb data и различными прелестями, из которых нам наиболее актуальна аппаратная реализация USB. По минимуму для подключения процессора к USB требуется лишь несколько резисторов и конденсаторов.
4. Практическая реализация
Для разработки необходимо установить:
- Компилятор; я использовал GCC ARM embedded toolchain
- Сам SDK: MC HCK toolchain
- dfu-util для заливки прошивки
Сам SDK состоит из библиотек, облегчающих доступ к возможностям контроллера, бутлодера и примеров. Наверное, стоит сказать, что SDK еще не очень зрел (да и сам MC HCK пока в массы не вышел), но вполне может использоваться в различных проектах (например, внутри сенсоров окружающей среды с низким энергопотреблением). Библиотека работы с USB отличается практически полным отсутствием документации, но код чист и понятен, а существующих примеров достаточно.
Вспомним иерархию внутри любого USB-устройства:
Учитывая простоту нашего USB-протокола, основной объем исходного кода занимают дескрипторы USB-устройства, одной конфигурации, одного интерфейса и одного endpoint’a («одного» — потому что endpoint для управляющих пакетов создается по умолчанию и не зависит от нас). Названия полей выступают в роли комментариев.
В коллбэк-функции, которая вызывается при успешной инициализации, мы зададим коллбэк rcm_handle_control() для обработки управляющих запросов и структуру tx_pipe для отсылки ответов:
Стандартные USB-запросы вроде Get Descriptor или Set Configuration возьмет на себя SDK и нам останется отработать лишь конкретный запрос:
Видно, что при совпадении всех полей SETUP-пакета, мы собираемся прочитать от хоста оставшиеся данные и устанавливаем для этого коллбэк rcm_handle_data(). Сам коллбэк мигает светодиодом и отсылает хосту в endpoint 1 текущий статус питания и заряда батареи:
В общем-то, это всё…
5. Проверка в реальной жизни
После сборки проекта командой make, необходимо нажать на MC HCK кнопку RESET, переводящую его на некоторое время в режим программирования, и набрать make flash для его прошивки с помощью dfu-util. Теперь плату можно вставлять в различные компьютеры и смотреть, как они на нее реагируют.
Проверим, как определяется наше устройство NAS’ом:
Подробности покажет USB-Prober для OS X:
Если немного подождать, то в логах Synology DSM можно увидеть, что наше устройство работает корректно:
6. Заключение
Казалось бы, пора подключать к пинам MC HCK что-то реальное — то есть то, для чего устройство предназначалось… но к этому моменту я уже потерял интерес.
Откровенно говоря, я просто хотел сэкономить на ИБП для NAS, взяв что-нибудь за максимально смешную сумму и добавив к нему USB-линк самостоятельно. Судя по отзывам о таких ИБП, их качестве и их батареях, это была дурацкая идея. Так что я купил недорогой APC, вмешиваться в работу которого не потребовалось: он и так поддерживает USB HID power device class.
Тем не менее, этот пример может оказаться кому-то полезен хотя бы для того, чтобы понять, как всё несложно. Полный исходный текст выложен на GitHub.
Источник