Last active
February 10, 2024 20:09
-
-
Save BCadet/7ce29a5c32da552d96c1ef48f5111147 to your computer and use it in GitHub Desktop.
simple python driver to communicate with USB relay module. It handles several versions with differents numbers of relays
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import serial | |
import argparse | |
import logging | |
class USBRelays(): | |
class Relay(): | |
index = ... | |
header = 0xA0 | |
def __init__(self, index, log): | |
self.index = index+1 | |
self.log = log | |
def setOutput(self, serial, value): | |
chksum = self.header + self.index + value | |
frame = bytearray() | |
frame.append(self.header) | |
frame.append(self.index) | |
frame.append(value) | |
frame.append(chksum) | |
self.log.debug(f'{frame=}') | |
serial.write(frame) | |
def __init__(self, port, baud, relaysNum): | |
self.log = logging.getLogger("USBRelays") | |
self.log.addHandler(logging.StreamHandler()) | |
self.serial = serial.Serial(port, baud) | |
self.relays = [self.Relay(i, self.log) for i in range(relaysNum)] | |
def setOutput(self, relayNum, value): | |
self.log.debug(f'set relay {relayNum} to {value}') | |
self.relays[relayNum].setOutput(self.serial, value) | |
if __name__ == "__main__": | |
parser = argparse.ArgumentParser() | |
parser.add_argument("-p", "--port", help="serial port", default="/dev/ttyUSB0") | |
parser.add_argument("-b", "--baud", help="serial port baudrate", type=int, default=9600) | |
parser.add_argument("-n", "--relayNum", help="number of available relays", type=int, default=1) | |
parser.add_argument("-r", "--relay", help="selected relay (start at 0)", type=int, default=0) | |
parser.add_argument("-v", "--value", help="value to apply to the relay", type=int, default=1) | |
parser.add_argument("-d", "--debug", help="print debug", action='store_true') | |
args = parser.parse_args() | |
USB = USBRelays(args.port, args.baud, args.relayNum) | |
if args.debug: | |
USB.log.setLevel(logging.DEBUG) | |
USB.setOutput(args.relay, args.value) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment