Управление электропитанием с помощью USB-реле
После некоторых поисков остались такие варианты:
- JTAG-кабель (например JTAG Olimex) имеет возможность послать сигнал перезагрузки. Из минусов: кабель может быть дорогой и не все устройства имеют JTAG разъем. Больше информации.
- “Пилот” с управлением по USB (Defender DFS-701), похоже что не продается
- EG-PMS2-LAN, управление питанием по сети, не продается (купить)
- реле для управления питанием, я нашёл такие варианты:
USB
готовое реле: RODOS-3b, MP709 - USB РЕЛЕ, USB - РЕЛЕ 1.0, MP515, USB-релеUSB
firmware, купить релеUSB
собрать самому на базе ATTiny схемаEthernet
Ethernet-релеEthernet
DIN Relay IV
- управление питанием маломощных устройств, которые могут получать питание по 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
На тему управления питанием есть два интересных доклада: