(Very) Basic Homeassistant dashboard for E-ink devices and Kiosk apps

Hi guys!

So I wanted to use my old kindle device as a homeassistant control dashboard to put in my bedroom (since it doesn’t emit light), but I couldn’t get it to load the actual HomeAssistant dashboard, so I made a basic one instead on my own!

You can get the code and instructions at

Hope someone else enjoys this as well :slight_smile:!


Looks great!
Trying to get it working, but it seems to only come up blank when I use the Local Automatic.
I’ve tried entering the local HA address in many different formats, could you provide an example of how it should look?

For example it would look like

Let me know if that works

Tried that, doesn’t seem to work. Just loads a blank page.

Aha, I updated the readme,
under http module in configuration.yaml, add:

  - 'null'

(and restart the HA server)

or if you are uploading it to a webserver and not locally, then you’ll need to allow that webserver address instead of null

if its still not working, please open the html file, hit F12 and refresh, copy whatever you see in the “console” tab here.

Made the change to the configuration.yaml and still no luck

Seems like it didn’t take into effect, did you restart the entire HomeAssistant server (not just core)? are you running the latest Homeassistant version?

other than

    - 'null'

I don’t have anything else special in my http module in configuration.yaml, maybe try double quotes or no quotes? though this should work.

Also, I would try the HTML file in Edge instead of Chrome if you are running Windows, since Chrome is very picky regarding CORS requests, if it works there it should work on the Kindle.

This is very cool. Easily done and much fun! I changed a few things with the media player. First the Play and Pause button call the same service. So I reduced it to only one button, and then I changed the text to unicode, as one can then display some basic symbols. Works on my Kindle 2.

:black_medium_small_square: = ◾
▮▮ = ▮▮
:arrow_forward: = ▶


Also °C gives °C

1 Like

Very cool idea with the symbols, and glad to hear its working for you!

So I continued fiddeling. I would like to set the volume of my Sonos. I have a button in the dashboard, that calls:

function setvolume() {
  var hassadress="http://ip:8123"; //your Homeassistant address (without / at the end)
  var hasspass="Password"; //your Homeassistant password
  var xmlhttp = new XMLHttpRequest();   // new HttpRequest instance 
  xmlhttp.open("POST", hassadress+"/api/services/media_player.wohnzimmer/media_player.volume_set");
  xmlhttp.setRequestHeader('x-ha-access', hasspass);
  xmlhttp.setRequestHeader("Content-Type", "application/json");
  xmlhttp.send(JSON.stringify({entity_id:new String('media_player.wohnzimmer'),volume_level:new String('0.8')}));

How ever it doesn’t work. Any idea? Can you tell me where I can find more information on the API?


first off run it on a PC and press F12, go to the console and see if there are any errors (logic/syntax) if you haven’t already.

and I used these docs here:

I think you are looking for this, make sure you are formatting your JSON correctly, not sure you need “New String” etc, I think that might be causing the issue,
check out

#### POST /api/services/<domain>/<service>

Calls a service within a specific domain. Will return when the service has been executed or after 10 seconds, whichever comes first.

You can pass an optional JSON object to be used as  `service_data` .

    "entity_id": "light.Ceiling"

Returns a list of states that have changed while the service was being executed.

        "attributes": {},
        "entity_id": "sun.sun",
        "last_changed": "2016-05-30T21:43:32.418320+00:00",
        "state": "below_horizon"
        "attributes": {},
        "entity_id": "process.Dropbox",
        "last_changed": "22016-05-30T21:43:32.418320+00:00",
        "state": "on"

Hey, i do not know what the issue was, but now it works.
I added two functions. One to set the volume and one to select the source of my Sonos. We like to listen to radio in the mornings and music later the day. Therefore it is quite use full.

function setvolume(id,volume) {
  var hassadress=""; //your Homeassistant address (without / at the end)
  var hasspass=""; //your Homeassistant password
  var xmlhttp = new XMLHttpRequest();   // new HttpRequest instance 
  xmlhttp.open("POST", hassadress+"/api/services/"+id.substring(0,id.indexOf('.'))+"/volume_set");
  xmlhttp.setRequestHeader('x-ha-access', hasspass);
  xmlhttp.setRequestHeader("Content-Type", "application/json");

function selectsource(id,name) {
  var hassadress=""; //your Homeassistant address (without / at the end)
  var hasspass=""; //your Homeassistant password
  var xmlhttp = new XMLHttpRequest();   // new HttpRequest instance 
  xmlhttp.open("POST", hassadress+"/api/services/"+id.substring(0,id.indexOf('.'))+"/select_source");
  xmlhttp.setRequestHeader('x-ha-access', hasspass);
  xmlhttp.setRequestHeader("Content-Type", "application/json");

I guess one could combine it all somehow. But for now this solution dosn’t bother me. Thank’s again for the input. :grinning:

Hi there!

This sounds very nice! Which kindle version would I need to have the basic browser and wifi functionality and touchscreen?

Is it possible to have it always stay on the web page without some kind of screen saver or something?
An how long will the battery last while doing this?

I wonder why there are not more people interested in this. Seems to be the cheapest and best solution for some kind of Hass monitoring and controlling :slight_smile:

Does anyone know which eReader supports HA with Lovelace? Full support? I heard Kobo ones do, anyone could confirm this?

Hi luhu,
all your questions are already answered in the github link :slight_smile:
as far as I know you’ll need at least a Kindle 2 (using Advanced mode browser).
for me on a kindle paperwhite with 0 light the battery lasts for about 2-3 weeks on each charge, but i bought a slim microusb connector so I can put it on the wall have it plugged in

and you can disable the screensaver like this:

Newer kindles (2015 Paperwhite & up) type ~ds in the search bar and click search. (Don't worry, After restarting the Kindle the screensaver will return)

Older Kindles: Type ~disableScreensaver in the search box (type del on the home screen) and your Kindle will not go into sleep mode. ~resumeScreensaver will revert the Kindle back to its default (screensaver enabled) state. Note that this does not increase power consumption, as the Kindle consumes no power (with wireless off) when displaying a page

Or < Del > to open the search box on the home screen ;debugOn ~disableScreensaver NOTE: this also stops you from manually using the power switch to enter sleep mode. To re-enable: ~resumeScreensaver and to turn off debug mode: ;debugOff

@gurbina93 - if lovelace works on kindle its probably better than this, but I dont think it does


oh sorry, I didn’t had a look on the description in that detail… :smiley:
But that sounds really good! I will have a look if I find a cheap kindle. :slight_smile:

sure, np,
btw it just occurred to that while it should work with the kindle 2, im unsure which generation of kindle was the first to have touch, I don’t think the second gen had a touch screen, im guessing the first one was the “kindle touch” and then 4th generation kindle / first generation paperwhite, some of those should be pretty cheap on ebay (~$20 probably)

Is this project still working?

It wasn’t (last updated 3 years ago), but I went ahead and made some changes to support the latest API and updated the instructions on how to use, so its working now (right now I left only the local version of the HTML files, might get to the cloud versions later if someone asks for it)

Waoo thank you! I just found a kindle on eBay. Planning to attach it by the pool to show weather and pool temperature!