import sys from character_display import CharacterDisplay from multiprocessing import Event from multiprocessing import Process from signal import signal from signal import SIGTERM from time import sleep from time_display import TimeDisplay from weather_display import WeatherDisplay from weather_updater import WeatherUpdater try: import unicornhathd as unicorn unicorn.rotation(90) except ImportError: from unicorn_hat_sim import unicornhathd as unicorn unicorn.rotation(180) WEATHER_UPDATE_INTERVAL_IN_SECONDS = 60 DISPLAY_UPDATE_INTERVAL_IN_SECONDS = 0.5 CONFIG_FILE = 'chutney.cfg' def main(): haltEvent = Event() signal(SIGTERM, cleanExit(unicorn, haltEvent)) unicorn.brightness(0.3) weatherThread = Process(target=weatherLoop, args=[haltEvent]) weatherThread.start() characterDisplay = CharacterDisplay(unicorn) timeDisplay = TimeDisplay(characterDisplay, topRow=15) weatherDisplay = WeatherDisplay(characterDisplay, topRow=9) while True: timeDisplay.showTime() weatherDisplay.showWeather() sleep(DISPLAY_UPDATE_INTERVAL_IN_SECONDS) def weatherLoop(haltEvent): weatherUpdater = WeatherUpdater(configFile=CONFIG_FILE) while not haltEvent.is_set(): weatherUpdater.updateWeather() haltEvent.wait(timeout=WEATHER_UPDATE_INTERVAL_IN_SECONDS) weatherUpdater.clearWeather() def cleanExit(unicorn, haltEvent): def _exit_(signum, frame): unicorn.off() haltEvent.set() sys.exit(0) return _exit_ if __name__ == '__main__': main()