ES15 + Home Assistant

Update: As of 2/14/23, I can’t sideload anymore, but all current functionality still works so I can keep playing with my FKB Echo Show 15.

Amazon has started some sort of campaign against sideloaded apps on FireOS devices. The Eco Show 15’s sideloading capabilities have since been removed, as well as Amazon changing disclaimers when enabling ‘Install from Unknown Sources’.

I’ll leave this up as a guide for anyone that wants to reference it, should they still be able to do any of the things listed below.


No ADB is a slight let down, but manageable. If it ever does show up, I’ll use the show 15 to display artwork of whatever media I’m playing on my tv.

That’s the dream automation, folks. A centralized ‘now_playing’ sensor that feeds in from all media_player sources and a companion app to use the title, pull the artwork from the web, and push to ADB as the background image. Ta-da. Dynamic theater posters. But I want it to work across everything.not just kodi.


sideloading instructions pulled from here, supplemented.

  1. Install Install Developer Tools Menu, File Explorer, Downloader, and Taotlus: AppList for TV from the Fire TV appstore
  • In FireTV mode, use the search functionality [tile with magnifying glass] to find the apps and install them.
  1. Use the Downloader app to navigate to the APK download location (from a site like APKmirror.com), and download the Home Assistant APK file.
  • I used APKPure to get Fully Kiosk Browser
  1. Using the File Explorer App, move the APK file from the folder “Downloader” to “Download” which will allow it to be installed.
  • long press cut and paste worked for me here. The folders are right next to each other, and you have to moove the actual file into ‘Download’, as the file explorer app has the right perms with that folder
  1. Install apks from Download folder, not Downloader

there’s a YT vid in that post if you want to check it out


FKB - fully kiosk browser

ADB - Android Debug Bridge

  • can turn screensaver on/off
  • can bring FKB to foreground
  • can send FKB to background
  • no ‘admin rights’, so can’t turn on/off screen
  • motion detection w/ built-in cam doesn’t work
  • screen brightness in FKB integration registers as ‘NaN’
  • ‘screen off’ timer is configurable, but doesn’t seem to do anything
  • HA Integration works with triggers & automations

Dynamic Poster Display using Echo Show 15 Demo

So it looks like currently Paramount+, Disney+, and Kodi expose the info needed to get the Name of the show being played. I’ve got a Node-Red Flow that does all the logic utilizing the kodi API, the FKB API, the themoviedb API, and some generic logic. This flow has login creds, so maybe I’ll make a copy and strip those and put a copypasta here.

it looks for 1080 width backdrops and then randomizes which one it displays when you start an episode. At the end, it displays the poster for 30 seconds, then resets the background image to ‘fully://color#000000’, and then turns the screensaver off.

Only landscape tv at the moment. I’ll add in the other logic later. Then i need to figure out how to make this repeatable… AppDaemon? Add-on? Blueprint? – any ideas?

Okay it handles movies on those apps now.

12/15: handles ps5-mqtt titles

Easy guide for sideloading


Apps that don’t expose enough info or don’t use the entity_picture or local_entity_picture attribute that I tested:

  • AppleTV
  • Hulu
  • HBO Max
  • Netflix
  • Peacock
  • Prime Video

really really really handy scripts

es15_screen_off:
  alias: es15_screen_off
  sequence:
    - service: media_player.play_media
      data:
        media_content_type: custom
        media_content_id: AS turn off echo show screen
      target:
        entity_id: media_player.echo_show
  mode: single

es15_show_pictures:
  alias: es15_show_pictures
  sequence:
    - service: media_player.play_media
      data:
        media_content_type: custom
        media_content_id: AS show pictures
      target:
        entity_id: media_player.echo_show
  mode: single

es15_show_home:
  alias: es15_show_home
  sequence:
    - service: media_player.play_media
      data:
        media_content_type: custom
        media_content_id: AS show home
      target:
        entity_id: media_player.echo_show
  mode: single

es15_show_calendar:
  alias: es15_show_calendar
  sequence:
    - service: media_player.play_media
      data:
        media_content_type: custom
        media_content_id: AS show calendar
      target:
        entity_id: media_player.echo_show
  mode: single

es15_show_firetv_home:
  alias: es15_show_firetv_home
  sequence:
    - service: media_player.play_media
      data:
        media_content_type: custom
        media_content_id: open fire tv
      target:
        entity_id: media_player.echo_show
  mode: single

an example of an api call to set the FKB screensaver to solid black is: [already encoded]

 curl -XPOST http://FullyKioskBroswer:2323/?cmd=setStringSetting&key=screensaverWallpaperURL&value=fully://color%23000000&type=json&password=SECRETPASSWORD

an example of an api call to set the FKB screensaver to this picture is: [encoding maybe required]

curl -XPOST http://FullyKioskBroswer:2323/?cmd=setStringSetting&key=screensaverWallpaperURL&value=https://tinyurl.com/fkbpic&type=json&password=SECRETPASSWORD

I’ve built an AppDaemon app that pulls ‘most recently played’ info from Netflix for the dynamic media screen, and I’m trying to include a service to call to populate the entity it creates as-needed. As there’s no API, it’s actually doing a website scrape… so there’s no polling except for the appdaemon schedule. I need to learn more about this before it’s release-worthy

Mike Vinci
Mike Vinci
Senior Platform Engineer (CI/CD)

My specialization is R&D for CI/CD platforms and Cloud Infrastructure support.