Firs Posted June 20, 2017 Share #1 Posted June 20, 2017 (edited) Есть у меня старенький UPS Powercom IMP-425AP. Давно хотел его подключить к Synology, но дело осложнялось тем, что он является устройством типа USB to Serial, и официально не поддерживается. В интернете гуглится статья на эту тему, по адресу: https://forum.synology.com/enu/viewtopic.php?f=39&t=17658 Но статья давно устарела, т.к. там идёт речь о DSM 3.0-1337 Сразу предупреждаю, я не очень "грамотный" пользователь *nux систем, но, собрав по крупицам некоторую информацию, я всё же смог подключить свой UPS Powercom IMP-425AP к DSM 6.1-15047 Может, я где-то допустил ошибки, но и итоге всё работает. Надеюсь мой опыт будет кому-то полезен. И так, наш UPS в системе определяется как: Bus 002 Device 004: ID 0d9f:0002 Powercom Co., Ltd Black Knight PRO / WOW Uninterruptible Power Supply (Cypress HID->COM RS232) (С таким ID 0d9f:0002 есть целая серия старых IMP-*25AP) Для DSM 6.1-15047 я использую загрузчик Jun's Loader v1.02b Вначале мы воспользуемся советами, описанными в этой статье: https://xpenology.com/forum/topic/7187-how-to-build-and-inject-missing-drivers-in-jun-loader-102a/ Качаем исходный код ядра: https://sourceforge.net/projects/dsgpl/files/Synology%20NAS%20GPL%20Source/15047branch/bromolow-source/linux-3.10.x.txz/download Synology 3615xs построен на архитектуре bromolow, нам нужна версия 15047 (я использую эту версию, т.к. в ней работает нужный мне VirtualBox) Устанавливаем плагин debian-chroot ( https://synocommunity.com/package/debian-chroot ) из раздела сообщества. Запускаем chroot: /var/packages/debian-chroot/scripts/start-stop-status chroot Ставим пакеты apt-get update apt-get upgrade apt-get install locales dpkg-reconfigure locales dpkg-reconfigure tzdata apt-get install mc make gcc build-essential kernel-wedge libncurses5 libncurses5-dev libelf-dev binutils-dev kexec-tools makedumpfile fakeroot linux-kernel* lzma Создаём рабочий каталог «/volume1/@appstore/debian-chroot/var/chroottarget/test/» Распаковываем в каталог /volume1/@appstore/debian-chroot/var/chroottarget/test/ исходники ядра linux-3.10.x.txz Заходим в каталог linux-3.10.x и запускаем cp synoconfigs/bromolow .config Делаем резервную копию конфигурации make ARCH="x86_64" oldconfig Настраиваем конфигурацию make ARCH="x86_64" menuconfig Выбираем «М» напротив драйвера Device Drivers/USB support/USB Serial Converter support/USB Cypress M8 USB Serial Driver Сохраняем конфигурацию и компилируем модули make ARCH="x86_64" modules Копируем скомпилированные модули cypress_m8.ko, usbcore.ko, usbserial.ko в рабочий каталог synology /lib/modules/ Не забываем проверять/выставлять права файлам: chmod 644 Дальше переходим к работе с пакетом NUT. Это нужно, чтобы скомпилировать модуль powercom Цитата (В powercom.c производится переопределение types[type].name=KIN даже если в настройках задан type=IMP для UPS Powercom IMP-425AP и подобных, что приводит к ошибочному определению battery.charge: 0.0 Также, неправильно отображаются частота и напряжение сети.) Информацию по исправлению драйвера я нашёл тут: http://forum.pcm.ru/viewtopic.php?f=3&t=2627 Качаем исходники NUT 2.4.1 http://pkgs.fedoraproject.org/repo/extras/nut/nut-2.4.1.tar.gz/609ebaf2123fc7171d25a6c742dd7d66/nut-2.4.1.tar.gz Распаковываем их в каталог /volume1/@appstore/debian-chroot/var/chroottarget/test/ В каталоге /volume1/@appstore/debian-chroot/var/chroottarget/test/nut-2.4.1 создаём файл патча «patch-nut» с содержимым: --- drivers/powercom.c 2009-02-17 12:20:48.000000000 +0300 +++ drivers/powercom.c 2010-03-02 15:48:25.354735038 +0300 @@ -852,21 +852,30 @@ /* setup flow control */ types[type].flowControl.setup_flow_control(); - if (!strncmp(types[type].name, "BNT",3) || !strcmp(types[type].name, "KIN") || !strcmp(types[type].name, "IMP")){ + if (getval("type") == NULL){ if (!ups_getinfo()) return; if (raw_data[UPSVERSION]==0xFF){ types[type].name="IMP"; - model=IMPmodels[raw_data[MODELNUMBER]/16]; } if (raw_data[MODELNAME]==0x42){ if (!strcmp(types[type].name, "BNT-other")) types[type].name="BNT-other"; else types[type].name="BNT"; - model=BNTmodels[raw_data[MODELNUMBER]/16]; } if (raw_data[MODELNAME]==0x4B){ types[type].name="KIN"; + } + } + if (!strncmp(types[type].name, "BNT",3) || !strcmp(types[type].name, "KIN") || !strcmp(types[type].name, "IMP")){ + if (!ups_getinfo()) return; + if (!strcmp(types[type].name, "IMP")){ + model=IMPmodels[raw_data[MODELNUMBER]/16]; + } + if (!strncmp(types[type].name, "BNT",3)){ + model=BNTmodels[raw_data[MODELNUMBER]/16]; + } + if (!strcmp(types[type].name, "KIN")){ model=KINmodels[raw_data[MODELNUMBER]/16]; } linevoltage=voltages[raw_data[MODELNUMBER]%16]; Применяем патч: patch -p0 -l <patch-nut В драйвере powercom по умолчанию включена самопроверка батарей при каждом старте драйвера. Настройки или возможности отключения этой проверки – нет. Метод устранения этой особенности я подсмотрел здесь: http://forum.lissyara.su/viewtopic.php?t=17735&start=25 Если Вам это не актуально, можете данный шаг пропустить. В файле: /volume1/@appstore/debian-chroot/var/chroottarget/test/nut-2.4.1/drivers/powercom.c находим строчки: ... upsdebugx(1,"Detected: %s , %dV",modelname,linevoltage); if (ser_send_char (upsfd, BATTERY_TEST) != 1) { upslogx(LOG_NOTICE, "writing error"); dstate_datastale(); return; } ... и комментируем лишнее: ... upsdebugx(1,"Detected: %s , %dV",modelname,linevoltage); /*if (ser_send_char (upsfd, BATTERY_TEST) != 1) { upslogx(LOG_NOTICE, "writing error"); dstate_datastale(); return; }*/ ... Компилируем NUT (пути для конфигов и т.д. выставляем такие же, как у synology): ./configure --with-user=root --with-group=root --prefix=/usr/syno/etc/ups --sysconfdir=/usr/syno/etc/ups --datadir=/usr/syno/share make Копируем скомпилированный файл powercom из каталога /volume1/@appstore/debian-chroot/var/chroottarget/test/nut-2.4.1/drivers/ в рабочий каталог synology /bin Не забываем проверять/выставлять права файлам: chmod 644 Теперь нужно добавить скомпилированные драйвера, в загрузчик Jun's Loader v1.02b. Используем osfmount (под windows), чтобы извлечь «extra.lzma» (сжатый файл cpio) из synoboot.img (находится «extra.lzma» на втором разделе FAT). Osfmount часто используют для редактирования файла grub.cfg в synoboot.img. («extra.lzma» - содержит дополнительные драйвера *.ko, которые стартуют при загрузке) Скопируем «extra.lzma» в /volume1/@appstore/debian-chroot/var/chroottarget/test/extra-drv Для распаковки «extra.lzma» выполним команду: lzma -d extra.lzma Далее, извлекаем файлы из «extra»: cpio -idv <extra После чего файл «extra.lzma» можно удалить. В распакованный каталог …/usr/lib/modules/ копируем скомпилированные модули cypress_m8.ko, usbcore.ko, usbserial.ko, а в /etc редактируем файл rc.modules В конце списка EXTRA_MODULES добавляем свои три драйвера, без *.ko rc.modules выглядит примерно так: EXTRA_MODULES="mii mdio libphy atl1 atl1e atl1c alx uio ipg jme skge sky2 ptp_pch pch_gbe qla3xxx qlcnic qlge netxen_nic sfc e1000 pcnet32 vmxnet3 bnx2 libcrc32c bnx2x cnic e1000e igb ixgbe r8101 r8168 r8169 tg3 usbnet ax88179_178a button evdev ohci-hcd cypress_m8 usbcore usbserial" DISK_MODULES="BusLogic vmw_pvscsi megaraid_mm megaraid_mbox megaraid scsi_transport_spi mptbase mptscsih mptspi mptsas mptctl ata_piix megaraid_sas mpt2sas mpt3sas" EXTRA_FIRMWARES="bnx2/bnx2-rv2p-09ax-6.0.17.fw bnx2/bnx2-rv2p-09-6.0.17.fw bnx2/bnx2-rv2p-06-6.0.15.fw tigon/tg3_tso5.bin tigon/tg3_tso.bin tigon/tg3.bin" Дальше, внутри каталога, /volume1/@appstore/debian-chroot/var/chroottarget/test/extra-drv, создаём новый файл cpio, и сжимаем его lzma. Полученный, новый «extra.lzma» записывается в каталог уровнем выше. Выполняем команду: (find . -name modprobe && find . \! -name modprobe) | cpio --owner root:root -oH newc | lzma -8 > ../extra.lzma Полученный файл «extra.lzma», при помощи osfmount, записываем обратно в образ synoboot.img. Теперь произведём настройку DSM 6.1 Выполняем: insmod /lib/modules/cypress_m8.ko mknod /dev/ttyUSB0 c 188 0 chmod 644 /dev/ttyUSB0 Настраиваем скорость порта: stty -F /dev/ttyUSB0 speed 1200 cs8 raw (Дальнейшая настройка подсмотрена тут: https://xpenology.com/forum/topic/4413-dsm-52-5592-update-4-amp-serial-apc-ups/#comment-38621) Редактируем файл: /etc/rc Добавляем в KERNEL_MODULES драйвера «usblp cypress_m8 usbserial»: if [ $KERNEL_VCODE -ge $(KernelVersionCode "4.4") ]; then KERNEL_MODULES="usblp cypress_m8 usbserial llc p8022 psnap usbcore quota_tree quota_v2 crc-ccitt crc-itu-t zlib_inflate dm-bufio dm-snapshot" else KERNEL_MODULES="usblp cypress_m8 usbserial llc p8022 psnap usbcore quota_tree quota_v2 crc-ccitt crc-itu-t zlib_inflate dm-snapshot" fi В конце файла, перед exit 0 добавляем строку запуска службы UPS: /usr/syno/etc/rc.sysv/ups-usb.sh start В файле /usr/syno/etc/rc.sysv/ups-usb.sh правим строку StartAllDrv() { local DRV_LIST="usbhid-ups blazer_usb bcmxcp_usb richcomm_usb tripplite_usb" на StartAllDrv() { local DRV_LIST="powercom usbhid-ups blazer_usb bcmxcp_usb richcomm_usb tripplite_usb" Редактируем файл /usr/syno/etc/ups/ups.conf [ups] driver = powercom port = /dev/ttyUSB0 type = IMP Загружаем файл https://github.com/networkupstools/nut/raw/master/data/cmdvartab и копируем его в каталог /usr/syno/share/ На этом всё. После перезагрузки, UPS должен автоматически появиться в GUI: P.S. Посмотреть более подробный статус UPS можно командой: upsc ups admin@serv01:~$ upsc ups battery.charge: 100.0 driver.name: powercom driver.parameter.pollinterval: 5 driver.parameter.port: /dev/ttyUSB0 driver.parameter.type: IMP driver.version: 2.4.1 driver.version.internal: 0.12 input.frequency: 50.00 input.voltage: 226.0 input.voltage.nominal: 220 output.frequency: 50.00 output.voltage: 226.0 ups.load: 12.0 ups.mfr: PowerCom ups.model: IMP-425AP ups.model.type: IMP ups.serial: Unknown ups.status: OL Edited June 20, 2017 by Firs 6 Quote Link to comment Share on other sites More sharing options...
Lordbl4 Posted June 21, 2017 Share #2 Posted June 21, 2017 после установки обновлений драйвера не слетят? Quote Link to comment Share on other sites More sharing options...
Firs Posted June 21, 2017 Author Share #3 Posted June 21, 2017 3 часа назад, Lordbl4 сказал: после установки обновлений драйвера не слетят? Уверен что всё слетит. Придётся сохранить скомпилированные драйвера и конфиги, чтобы после обновления их "подсунуть" обратно. Quote Link to comment Share on other sites More sharing options...
Firs Posted July 14, 2017 Author Share #4 Posted July 14, 2017 Небольшое дополнение. Чтобы при отключении/включении USB кабеля не приходилось вручную перезапускать службы, можно немного дополнить настройки: Создаём файл /usr/lib/udev/rules.d/99-usb-serial.rules: SUBSYSTEMS=="tty", ATTRS{manufacturer}=="POWERCOM CO., LTD.", ATTRS{product}=="USB to Serial", KERNEL=="ttyUSB[0123]", SYMLINK+="powercom" Конец файла /usr/lib/udev/script/tty-util.sh приводим к следующему виду: case $action in add) add_handler /usr/syno/etc/rc.sysv/ups-usb.sh start ;; remove) remove_handler upsdrvctl stop ;; *) ;; Esac Редактируем файл /usr/syno/etc/ups/ups.conf (заменяем порт на /dev/powercom) [ups] driver = powercom port = /dev/powercom type = IMP В конце файла /etc/rc, перед exit 0 добавляем создание симлинка: #Запуск UPS ln -s /dev/ttyUSB0 /dev/powercom /usr/syno/etc/rc.sysv/ups-usb.sh start exit 0 Quote Link to comment Share on other sites More sharing options...
ars_viper Posted December 17, 2020 Share #5 Posted December 17, 2020 А можно описать какие этапы из этих надо выполнить, чтобы подружить dsm 6.3 С IMP-525ap, подключение по usb Quote Link to comment Share on other sites More sharing options...
ars_viper Posted December 18, 2020 Share #6 Posted December 18, 2020 Прочитал, внимательно и понял что у меня все тоже самое надо проделать, только ИБП IMP 525AP c таким же ID 0d9f:0002 и DSM 6.2.3. Проблема в том, что я вообще ни разу не пользователь *nux систем. Если не затруднит можно расписать подробнее? Quote Link to comment Share on other sites More sharing options...
Firs Posted December 19, 2020 Author Share #7 Posted December 19, 2020 18 часов назад, ars_viper сказал: Если не затруднит можно расписать подробнее? Да уж куда подробнее. Я описал все этапы максимально подробно. Возможно, для DSM 6.2.3 понадобится какая нибудь незначительная адаптация, в виде других путей или версии того же NUT, но в целом должно быть одинаково. Но, мой совет, купите UPS совместимый с Synology "из коробки". Какой нибудь APC Back-UPS стоит недорого, это сэкономит кучу времени и сил, т.к. IMP-525ap ну очень капризный аппарат. Quote Link to comment Share on other sites More sharing options...
KIO1968 Posted December 27, 2020 Share #8 Posted December 27, 2020 В 19.12.2020 в 05:02, Firs сказал: Но, мой совет, купите UPS совместимый с Synology "из коробки". Какой нибудь APC Back-UPS стоит недорого Реально хороший совет! Я когда летом озадачивался данным вопросом, пробежался по авито по местным мухосранским предложениям, и чтоб уж наверняка, решил одной поездкой несколько экземпляров рассмотреть. В итоге купил все 3 рассмотренных девайса, первый АРС 700вт с живой батареей за 1.5Круб, второй и третий киберпауэры с дохлыми батареями, которые без проверки мне предложили забрать за 0.5Круб. Не спрашивайте зачем мне столько... просто жаба задушила, поставил позже аккум, все работает и все видятся хренью. Quote Link to comment Share on other sites More sharing options...
Th3B3st1990 Posted January 3, 2021 Share #9 Posted January 3, 2021 В 15.07.2017 в 04:08, Firs сказал: Небольшое дополнение. Чтобы при отключении/включении USB кабеля не приходилось вручную перезапускать службы, можно немного дополнить настройки: Создаём файл /usr/lib/udev/rules.d/99-usb-serial.rules: SUBSYSTEMS=="tty", ATTRS{manufacturer}=="POWERCOM CO., LTD.", ATTRS{product}=="USB to Serial", KERNEL=="ttyUSB[0123]", SYMLINK+="powercom" Конец файла /usr/lib/udev/script/tty-util.sh приводим к следующему виду: case $action in add) add_handler /usr/syno/etc/rc.sysv/ups-usb.sh start ;; remove) remove_handler upsdrvctl stop ;; *) ;; Esac Редактируем файл /usr/syno/etc/ups/ups.conf (заменяем порт на /dev/powercom) [ups] driver = powercom port = /dev/powercom type = IMP В конце файла /etc/rc, перед exit 0 добавляем создание симлинка: #Запуск UPS ln -s /dev/ttyUSB0 /dev/powercom /usr/syno/etc/rc.sysv/ups-usb.sh start exit 0 Переодически Syno теряет соединение с ИБП. почему-то меняется номер usb порта с ttyUSB0 на ttyUSB1. можно как-то сделать чтоб Syno сам автоматом подхватывал порт в такой ситуации ? Quote Link to comment Share on other sites More sharing options...
Firs Posted January 5, 2021 Author Share #10 Posted January 5, 2021 В 03.01.2021 в 15:52, Th3B3st1990 сказал: Переодически Syno теряет соединение с ИБП. почему-то меняется номер usb порта с ttyUSB0 на ttyUSB1. можно как-то сделать чтоб Syno сам автоматом подхватывал порт в такой ситуации ? Можно попробовать в ups.conf добавить, вместо port = /dev/ttyUSB0 port = /dev/serial/by-id/usb-POWERCOM_CO.__LTD._USB_to_Serial-if00-port0 ну или как он там будет называться у вас Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.