Управление электропитанием с помощью USB-реле

После некоторых поисков остались такие варианты:

  • JTAG-кабель (например JTAG Olimex) имеет возможность послать сигнал перезагрузки. Из минусов: кабель может быть дорогой и не все устройства имеют JTAG разъем. Больше информации.
  • “Пилот” с управлением по USB (Defender DFS-701), похоже что не продается
  • EG-PMS2-LAN, управление питанием по сети, не продается (купить)
  • реле для управления питанием, я нашёл такие варианты:
  • управление питанием маломощных устройств, которые могут получать питание по USB, с помощью uhubctl. Минусы: USB максимум 5V может отдать, у нас в устройствах бывает больше 5V и хотелось всё-таки иметь возможность управлять питанием обычных настольных компьютеров.
  • серия устройств NetPing. Минусы: дорого и наличие сети усложняет инфраструктуру.

Инструкция

Я остановился на RODOS-3b. Для сборки купил корпус, вилку и розетку 2П+З 16А 250В на кабель, кусок провода ШВВП 2.0 x 5. После сборки получился удлинитель с реле. Провод к реле подключал в разъёмы N.O и COM (см. инструкцию), чтобы большую часть времени реле было разомкнуто. В идеале хотелось бы встроить реле в розетку, наподобие такой, но нет гарантии, что места внутри под реле хватит, поэтому нашел коробку в форме параллелипипеда и упаковал реле в него.

Реле

Подключаем устройство по USB и проверяем, что оно появилось в системе: $ lsusb ... Bus 001 Device 017: ID 20a0:4173 Clay Logic ... $

Выполняем поиск устройства с помощью управляющей программы: $ sudo ./RODOS3 Поиск устройств... RODOS-3 ID: 7621 Найдено RODOS-3: 1 $

По умолчанию, для доступа к USB устройству нужны права суперпользователя. Чтобы избежать этого нужно создать файл с правилом для udev: $ cat /etc/udev/rules.d/60-rodos3.rules SUBSYSTEM=="usb", ATTRS{idVendor}=="20a0", ATTRS{idProduct}=="4173", MODE="0666"

Перезагрузить правила: $ udevadm control --reload-rules

И физически переподключить устройство. После этого можно управлять устройством под обычным пользователем.

По умолчанию программа от производителя может делать только ON и OFF для устройства. Поэтому в моей версии есть небольшой патч, который добавляет опцию --reset.

На плате iMX.6 при перезагрузке с помощью кабеля питания не происходит правильной реинициализации сетевой карты, U-boot пишет: No ethernet found.. Чтобы этого избежать можно добавить в bootcmd команду reset: => printenv ... bootcmd=tftp Komset/kos-image; bootelf 0x12000000; reset ... => setenv bootcmd 'tftp Komset/kos-image; bootelf 0x12000000; reset' => saveenv

На тему управления питанием есть два интересных доклада:

Теги: softwaretestingfeed