Поиск

USB-HID релюшка


В целях простейшего управления небольшими нагрузками в сети ~220В, чтобы в очередной раз не городить самопальную розетку в случае, когда нет нужды заморачиваться с измерением тока или защитой релюшек симисторами, решил купить на али простую розетку на два канала. Предварительно погуглив, нашел, что под линукс есть как минимум два варианта управления ею, т.е. ломать протокол, как в случае HSFW, не придется.
Конечно, китайцы — те еще кадры! Вот зачем, спрашивается, нужно было городить HID, если CDC намного удобней? Был бы этот релюшкомодуль на CDC, можно было бы сразу воткнуть его и работать. Но нет, нужно пиликать какую-нибудь простецкую утилиту.
А еще забавно, что здесь «тинька» используется: не лень же было кому-то софтовый USB пилить для нее! Странно, что не поставили какой-нибудь дешевый CH554. Опять в лужу сели китайцы, которые вроде как везде пытаются сэкономить!

Мне не понравилось, что в обоих вариантах с гитхаба было довольно-таки много лишнего, да и использовались всякие сторонние библиотеки вроде libhidapi (пришлось ставить ее исключительно для того, чтобы эти финтифлюшки проверить). Поэтому, взяв за основу простейший пример работы с HID из ядра, а в качестве протокола расковыряв вот это, сделал наипростейшую управлялку модулем реле. Единственная библиотека, от которой зависит эта утилитка — мои usefull_macros (добавил только для разбора командной строки), но при желании можно и это выкинуть, разбирая стандартным getopt_long вручную.
Ключи:
-d — имя устройства (/dev/hidrawX), его нужно вводить ручками (можно, в принципе, поиск сделать, пробегаясь по всем /dev/hidrawXX, пока не кончится нумерация);
-h — help;
-q — пресечь лишний вывод на терминал;
-r — выключить данный канал (можно указывать несколько этих ключей подряд, по одному на каждый канал);
-s — включить данный канал (аналогично).

Скажем, чтобы в моем двухрелюшечном модуле включить обе релюхи, нужно написать: ./relay_manage -d /dev/hidraw4 -s1 -s2.
Без ключа -q выводится всякая информация, скажем, для вышеупомянутой команды будет:

Raw Name: www.dcttech.com USBRelay2 N relays = 2
RESET: 1 RESET: 2 Relay serial: HW343
Relay0=0
Relay1=0

Тут где-то навставлял лишних пробелов, но лень уже в исходники лезть и коммит делать.
Забавно, что этот модуль сразу после включения идентифицирует себя как «HURTM», однако, буквально со второго обращения его «серийник» уже «HW343» ☺
Никому нельзя верить! А разработчики вышеупомянутых утилит предлагают по «серийнику» к релюшкам обращаться (если их несколько подключено).
eddy_em.livejournal.com

Добавить комментарий