viri-leds-dmx-sacn/main.py

67 lines
1.5 KiB
Python
Executable file

#!/usr/bin/env python3
import logging
from argparse import ArgumentParser
from queue import Queue
from sys import exit
from time import sleep
from sacn.sending.sender_socket_base import DEFAULT_PORT
from conf import load_and_validate_config
from dmx_queue import DMXQueue
from mqtt_queue import MQTTQueue
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s %(name)30s [%(levelname)-8s] %(message)s",
)
LOG = logging.getLogger("main")
def main():
parser = ArgumentParser()
parser.add_argument(
"--config",
default="config.toml",
)
args = parser.parse_args()
config = load_and_validate_config(args.config)
LOG.info("Welcome to Voc2DMX")
queues = {}
dmx_workers = {}
LOG.info("Initializing worker queues ...")
mqttq = MQTTQueue(config, queues)
mqttq.start()
for idx, universe in enumerate(config.universes):
queues[universe] = Queue()
dmx_workers[universe] = DMXQueue(
config=config,
universe_name=universe,
queue=queues[universe],
sender_port=DEFAULT_PORT + idx,
)
dmx_workers[universe].start()
LOG.info("initialization done, now running. Press Ctrl-C to stop")
try:
while True:
sleep(1)
finally:
LOG.warning("Got interrupt, stopping queues ...")
mqttq.stop()
for universe in config.universes:
dmx_workers[universe].stop()
LOG.info("Bye!")
if __name__ == "__main__":
main()