Git Product home page Git Product logo

inky-calendar's Introduction

Inky Calendar

An e-ink display for Google Calendar

Drawing of Calendar x Website

About

Paper calendars are great: they're nice to look at and easy to read, but as the days of the month go on, they get less and less useful. Google Calendar is good too - it automatically adds events from emails, you can integrate your friends' calendars into your own and it's always up to date. But keeping both of these up to date is a pain, and I don't want to have to look at my phone or computer to see what I have upcoming.

This project aims to combine the best of both worlds: a calendar that's always up to date, but more of a pleasure to look at than a screen.

eInk Calendar

Setup

Setting up a service account for Google Calendar

  1. Go to the Google Cloud Console
  2. Create a new project
  3. Go to the APIs & Services > Credentials
  4. Create a new service account (+ Create Credientials -> Service account)
  5. Add new KEY in JSON format (It will download automatically)
  6. Save it as KEY.json in the root directory of this project

Add service account to your calendar

  1. Go to your Google Calendar
  2. Got to '...' on the chosen Calendar (usually in sidebar) then Settings and Sharing
  3. Scroll down to 'Share with specific people or groups' and click 'Add people and groups'
  4. Add the service account email ([email protected]) as a new person with 'See all event details' permissions

Running automatically with cron

Edit the startup.sh file to include the path to the correct path to main.py file.

  1. Open crontab with crontab -e
  2. Add @reboot bash /path/to/startup.sh to the end. Save and exit.
  3. chmod +x path/to/startup.sh

This will run the script on boot. You can also add a line to run the script at specific times of day.

To-Do

  • Add support for week view
  • Add support for multi-day events
  • Refactor code to plot day-by-day instead of from prev_monday

FAQ

Why use Pillow?

I could use pre-exisiting calendar libraries but I want to be able to customise the calendar to my liking. This is particularly important for 4-week view, instead of the standard month view and ensuring the formatting is appropriate for the e-ink display.

It also means I can use Python instead of Javascript. This makes prototyping across OSs a lot easier and, since I don't need dynamic web rendering (selenium), it makes the code simpler, faster and more robust.

Why use Google Calendar?

I use Google Calendar for my personal calendar, and it's easy to integrate with other calendars. I'm also familiar with the API.

Why use an e-ink display?

E-ink displays are like original Kindle displays - they have a paper-like 'quality'. They also don't require power to maintain an image. This means that the calendar can be updated once a day, and then turned off or even unplugged and moved around the home.

Why use an Inky over a Waveshare?

Inkys have better documentation, support and easier set-up for R-Pi imo. I tried to use a Waveshare but massively preferred Inky. Inky also has a 7-colour display, which is fun.

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

inky-calendar's People

Contributors

mimireyburn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

crt0dots

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.