Kindle Dashboard
I've set up a kindle to be an always on weather and calendar dashboard, perfect for quickly glancing at before you leave the house in the morning.

The weather and calendar dashboard
This consists of:
A Flask server application:
- With a web accesible endpoint (HTTP authed)
- When the endpoint is accessed it generates a correctly sized PNG image to display on the Kindle.
- The PNG image is populated with weather data from the Met Office and calendar data from Google Calendar.
A Kindle Application:
- Runs regularly via a cron job
- Downloads PNG from server and displays it.
- Monitors touch screen and button to allow for basic controls (Refresh, Wifi On/Off, Exit back to Kindle GUI)
All code is available at rhyst/kindle-weather.
Kindle Set Up
Acquire a Kindle
I bought a second hand Kindle Touch, from the first generation to have a touch screen, from eBay for ~£20. In hindsight getting a slightly later model, if you can find a cheap Paperwhite for example, would be better as they have better and more useful power saving modes.
Download software
There is a large community dedicated to Kindle and ereader hacking and for the Kindle they have helpfully compiled all of the useful software into one forum thread on mobiread. The following is a list of packages I used and you should ensure you download the correct version for your kindle version.
- K5 Jailbreak - Necessary for all other software to run.
- KUAL - App launcher
- MR Package Installer - Package installer that lots of apps use.
- Screen Savers Hack - We use a few of its files.
- USB Network Hack - Useful for debugging.
Jailbreak the kindle
In order to run custome code we need to jailbreak it.
- Extract kindle-jailbreak-1.15.N-r16256.tar.xz (or whatever your jailbreak version is)
- Unzip the contents of the kindle-5.4-jailbreak.zip archive to the root directory of your Kindle
- Eject & unplug your Kindle
- Go to [HOME] -> [MENU] > Settings -> [MENU] > Update Your Kindle
Install Dependencies
The dashboard relies on some other Kindle applications. Kual is an application launcher and adds a menu UI for new applications to your Kindle. It is the standard and most Kindle apps will integrate with KUAL. MR Package Installer is a package installer that some applications are installed with. USB Networking allows us to SSH into the Kindle when it is plugged in via USB.
- Extract KUAL and put KUAL-KDK-2.0.azw2 somewhere in the documents/ directory tree
- Extract kual-mrinstaller-1.7.N-r16438.tar.xz and copy contents to root of Kindle
- Extract USB Network Hack and copy appropriate .bin file to mrpackages directory on Kindle
- Eject & unplug Kindle
- Go to KUAL -> Helpers -> Install MR Packages
USB Networking
With everything installed above you should be able to turn on USB Networking on your Kindle. This will allow you to SSH in to the kindle which is useful for debugging and necessary for the final steps of installing my own kindle weather app.
On the Kindle
You can toggle USB Networking on and off via KUAL. Whilst it is on your Kindle will not mount as a USB storage device, but you can SSH into it.
- Go to KUAL -> USBNetwork -> * Toggle USBNetwork *
- You can then click * Check USBNetwork Status *. A message should appear at the bottom of the screen telling you is USB networking is on or not.
On your PC (Xubuntu)
I only have instructions for Xubuntu linux. This is possible on most other OSs but you'll have to google. I also found that doing this via the Network Manager GUI was much easier than command line as modern Ubunut no longer assigns nice names to USB networking interfaces.
- Ensure USB Networking is on on the Kindle and plug it in via USB
- Open your Network Manager
- Open 'Edit Connections'
- One of them should be some sort of USB or Wired Connection. Edit this connection.
- Open the "IPv4" tab
- Set "IPv4 Method" to "Manual"
- Under "Addresses", set "Address" to 192.168.15.201 and "Netmask" to 255.255.255.0
- Click "Apply"
- Restart the connection by disconnecting it and reconnecting it (in Network Manager, no need to physically unplug)
- Run "ssh root@192.168.15.244" (press enter at password prompt) in terminal to access the Kindle.
Server set up
A server application needs to be setup to query weather and calendar APIs and generate a dashboard image from that data. As this will depend heavily on your server setup the instructions are less prescriptive.
Prerequisites:
- For Weather data you will need to register for a Met Office API Key
- For Calendar data you will need to create a Oauth Application in the Google API Console:
- Start a project in the API Console
- Create new Oauth 2.0 Credentials
- Configure the redirect URL as the endpoint url where you will be serving the PNG
- Download the resultsing client_id.json
- Optionaly set up the OAuth Consent screen and authorised domains.
Instructions:
- Clone repository.
- The Flask application is in kindle-weather/server.
- You will need a .env file in the same dir as main.py with: MOAPIKEY={ Met Office API Key } IMAGE_NAME={ name for generated image (doesn't reeally matter) }.png
- You will need to create a config dir in the same dir as main.py. Place your client_id.json in the config folder.
- Serve the flask app.
- Visit your endpoint first on a PC or phone as it will redirect you to a Google Auth page to create credentials to check your calendars.
Run the kindle app
Finally we need to get the Kindle running an application which will regularly request and display our dashboard image.
- Ensure that your Kindle can connect to a local wifi network, from the standard Kindle UI.
- Clone repository.
- Connect Kindle in USB Storage mode (USB Networking off)
- Copy kindle-weather/kindle folder to /extensions in the Kindle root
- Ensure .env file in /extensions/kindle has correct vars for http user/pass and the URL of your image generating API.
- Eject & unplug Kindle
- Launch via KUAL -> Kindle Weather
That should do it! The Kindle should display and regularly update the dashboard image. Tapping the screen switches between the available actions (WiFi toggle, Refresh Image, Exit to Kindle UI) and pressing the button activates the action.