Compare commits

...

2 Commits

Author SHA1 Message Date
9c60f7c37b Use HAS for calendar 2025-02-09 18:39:31 +00:00
69eacb4f17 resize top bar 2025-02-06 14:28:48 +00:00
6 changed files with 95 additions and 11 deletions

1
.env.sample Normal file
View File

@@ -0,0 +1 @@
HAS_TOKEN=xxx

3
.gitignore vendored
View File

@@ -176,3 +176,6 @@ cython_debug/
*.bmp
*.png
credentials.json
.env

View File

@@ -1,7 +1,10 @@
from inky import InkyWHAT
from inky.auto import auto
from dotenv import load_dotenv
from building import draw_image
load_dotenv()
display = auto(verbose = True)
image = draw_image()
display.set_image(image)

View File

@@ -1,9 +1,14 @@
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
from datetime import datetime
from datetime import datetime, timedelta
from time import gmtime, strftime
import time
from googleCalendar import get_events
from itertools import groupby
from hasApi import get_calendar_events
import dateutil.parser
from dotenv import load_dotenv
black = '#000000'
white = '#ffffff'
@@ -15,6 +20,8 @@ fontLarge = ImageFont.truetype ("Nunito-ExtraLight.ttf", 18)
fontSmall = ImageFont.truetype ("Nunito-ExtraLight.ttf", 16)
fontVerySmall = ImageFont.truetype("Nunito-ExtraLight.ttf", 10)
class Space(Exception): pass
def getsize(font, text):
_, _, right, bottom = font.getbbox(text)
return (right, bottom)
@@ -45,22 +52,22 @@ def draw_image():
# Draw the top bar
draw.rectangle((0, 0, 400, 300), fill=white)
draw.rectangle((0, 0, 400, 40), fill=black)
draw.rectangle((0, 0, 400, 30), fill=black)
# Add the clock
timeStr = strftime("%H:%M", time.localtime())
draw.text((10, 10), timeStr, white, fontSmall)
draw.text((10, 5), timeStr, white, fontSmall)
# Add indoor tempriture
draw.text((350, 10), "19c", white, fontSmall)
draw.text((350, 5), "19c", white, fontSmall)
# Add sections
ep = 5
draw.rounded_rectangle((ep, 40+ep, (400/2)-ep, 300-ep), 10, outline=black)
draw.rounded_rectangle(((400/2) + ep, 40+ep, 400-ep, 300-ep), 10, outline=black)
draw.rounded_rectangle((ep, 30+ep, (400/2)-ep, 300-ep), 10, outline=black, width=2)
draw.rounded_rectangle(((400/2) + ep, 30+ep, 400-ep, 300-ep), 10, outline=black, width=2)
# Add tasks
draw.text((15, 50), 'Tasks', black, fontTitle)
draw.text((15, 40), 'Tasks', black, fontTitle)
tasks = [
{'done': False, 'title': 'Something'},
@@ -69,12 +76,12 @@ def draw_image():
{'done': False, 'title': 'Call locksmith'},
]
taskStart = 90
taskStart = 80
for task in tasks:
if task['done']:
draw.text((15, taskStart), '󰄵', black, fontSymbols)
draw.text((15, taskStart-2), '󰄵', black, fontSymbols)
else:
draw.text((15, taskStart), '󰄱', black, fontSymbols)
draw.text((15, taskStart-2), '󰄱', black, fontSymbols)
reflowedTitle = reflow_quote(task['title'], 170, fontLarge)
titleSizeW, titleSizeH = getsize(fontLarge, reflowedTitle)
@@ -83,8 +90,54 @@ def draw_image():
draw.text((35, taskStart - 3), reflowedTitle, black, fontLarge)
taskStart += titleSizeH + (2*ep)
# Add cal
draw.text((215, 40), 'Calendar', black, fontTitle)
events = get_calendar_events()
def get_start_date(x):
start = x['start']
if 'date' in start:
startDate = datetime.strptime(start['date'], '%Y-%m-%d').date()
elif 'dateTime' in start:
startDate = datetime.strptime(start['dateTime'][:10], '%Y-%m-%d').date()
else:
print('Error')
print(start)
return None
if startDate < datetime.today().date():
return datetime.today().date()
else: return startDate
itemStart = 80
try:
for key, group in groupby(events, get_start_date):
if key == datetime.today().date():
dateStr = 'Today'
elif key == (datetime.today() + timedelta(days = 1)).date():
dateStr = 'Tomorrow'
else:
dateStr = key.strftime('%d %b')
draw.text((215, itemStart), dateStr, black, fontLarge)
w, h = getsize(fontLarge, 'Today')
itemStart += h + (ep)
for thing in list(group):
reflowedItem = reflow_quote(thing['summary'], 170, fontSmall)
w, h = getsize(fontLarge, 'Today')
h *= (reflowedItem.count('\n') + 1)
# print(f'After {reflowedItem}, {itemStart + h}')
if itemStart + h > 270: raise Space
draw.text((230, itemStart), reflowedItem, black, fontSmall)
itemStart += h + (ep)
if itemStart > 250: raise Space
except Space:
pass
return image
if __name__ == "__main__":
load_dotenv()
img = draw_image()
img.save('built.bmp')

22
hasApi.py Normal file
View File

@@ -0,0 +1,22 @@
import requests
import datetime
from dotenv import load_dotenv
import os
def get_calendar_events():
token = os.getenv('HAS_TOKEN')
if not token:
raise Exception('Missing HAS token')
headers = {"Authorization": f"Bearer {token}"}
payload = {
'start': datetime.datetime.now().strftime('%Y-%m-%d'),
'end': (datetime.datetime.now() + datetime.timedelta(days=14)).strftime('%Y-%m-%d')}
response = requests.get('https://has.nozzy.online/api/calendars/calendar.romosborne_gmail_com',
headers=headers,
params=payload)
return response.json()
if __name__ == "__main__":
load_dotenv()
events = get_calendar_events()

View File

@@ -1,3 +1,5 @@
pillow
inky
imgkit
requests
python-dotenv