From 5d714665a435a4cb92810880812847a9803a63a6 Mon Sep 17 00:00:00 2001 From: Ace Date: Fri, 17 Jan 2020 17:03:38 +0100 Subject: [PATCH] Minor improvements + Bugfixes Fixed a bug where the update interval would be calculated incorrectly. The display will now update as specified in the settings file. Instead of importing a single driver file, this module will automatically import the driver file for the specified E-Paper (in the settings file). This means that even though more E-Papers are now supported, the code will not become too complex. Calibration has been omitted for now to test if the E-Paper shows signs of ghosting. --- modules/inkycal.py | 84 +++++++++++++++++++++------------------------- 1 file changed, 39 insertions(+), 45 deletions(-) diff --git a/modules/inkycal.py b/modules/inkycal.py index 3ee2f93..ac03ff5 100644 --- a/modules/inkycal.py +++ b/modules/inkycal.py @@ -1,28 +1,27 @@ #!/usr/bin/python3 # -*- coding: utf-8 -*- """ -Main script of Inky-Calendar software. +v1.7.1 + +Main file of Inky-Calendar software. Creates dynamic images for each section, +assembles them and sends it to the E-Paper + Copyright by aceisace """ from __future__ import print_function -from configuration import * -from settings import * import arrow from time import sleep import gc -import inkycal_drivers as drivers - import inkycal_rss as rss import inkycal_weather as weather import inkycal_calendar as calendar import inkycal_agenda as agenda +from configuration import * +import importlib +driver = importlib.import_module('drivers.'+model) -display = drivers.EPD() -skip_calibration = False - -"""Perepare for execution of main programm""" -calibration_countdown = 'initial' +"""Remove previously generated images""" image_cleanup() """Check time and calibrate display if time """ @@ -30,32 +29,12 @@ while True: now = arrow.now(tz=get_tz()) for _ in range(1): image = Image.new('RGB', (display_width, display_height), background_colour) - + """------------------Add short info------------------""" print('Current Date: {0} \nCurrent Time: {1}'.format(now.format( 'D MMM YYYY'), now.format('HH:mm'))) print('-----------Main programm started now----------') - - - """------------------Calibration check----------------""" - if skip_calibration != True: - print('Calibration..', end = ' ') - if now.hour in calibration_hours: - if calibration_countdown == 'initial': - print('required. Performing calibration now.') - calibration_countdown = 0 - display.calibrate_display(3) - else: - if calibration_countdown % (60 // int(update_interval)) == 0: - display.calibrate_display(3) - calibration_countdown = 0 - else: - print('not required. Continuing...') - else: - print('Calibration skipped!. Please note that not calibrating e-paper', - 'displays causes ghosting') - """----------------Generating and assembling images------""" if top_section == 'Weather': try: @@ -72,7 +51,7 @@ while True: image.paste(calendar_image, (0, middle_section_offset)) except: pass - + if middle_section == 'Agenda': try: agenda.main() @@ -80,7 +59,7 @@ while True: image.paste(agenda_image, (0, middle_section_offset)) except: pass - + if bottom_section == 'RSS': try: rss.main() @@ -89,29 +68,44 @@ while True: except: pass - image.save(image_path + 'canvas.png') + image.save(image_path + 'canvas.png') """---------Refreshing E-Paper with newly created image-----------""" - display.show_image(image, reduce_colours= True) + epaper = driver.EPD() + print('Initialising E-Paper...', end = '') + epaper.init() + print('Done') + + if three_colour_support == True: + print('Sending image data and refreshing display...', end='') + black_im, red_im = split_colours(image) + epaper.display(epaper.getbuffer(black_im), epaper.getbuffer(red_im)) + print('Done') + else: + print('Sending image data and refreshing display...', end='') + epaper.display(epaper.getbuffer(image.convert('1', dither=True))) + print('Done') + + print('Sending E-Paper to deep sleep...', end = '') + epaper.sleep() + print('Done') """--------------Post processing after main loop-----------------""" """Collect some garbage to free up some resources""" gc.collect() - """Adjust calibration countdowns""" - if calibration_countdown == 'initial': - calibration_countdown = 0 - calibration_countdown += 1 - """Calculate duration until next display refresh""" for _ in range(1): update_timings = [(60 - int(update_interval)*updates) for updates in - range(60//int(update_interval))] + range(60//int(update_interval))][::-1] - minutes = [i - now.minute for i in update_timings if i >= now.minute] - refresh_countdown = minutes[0]*60 + (60 - now.second) + for _ in update_timings: + if now.minute <= _: + minutes = _ - now.minute + break + + refresh_countdown = minutes*60 + (60 - now.second) + print('{0} Minutes left until next refresh'.format(minutes)) - print('{0} Minutes left until next refresh'.format(minutes[0])) - del update_timings, minutes, image sleep(refresh_countdown)