Delete stable(beta).py
This commit is contained in:
parent
9a06553ea3
commit
44facd0826
1 changed files with 0 additions and 252 deletions
|
@ -1,252 +0,0 @@
|
|||
#!/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
|
||||
"""
|
||||
print('importing modules')
|
||||
from settings import *
|
||||
from icon_positions_locations import *
|
||||
|
||||
from PIL import Image, ImageDraw, ImageFont, ImageOps
|
||||
import calendar, pyowm
|
||||
from ics import Calendar, Event
|
||||
from datetime import datetime
|
||||
from time import sleep
|
||||
try:
|
||||
from urllib.request import urlopen
|
||||
except Exception as e:
|
||||
print('It seems the network is offline :(')
|
||||
pass
|
||||
import arrow
|
||||
print('modules imported successfully!'+'\n')
|
||||
|
||||
if display_colours == "bwr":
|
||||
import epd7in5b
|
||||
epd = epd7in5b.EPD()
|
||||
from calibration import calibration
|
||||
|
||||
if display_colours == "bw":
|
||||
import epd7in5
|
||||
epd = epd7in5.EPD()
|
||||
from calibration_bw import calibration
|
||||
|
||||
EPD_WIDTH = 640
|
||||
EPD_HEIGHT = 384
|
||||
font = ImageFont.truetype(path+'Assistant-Bold.ttf', 18)
|
||||
im_open = Image.open
|
||||
|
||||
def main():
|
||||
while True:
|
||||
|
||||
time = datetime.now()
|
||||
hour = int(time.strftime("%-H"))
|
||||
|
||||
for i in range(1):
|
||||
"""At the following hours (midnight, midday and 6 pm), perform
|
||||
a calibration of the display's colours"""
|
||||
if (hour is 0) or (hour is 12) or (hour is 18):
|
||||
print('performing calibration for colours now')
|
||||
calibration()
|
||||
|
||||
print('Current date:',time.strftime('%a %-d %b %y'))
|
||||
print('Current time:', time.strftime('%H:%M')+'\n')
|
||||
|
||||
"""Create a blank page"""
|
||||
image = Image.new('L', (EPD_WIDTH, EPD_HEIGHT), 255)
|
||||
draw = (ImageDraw.Draw(image)).bitmap
|
||||
|
||||
"""Draw the icon showing the current month"""
|
||||
draw(monthplace, im_open(mpath+str(time.strftime("%B"))+'.bmp'))
|
||||
|
||||
"""Draw the 3 lines that seperates the top section"""
|
||||
draw(seperatorplace, separator)
|
||||
|
||||
"""Draw the icons with the weekday-names (Mon, Tue...) and
|
||||
draw a circle on the current weekday"""
|
||||
if (week_starts_on == "Monday"):
|
||||
calendar.setfirstweekday(calendar.MONDAY)
|
||||
draw(weekplace, weekmon)
|
||||
draw(weekdaysmon[(time.strftime("%a"))], weekday)
|
||||
|
||||
if (week_starts_on == "Sunday"):
|
||||
calendar.setfirstweekday(calendar.SUNDAY)
|
||||
draw(weekplace, weeksun)
|
||||
draw(weekdayssun[(time.strftime("%a"))], weekday)
|
||||
|
||||
"""Using the built-in calendar function, draw icons for each
|
||||
number of the month (1,2,3,...28,29,30)"""
|
||||
cal = calendar.monthcalendar(time.year, time.month)
|
||||
#print(cal) #-uncomment for debugging with incorrect dates
|
||||
|
||||
for i in cal[0]:
|
||||
draw(positions['a'+str(cal[0].index(i)+1)] ,im_open(dpath+str(i)+'.bmp'))
|
||||
for i in cal[1]:
|
||||
draw(positions['b'+str(cal[1].index(i)+1)] ,im_open(dpath+str(i)+'.bmp'))
|
||||
for i in cal[2]:
|
||||
draw(positions['c'+str(cal[2].index(i)+1)] ,im_open(dpath+str(i)+'.bmp'))
|
||||
for i in cal[3]:
|
||||
draw(positions['d'+str(cal[3].index(i)+1)] ,im_open(dpath+str(i)+'.bmp'))
|
||||
for i in cal[4]:
|
||||
draw(positions['e'+str(cal[4].index(i)+1)] ,im_open(dpath+str(i)+'.bmp'))
|
||||
try:
|
||||
for i in cal[5]:
|
||||
draw(positions['f'+str(cal[5].index(i)+1)] ,im_open(dpath+str(i)+'.bmp'))
|
||||
except IndexError:
|
||||
pass
|
||||
|
||||
def write_text(a,b, text, c,d):#a,b box-size #c,d box position
|
||||
w, h = font.getsize(text)
|
||||
if (w, h) > (a, b):
|
||||
raise ValueError('Sorry, your text is too big for the box')
|
||||
else:
|
||||
x = int((a / 2) - (w / 2))
|
||||
y = int((b / 2) - (h / 2))
|
||||
space = Image.new('1', (a,b), color=255)
|
||||
ImageDraw.Draw(space).text((x, y), text, fill=0 ,font=font)
|
||||
image.paste(space.rotate(270, expand=1), (c,d))
|
||||
|
||||
|
||||
""" Handling Openweathermap API"""
|
||||
print("Preparing to fetch data from openweathermap API")
|
||||
owm = pyowm.OWM(api_key)
|
||||
if owm.is_API_online() is True: #test server connection
|
||||
observation = owm.weather_at_place(location)
|
||||
print("Fetching weather data...")
|
||||
weather = observation.get_weather()
|
||||
weathericon = weather.get_weather_icon_name()
|
||||
|
||||
Temperature = str(int(weather.get_temperature(unit='celsius')['temp']))
|
||||
Humidity = str(weather.get_humidity())
|
||||
print('temperature: '+Temperature +' °C')
|
||||
print('humidity: '+Humidity+'%')
|
||||
print('fetched icon code: '+weathericon)
|
||||
print('equivalent to icon: '+weathericons[weathericon]+'\n')
|
||||
windspeed= str(int(weather.get_wind()['speed']))
|
||||
sunrisetime = str(datetime.fromtimestamp(int(weather.get_sunrise_time(timeformat='unix'))).strftime('%H:%M'))
|
||||
sunsettime = str(datetime.fromtimestamp(int(weather.get_sunset_time(timeformat='unix'))).strftime('%H:%M'))
|
||||
cloudstatus = str(weather.get_clouds())
|
||||
weather_description = (str(weather.get_status()))
|
||||
print('Current wind speed: '+windspeed+ 'km/h')
|
||||
print('The sunrise today took take place place at: '+sunrisetime)
|
||||
print('The sunset today will take place place at: '+sunsettime)
|
||||
print('The current Cloud condition is: ' + cloudstatus + '%')
|
||||
print('Weather: '+ weather_description)
|
||||
|
||||
"""Drawing the fetched weather icon"""
|
||||
draw(wiconplace, im_open(wpath+weathericons[weathericon] + '.bmp'))
|
||||
|
||||
"""Drawing the fetched temperature"""
|
||||
draw(tempplace, tempicon)
|
||||
write_text(50,35, Temperature + " °C", 605, 334)
|
||||
|
||||
"""Drawing the fetched humidity"""
|
||||
draw(humplace, humicon)
|
||||
write_text(50,35, Humidity + " %", 570, 334)
|
||||
|
||||
"""Drawing the fetched sunrise time"""
|
||||
draw(sunriseplace, sunriseicon)
|
||||
write_text(50,35, sunrisetime, 605, 250)
|
||||
|
||||
"""Drawing the fetched sunset time"""
|
||||
draw(sunsetplace, sunseticon)
|
||||
write_text(50,35, sunsettime, 570, 250)
|
||||
|
||||
"""Drawing the fetched wind speed"""
|
||||
draw(windiconspace, windicon)
|
||||
write_text(75, 35, windspeed+" km/h", 605,135)
|
||||
|
||||
"""Write a short weather description"""
|
||||
write_text(100,35, weather_description, 570, 100)
|
||||
|
||||
else:
|
||||
draw(wiconplace, no_response)
|
||||
pass
|
||||
|
||||
"""Filter this months events from your iCalendar/s"""
|
||||
print('Fetching this months events from your calendar')
|
||||
events_this_month = []
|
||||
events_today = []
|
||||
|
||||
for icalendars in ical_urls:
|
||||
ical = Calendar(urlopen(icalendars).read().decode())
|
||||
for events in ical.events:
|
||||
if(time.now().strftime('%-m %Y') == (events.begin).format('M YYYY')):
|
||||
events_this_month.append(int((events.begin).format('D')))
|
||||
if time.day == int((events.begin).format('D')):
|
||||
if events.begin.format('HH '+'mm') == "00 00": #full day events
|
||||
events_today.append('today: '+events.name)
|
||||
else:
|
||||
events_today.append(events.name+' at '+events.begin.format('HH '+'mm'))
|
||||
|
||||
events = len(events_today)
|
||||
if events == 0:
|
||||
print('no events today')
|
||||
elif events == 1:
|
||||
print(events_today[0])
|
||||
elif events == 2:
|
||||
print(events_today[0])
|
||||
print('+ 1 event')
|
||||
else:
|
||||
print(events_today[0])
|
||||
print('+',events -1, 'events')
|
||||
|
||||
"""Draw circles on any days which include an Event"""
|
||||
for x in events_this_month:
|
||||
if x in cal[0]:
|
||||
draw(positions['a'+str(cal[0].index(x)+1)] ,eventicon)
|
||||
if x in cal[1]:
|
||||
draw(positions['b'+str(cal[1].index(x)+1)] ,eventicon)
|
||||
if x in cal[2]:
|
||||
draw(positions['c'+str(cal[2].index(x)+1)] ,eventicon)
|
||||
if x in cal[3]:
|
||||
draw(positions['d'+str(cal[3].index(x)+1)] ,eventicon)
|
||||
if x in cal[4]:
|
||||
draw(positions['e'+str(cal[4].index(x)+1)] ,eventicon)
|
||||
try:
|
||||
if x in cal[5]:
|
||||
draw(positions['f'+str(cal[5].index(x)+1)] ,eventicon)
|
||||
except IndexError:
|
||||
pass
|
||||
|
||||
"""Draw a square with round corners on today's date"""
|
||||
today = time.day
|
||||
if today in cal[0]:
|
||||
draw(positions['a'+str(cal[0].index(today)+1)] ,dateicon)
|
||||
if today in cal[1]:
|
||||
draw(positions['b'+str(cal[1].index(today)+1)] ,dateicon)
|
||||
if today in cal[2]:
|
||||
draw(positions['c'+str(cal[2].index(today)+1)] ,dateicon)
|
||||
if today in cal[3]:
|
||||
draw(positions['d'+str(cal[3].index(today)+1)] ,dateicon)
|
||||
if today in cal[4]:
|
||||
draw(positions['e'+str(cal[4].index(today)+1)] ,dateicon)
|
||||
try:
|
||||
if today in cal[5]:
|
||||
draw(positions['f'+str(cal[5].index(today)+1)] ,dateicon)
|
||||
except IndexError:
|
||||
pass
|
||||
|
||||
print('\n'+'initialising E-Paper Display')
|
||||
epd.init()
|
||||
sleep(5)
|
||||
print('Converting image to data and sending it to the display...'+'\n')
|
||||
epd.display_frame(epd.get_frame_buffer(image))
|
||||
|
||||
# delete the list so deleted events can be removed from the list
|
||||
del events_this_month[:]
|
||||
del events_today[:]
|
||||
print('data sent successfully'+'\n')
|
||||
print('letting the display sleep until the next hour')
|
||||
epd.sleep()
|
||||
|
||||
for i in range(1):
|
||||
nexthour = ((60 - int(time.strftime("%-M")))*60) - (int(time.strftime("%-S")))
|
||||
sleep(nexthour)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Loading…
Reference in a new issue