Inkycal/modules/inkycal.py
Ace 5d714665a4
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.
2020-01-17 17:03:38 +01:00

112 lines
3.2 KiB
Python

#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
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
import arrow
from time import sleep
import gc
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)
"""Remove previously generated images"""
image_cleanup()
"""Check time and calibrate display if time """
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----------')
"""----------------Generating and assembling images------"""
if top_section == 'Weather':
try:
weather.main()
weather_image = Image.open(image_path + 'weather.png')
image.paste(weather_image, (0, 0))
except:
pass
if middle_section == 'Calendar':
try:
calendar.main()
calendar_image = Image.open(image_path + 'calendar.png')
image.paste(calendar_image, (0, middle_section_offset))
except:
pass
if middle_section == 'Agenda':
try:
agenda.main()
agenda_image = Image.open(image_path + 'agenda.png')
image.paste(agenda_image, (0, middle_section_offset))
except:
pass
if bottom_section == 'RSS':
try:
rss.main()
rss_image = Image.open(image_path + 'rss.png')
image.paste(rss_image, (0, bottom_section_offset))
except:
pass
image.save(image_path + 'canvas.png')
"""---------Refreshing E-Paper with newly created image-----------"""
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()
"""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))][::-1]
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))
del update_timings, minutes, image
sleep(refresh_countdown)