+bin/heat,+bin/usbrelay
[nethome.git] / bin / usbrelay
1 #!/usr/bin/env python3
2 # -*- encoding: utf-8 -*-
3 # https://slomkowski.eu/tutorials/eavesdropping-usb-and-writing-driver-in-python/
4
5 import time
6 import sys
7
8 import usb.core
9 import usb.util
10
11 VENDOR_ID = 0x16c0
12 DEVICE_ID = 0x05df
13
14 MANUFACTURER_NAME = "www.dcttech.com"
15 PRODUCT_NAME = "USBRelay2"
16
17
18 def check_manufacturer_and_product(dev):
19     return dev.manufacturer == MANUFACTURER_NAME and dev.product == PRODUCT_NAME
20
21
22 def find_device_handle():
23     return usb.core.find(idVendor=VENDOR_ID, idProduct=DEVICE_ID,
24                          custom_match=check_manufacturer_and_product)
25
26
27 dev_handle = find_device_handle()
28
29 if dev_handle.is_kernel_driver_active(0):
30     try:
31         dev_handle.detach_kernel_driver(0)
32         print("kernel driver detached")
33     except usb.core.USBError as e:
34         sys.exit("Could not detach kernel driver: %s" % str(e))
35
36 requestType = usb.util.build_request_type(usb.util.CTRL_OUT,
37                                           usb.util.CTRL_TYPE_CLASS,
38                                           usb.util.CTRL_RECIPIENT_INTERFACE)
39
40
41 def set_relay(relay_number, enabled: bool):
42     b1 = 0xff if enabled else 0xfd
43     dev_handle.ctrl_transfer(requestType, 9, 0x0300, 0, (b1, relay_number, 0, 0, 0, 0, 0, 0))
44
45
46 #while True:
47 #    set_relay(1, True)
48 #    time.sleep(1)
49 #    set_relay(1, False)
50 #    time.sleep(1)
51 #    set_relay(2, True)
52 #    time.sleep(1)
53 #    set_relay(2, False)
54 #    time.sleep(1)
55
56
57 if len(sys.argv)!=3 or (sys.argv[1]!="1" and sys.argv[1]!="2") or (sys.argv[2]!="0" and sys.argv[2]!="1"):
58     sys.exit("usbrelay: {1|2} {0|1}")
59 set_relay((1 if sys.argv[1]=="1" else 2),(True if sys.argv[2]=="1" else False))