Skip to main content

A tool for controlling USB HID relays

Project description

Python Utility for controlling HID USB Relays

This utility is a Python version of usb-relay-hid

Installation

The latest version can be installed using pip:

python3 -m pip install pyhid-usb-relay

Manual Installation

The library can be manually installed using poetry:

poetry install

From here, you can either run the pyhid-usb-relay command with:

poetry run pyhid-usb-relay

If you want to build a wheel for installation, run

poetry build

Usage

Standalone app outside of python

pyhid-usb-relay --help

Inside a python app/script

import pyhid_usb_relay

relay = pyhid_usb_relay.find()

print(relay.state)
print("Toggeling relay")

relay.toggle_state(1)

print(relay.state)

Configuration

Relay configuration is read from the file $XDG_CONFIG_HOME/usb-hid-relay/config.yaml (usually ~/.config/usb-hid-relay/config.yaml). This YAML file should contain a top level dictionary key for each relay serial number to be configured, like so:

5291D:
  defaults:
    ...
  aliases:
    ...

The following properties may be defined in the default section and apply to all relays on the board:

  • invert - A boolean that indicates if the relay logic should be inverted
  • pulse-time - A floating point number of seconds the relay should remain in the opposite state when pyhid-usb-relay toggle --pulse is called

Aliases are created by adding a new key under aliases with a relay property indicating which relay number the alias controls. For example the following config creates an alias called foo that may be used in place of relay number 2 in the API:

5219D:
  aliases:
    foo:
      relay: 2

Aliases may also define any of the properties listed in defaults, in which case they only apply when the specific alias is used. Note that these properties apply to the alias not the relay number. Using a relay number in the API will only apply the defaults

An example configuration is show here:

# Define properties for relay board with serial 5291D
5291D:
  defaults:
    invert: true    # Invert all relays by default
    pulse-time: 5.0 # Default pulse time is 5 seconds for this board
  aliases:
    foo:                # Create an alias called "foo"
      relay: 1          # This alias controls relay 1
      invert: false     # Don't invert this alias (overrides the default)
      pulse-time: 1.0   # Override default pulse-time for this alias

Permissions

If you want to access the relay devices as a normal user (which is recommended, since it will respect your local configuration), you will need to modify your udev rules to allow access to the HID device. You can do this by creating a file named /etc/udev/rules.d/90-hidusb-relay.rules with the following contents:

# Give all users access to USB HID Relay
SUBSYSTEM=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", MODE:="0660", GROUP="dialout"

You may need to reload your udev rules with sudo udevadm control --reload-rules and unplug and reattach the USB relay board for this to take effect

NOTE This rule allows any user that is part of the dialout group to access the board. If this is not what you want, you should change the udev rules.

Fixing Serial Numbers

The relays that this tool is designed to control have a quirk that they all report the same USB Vendor, Product, and Serial Number (The serial number used by this code is retrieved by the HID API). This can make it hard to distinguish between multiple relays attached to the same device using udev rules.

The pyhid-usb-relay tool can be used to help resolve this by using the get-serial subcommand, which will fetch the HID serial number from the device with a udev rule that looks like:

SUBSYSTEM=="usb", ATTR{idVendor}=="16c0", ATTR{idProduct}=="05df", ACTION=="add", PROGRAM="/usr/local/bin/pyhid-usb-relay get-serial '%E{BUSNUM}' '%E{DEVNUM}'", ENV{ID_SERIAL}:="%c"

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyhid_usb_relay-1.0.1.tar.gz (6.0 kB view details)

Uploaded Source

Built Distribution

pyhid_usb_relay-1.0.1-py3-none-any.whl (8.7 kB view details)

Uploaded Python 3

File details

Details for the file pyhid_usb_relay-1.0.1.tar.gz.

File metadata

  • Download URL: pyhid_usb_relay-1.0.1.tar.gz
  • Upload date:
  • Size: 6.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.6

File hashes

Hashes for pyhid_usb_relay-1.0.1.tar.gz
Algorithm Hash digest
SHA256 cfa522b20714e57d4f3ec21e7c70c776abe4bcc5b3573925a4465c338da0f2a5
MD5 3f90a77edff096c0236b8819f09def50
BLAKE2b-256 5d896a2d8bb4d579b33c18070d556912bfb2532199c7664bf3df7c869fab3988

See more details on using hashes here.

File details

Details for the file pyhid_usb_relay-1.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for pyhid_usb_relay-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 bc12b1f5a5fd8a88e7f111b276bebcebebcfddaf5bb0fd7ba3631b349f29feb3
MD5 fd44618b5600f95fc7abc02fd8605248
BLAKE2b-256 e733aab9c0c2c520f24caf55266c9921ace890ef752637baf5dfaac16f655c36

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page