From 19bc10f5df5fa88a7ec8fac70dd5e070a639d730 Mon Sep 17 00:00:00 2001 From: Ben Connors Date: Fri, 8 Nov 2019 23:36:02 -0500 Subject: Fix some output stuff - Can now defer output load, retry if it fails - New command for showing (currently) output status --- interface/ola.py | 45 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 4 deletions(-) (limited to 'interface/ola.py') diff --git a/interface/ola.py b/interface/ola.py index 445b991..5fee44d 100644 --- a/interface/ola.py +++ b/interface/ola.py @@ -1,8 +1,13 @@ import array -from ola.OlaClient import OlaClient +import threading +import time + +from ola.OlaClient import OlaClient, OLADNotRunningException class OLAOutput: + name = "OLA" + def set_values(self, values): send = set() for c, v in values.items(): @@ -13,10 +18,42 @@ class OLAOutput: if uni[addr] != v: uni[addr] = v send.add(univ) - for univ in send: - self.client.SendDmx(univ, self.universes[univ]) + with self._clock: + if self.client is not None: + for univ in send: + self.client.SendDmx(univ, self.universes[univ]) + + def _setup_client(self): + while True: + try: + self.client = OlaClient() + except OLADNotRunningException: + time.sleep(1) + else: + break + + @property + def ok(self): + with self._clock: + return self.client is not None + + @property + def status(self): + with self._clock: + if self.client is None: + return "Unable to connect to olad" + else: + return "Everything's good" def __init__(self): - self.client = OlaClient() + self.client_thread = None + try: + self.client = OlaClient() + except OLADNotRunningException: + self.client = None + self.client_thread = threading.Thread(target=self._setup_client) + self.client_thread.start() self.universes = {1: array.array('B', (0 for i in range(512)))} + + self._clock = threading.RLock() -- cgit v1.2.3