Example #1
0
class ZerosegWeatherClock(object):
    def __init__(self):
        self.timer = None
        self.viewIndex = 0  # defines which info will be displayed
        self.weather = Weather()
        self.display = Display()
        self._setupButtons()

    def _setupButtons(self):
        GPIO.setmode(GPIO.BCM)  # Use BCM GPIO numbers
        GPIO.setup(SWITCH_1, GPIO.IN)
        GPIO.setup(SWITCH_2, GPIO.IN)

    def _resetViewIndex(self):
        """
        Reset the viewIndex to 0 ( = time and date) and the timer to None.
        """
        self.timer = None
        self.viewIndex = 0
        self.display.clear()
        self.updateView(
        )  # call the updateView method directly so the changes are displayed immediately.

    def _incrementViewIndex(self):
        """
        Increment the viewIndex to switch to the next view.
        """
        if self.timer is not None:
            self.timer.cancel()
        self.viewIndex += 1
        self.viewIndex = self.viewIndex % VIEW_TOTAL_NUMBER  # overflow
        self.timer = threading.Timer(DEFAULT_VIEW_DISPLAY_TIME,
                                     self._resetViewIndex)
        self.timer.start()
        self.display.clear()
        self.updateView(
        )  # call the updateView method directly so the changes are displayed immediately.

    def _updateDateTime(self):
        self.display.writeDateAndTime(datetime.now())

    def _updateTime(self):
        self.display.writeTime(dateTimeObject=datetime.now())

    def _updateDate(self):
        self.display.writeDate(dateTimeObject=datetime.now())

    def _updateTemperatureForecast(self):
        temperature = self.weather.getForecastTemperature()
        self.display.writeTemperatureLowHigh(tempLow=temperature.min,
                                             tempHigh=temperature.max)

    def _updateCurrentTemperature(self):
        temperature = self.weather.getCurrentTemperature()
        self.display.writeTemperatureCurrent(temp=temperature.current)

    def updateView(self):
        """
        Update the current view.
        """
        # check the viewIndex and call the corresponding function
        if self.viewIndex == VIEW_INDEX_TIME:
            self._updateTime()
        elif self.viewIndex == VIEW_INDEX_DATE:
            self._updateDate()
        elif self.viewIndex == VIEW_INDEX_TEMPERATURE_FORECAST:
            self._updateTemperatureForecast()
        elif self.viewIndex == VIEW_INDEX_TEMPERATURE_CURRENT:
            self._updateCurrentTemperature()

    def main(self):
        while True:
            try:
                if not GPIO.input(SWITCH_1) or not GPIO.input(SWITCH_2):
                    self._incrementViewIndex()
                self.updateView()
                time.sleep(DEFAULT_UPDATE_INTERVAL)
            except KeyboardInterrupt:
                # self._incrementViewIndex()
                # continue
                self.display.clear()
                raise
Example #2
0
def display_sub():
    stub_menu = Mock(Menu)
    display_sub = Display(stub_menu)
    yield display_sub
    display_sub.clear()