#!/usr/bin/python3 # -*- coding: utf-8 -*- """ E-Paper Software (main script) for the 3-colour and 2-Colour E-Paper display A full and detailed breakdown for this code can be found in the wiki. If you have any questions, feel free to open an issue at Github. Copyright by aceisace """ from __future__ import print_function from datetime import datetime from time import sleep from Assets import datetime_locals import locale from DebugConsole import DebugConsole from settings import * from MonthOvPanel import MonthOvPanel from WeatherHeaderDesign import WeatherHeaderDesign import OwmForecasts import IcalEvents locale.setlocale(locale.LC_ALL, datetime_locals[language]) debug = DebugConsole() output_adapters = [] if render_to_file: import ImageFileAdapter epd = ImageFileAdapter.ImageFileAdapter() output_adapters.append(epd) if render_to_display: if display_colours == "bwr": import Epd7in5bAdapter epd = Epd7in5bAdapter.Epd7in5bAdapter() output_adapters.append(epd) elif display_colours == "bw": import Epd7in5Adapter epd = Epd7in5Adapter.Epd7in5Adapter() output_adapters.append(epd) """Main loop starts from here""" def main (): while True: time = datetime.now() hour = int(time.strftime("%H")) month = int(time.now().strftime('%m')) year = int(time.now().strftime('%Y')) for i in range(1): debug.print_line('_________Starting new loop___________' + '\n') debug.print_line('Date:'+ time.strftime('%a %d %b %y') + ', time: ' + time.strftime('%H:%M') + '\n') if hour in calibrate_hours: for output in output_adapters: output.calibrate() design = MonthOvPanel((epd.width, epd.height)) debug.print_line("Connecting to Openweathermap API servers...") owm = OwmForecasts.OwmForecasts(api_key) design.add_weather(OwmForecasts.OwmForecasts(api_key)) debug.print_line('Fetching events from your calendar' + '\n') events_cal = IcalEvents.IcalEvents(ical_urls) design.add_calendar(events_cal) ##Credit to Hubert for suggesting truncating event names #def write_text_left (box_width, box_height, text, tuple): # text_width, text_height = font.getsize(text) # while (text_width, text_height) > (box_width, box_height): # text=text[0:-1] # text_width, text_height = font.getsize(text) # y = int((box_height / 2) - (text_height / 2)) # space = Image.new('L', (box_width, box_height), color=255) # ImageDraw.Draw(space).text((0, y), text, fill=0, font=font) # image.paste(space, tuple) #"""Write event dates and names on the E-Paper""" #for dates in range(len(upcoming)): # write_text(70, 25, (upcoming[dates].begin_datetime.strftime('%d %b')), date_positions['d' + str(dates + 1)]) #for events in range(len(upcoming)): # write_text_left(314, 25, (upcoming[events].title), event_positions['e' + str(events + 1)]) for output in output_adapters: output.render(design) debug.print_line("Finished rendering") for i in range(1): nexthour = ((60 - int(time.strftime("%M"))) * 60) - (int(time.strftime("%S"))) sleep(nexthour) if __name__ == '__main__': main()