Morning

Dash

The idea for Morning Dash came about as a way to simplify my morning routine. I wanted to automate away the repetitive tasks that I was doing every morning. This included seeing what the high and low temperatures were for the day and if there was a chance of rain. I would then check my reminders and calendar to see what I needed to get done for the day. Instead of doing this and going to three or more different apps, I wanted all of this information available at a single glance as I get ready, and Morning Dash was born.

Software

For this project I wanted to learn a few new technologies. I had recently finished building the games Snake and Sudoku using JavaFX, and I wanted to continue messing around with cross-platform GUIs. To become more familiar with with creating Python modules and packages I decided to create the GUI with Tkinter in Python. I used the iCloud API to get data from Reminders and Calendar and the Dark Sky API for all weather data (Dark Sky was bought by Apple in March 2020 so this API will only continue working until 2021 :/ ). I also have a deep love for music and data analytics, so another thing I like to check regularly, are my current listening habits. To incorporate this onto the dashboard (Morning Dashboard) I used the Spotify and LastFM APIs. Finally to speed up development some, I used third party modules to connect two of the APIs: pyicloud for the iCloud API and spotipy for the Spotify API.

API Module

The Data

Each category is broken up into its own module where the desired data is fetched, formatted, and loaded into memory from the corresponding API. Pictured here is the Dark Sky module where I get the weather conditions for the current location. After parsing out the relevant details from the ocean of data that is passed back, it connects the current weather condition with a relevant icon to visually display to the user.

Extra Features

As I was building the app I realized that I had a lot of extra space for more information. I decided to add a list of my top ten most played songs and top five most played albums over the past 7 days. Of course, what is music without the album art, so with each song/album title is the artist and album art. Finally in the bottom right of the screen I display the song that is currently playing (or was last played) on Spotify.

Spotify & LastFM

The music data isn't just as simple as the LastFM API fetching the top charts and the Spotify API fetching the currently playing music. The LastFM API actually will only return the song title and artist. To get the album art, the LastFM module will actually use the Spotify API to search for the corresponding album art. Although not 100% accurate all the time, it does always find some art relevant to the given artist if not the specific album or song.

MorningDash

Final Product... v1

To complete the original objective, the application needs to automatically be displayed in the morning when I wake up. To do this I loaded the program onto a Raspberry Pi and attached a monitor (turned vertical). Then created a simple script to wake the display and launch the app one minute before my alarm to give it time to load the data.

As this project came to an end it got me thinking about more data that I look at in them morning and even throughout the day and week. I have a watch that already tracks my sleep, it would be nice to see how much sleep I got the previous night up on the dashboard as well. Also if the data was stored it could be displayed with a chart of sleep duration for the past week. This data could then be accumulated to find trends in sleep such as average duration over the weekend vs week days (and so on and so forth).

So why stop at just sleep... This completes this project but also opens up possibilities for (several) more projects to come.