Есть замечательная поделка APCUPSD!
Все хорошо до тех пор, пока не используется modbus usb.
А проблема в том, что apcupsd использует libusb-0.1, которая уже много лет не поддерживается. Добрые люди сделали костыли - libusb-compat, но для apcupsd это стало приговором.
Симптомы - apcaccess перестает отдавать данные с диагностикой
"apcserver: accept error. ERR=Too many open files"
Умирало обычно в течении 2-4 дней.
Оно ждет данных с ИБП через usb_interrupt_read(), которое почему-то делает poll() без таймаута, хотя в usb_interrupt_read() есть параметр таймаут.
Лечение: собрать статикой libusb-0.1.12 ( в какой-нибудь временный каталог ), собрать apcupsd с указанием путей к ней. Это значительно проще, чем переводить apcupsd на новую libusb-1.0.
Вторая печаль - apctest. C modbus оно принципиально не умеет калиброваться (после замены батарейки) т.к. код apctest частично не знает про modbus.
Оно умеет запускать калибровку через драйвер, но текущее состояние ИБП читает напрямую. И остановить этот процесс оно тоже не может :( Только кнопкой на море ИБП...
Вот интересно, NUT умеет выполнять калибровку для apc ? Если да, то apcupsd станет еще одним «ненужно».
Перемещено Dimez из talks