diff --git a/src/generics.py b/src/generics.py index 6ce87fe..ff21d4b 100644 --- a/src/generics.py +++ b/src/generics.py @@ -234,21 +234,21 @@ def function(self): return self.__function def addCallback(self, callback): - """ Provide a callback in the form of callback(isOpening: boolean) to - notify when the relay is openign or closing """ + """ Provide a callback in the form of callback(relay: GenericRelay) to + notify when the relay is opening or closing """ self.__callbackList.append(callback) def openRelay(self): """ Open the relay, break circuit, disabling the function """ for callback in self.__callbackList: - callback(False) + callback(self) self._openRelay() self.__isOpen = True def closeRelay(self): """ Close the relay, connect circuit, enabling the function """ for callback in self.__callbackList: - callback(True) + callback(self) self._closeRelay() self.__isOpen = False @@ -282,7 +282,7 @@ def __init__(self, relays: list): self.__lcd = lcd self.__sensor = sensor - self.__relayIsClosing = False + self.__relayToggled = False self.__relayMap = {r.function: r for r in relays} for relay in relays: relay.addCallback(self.__relayCallback) @@ -317,8 +317,8 @@ def setServiceProvider(self, provider: ServiceProvider): frequency=self.__backlightTimeoutDuration, handlers=self.__backlightTimeout, oneShot=True) - self.__relayClosingTimeoutInvoker = self._installTimerHandler( - frequency=3.0, handlers=self.__relayClosingTimeout, + self.__relayToggledTimeoutInvoker = self._installTimerHandler( + frequency=3.0, handlers=self.__relayToggledTimeout, oneShot=True) self.__drawRowTwoInvoker = self._installTimerHandler( frequency=3.0, @@ -354,8 +354,8 @@ def state(self): return self.__state @property - def relayIsClosing(self): - return self.__relayIsClosing + def relayToggled(self): + return self.__relayToggled def __checkSchedule(self): settings = self._getService(Settings) @@ -476,13 +476,14 @@ def __changeState(self, newState: ThermostatState): self.__state = newState self._fireEvent(ThermostatStateChangedEvent(newState)) - def __relayCallback(self, isClosing: bool): - if isClosing: - self.__relayIsClosing = True - self.__relayClosingTimeoutInvoker.reset() + def __relayCallback(self, relay: GenericRelay): + self.__relayToggled = True + self.__relayToggledTimeoutInvoker.reset() + log.debug("Driver ENTERING relay toggle timeout") - def __relayClosingTimeout(self): - self.__relayIsClosing = False + def __relayToggledTimeout(self): + self.__relayToggled = False + log.debug("Driver COMPLETED relay toggle timeout") def __fanRunout(self): settings = self._getService(Settings) diff --git a/src/hardware.py b/src/hardware.py index 9d09c36..8d4b67d 100644 --- a/src/hardware.py +++ b/src/hardware.py @@ -270,6 +270,6 @@ def __subscribeToButton(self, pin: int, button: Button): def __buttonCallback(self, channel): """ Callback happens on another thread, so this method is marshaling ButtonPressedEvent instances to the main thread to handle """ - if not super().relayIsClosing: + if not super().relayToggled: button = self.__pinToButtonMap[channel] self._fireEvent(ButtonPressedEvent(button)) diff --git a/src/logging.py b/src/logging.py index 272330d..7eca928 100644 --- a/src/logging.py +++ b/src/logging.py @@ -26,4 +26,4 @@ def setupLogging(queue: Queue=None): logging.getLogger('').addHandler(handler) logging.getLogger('chardet.charsetprober').setLevel(logging.INFO) - logging.getLogger('requests').setLevel(logging.INFO) + logging.getLogger('requests').setLevel(logging.WARNING) diff --git a/src/terminal.py b/src/terminal.py index 66ce3a0..4543996 100644 --- a/src/terminal.py +++ b/src/terminal.py @@ -25,6 +25,9 @@ def setBacklight(self, enabled: bool): self.__backlightEnabled = enabled self.commit() + def refresh(self): + self.__window.refresh() + def commit(self): """ Commits all pending changes to the display """ results = super().commit() @@ -109,8 +112,9 @@ def __init__(self, stdscr, messageQueue: Queue): TerminalRelay(ThermostatState.FAN, 3, 2, 32), ) + self.__lcd = TerminalDisplay(self.__displayWin, 20, 4) super().__init__( - lcd=TerminalDisplay(self.__displayWin, 20, 4), + lcd=self.__lcd, sensor=self.__environmentSensor, relays=self.__relayList, ) @@ -138,6 +142,8 @@ def __updateDisplay(self): # Redraw the relay status for relay in self.__relayList: relay.redraw() + self.__logWin.refresh() + self.__lcd.refresh() def __keyPressedHandler(self, event: KeyPressedEvent): # Handle any key presses @@ -145,6 +151,7 @@ def __keyPressedHandler(self, event: KeyPressedEvent): if char == ord('l'): self.__stdscr.clear() self.__stdscr.refresh() + self.__updateDisplay() elif char == ord('9'): super()._fireEvent(PowerPriceChangedEvent( price=self.__lastPrice-0.25, nextUpdate=1)) @@ -152,13 +159,13 @@ def __keyPressedHandler(self, event: KeyPressedEvent): super()._fireEvent(PowerPriceChangedEvent( price=self.__lastPrice+0.25, nextUpdate=1)) elif char == ord('1'): - if not super().relayIsClosing: + if not super().relayToggled: super()._modifyComfortSettings(1) elif char == ord('2'): - if not super().relayIsClosing: + if not super().relayToggled: super()._modifyComfortSettings(-1) elif char == ord('3'): - if not super().relayIsClosing: + if not super().relayToggled: super()._nextMode() else: log.debug("Ignoring button during relay closure") @@ -190,6 +197,8 @@ def __keyPressListener(self): def __processMessageQueue(self): # Update any pending log messages to the log window + if self.__messageQueue.qsize(): + self.__updateDisplay() while self.__messageQueue.qsize(): message = self.__messageQueue.get() y, x = self.__logWin.getmaxyx()