diff --git a/light9/collector/service.py b/light9/collector/service.py --- a/light9/collector/service.py +++ b/light9/collector/service.py @@ -9,6 +9,7 @@ Input can be over http or zmq. import asyncio import functools import logging +import subprocess import traceback from typing import List @@ -35,6 +36,7 @@ import zmq.asyncio STAT_SETATTR = Summary('set_attr', 'setAttr calls') +# this is the rate sent to usb RATE = 20 @@ -91,6 +93,14 @@ async def zmqListener(collector): traceback.print_exc() raise +def findDevice(): + for line in subprocess.check_output("lsusb").decode('utf8').splitlines(): + if '16c0:05dc' in line: + words = line.split(':')[0].split() + dev = f'/dev/bus/usb/{words[1]}/{words[3]}' + log.info(f'device will be {dev}') + return dev ,int(words[3]) + raise ValueError("no matching uDMX found") def main(): logging.getLogger('autodepgraphapi').setLevel(logging.INFO) @@ -99,16 +109,17 @@ def main(): graph = SyncedGraph(networking.rdfdb.url, "collector") + devPath, usbAddress = findDevice() + # if user doesn't have r/w, fail now try: # todo: drive outputs with config files - rate = 30 outputs: List[Output] = [ # ArtnetDmx(L9['output/dmxA/'], # host='127.0.0.1', # port=6445, # rate=rate), #sudo chmod a+rw /dev/bus/usb/003/021 - Udmx(L9['output/dmxA/'], bus=3, address=21, lastDmxChannel=200, rate=RATE), + Udmx(L9['output/dmxA/'], bus=1, address=usbAddress, lastDmxChannel=200, rate=RATE), ] except Exception: log.error("setting up outputs:")