Skip to content
Doug Nelson edited this page Nov 26, 2024 · 106 revisions

HA Firemote - Wiki Home


Introduction

The Firemote project exists to accomplish two main goals:

  1. To provide a Home Assistant card that not only visually matches the physical remote control that shipped with a media player device, but also to allow the flexibility to configure the remote buttons in a way that works best for each individual user.
  2. To save its users from the time and hassle of researching, programming, and testing Home Assistant commands to fully control their devices through Home Assistant by doing that work for them.

If you're new to Firemote, and you haven't looked through the README.md file yet, I recommend doing that first before opening a new discussion or issue. If you cannot find the answer you are looking for, then the resources below may be useful for you.

If you're just getting started, I highly recommend watching this video https://youtu.be/AggYjQ4vI-U - It shows everything from setup to startup!

For another excellent overview of how the card works, YouTube's @BeardedTinker created a fantastic video about this card!

Be sure to give him a sub and a like if you enjoy it!

Take a look at some quick videos showcasing how Firemote can control a

Sprechen Sie Deutsch? If German is your native language, you might find this Youtube video to be helpful: https://www.youtube.com/watch?v=GdFiCbyN4Lk

How Does Firemote Send commands to my devices?

Firemote isn't an integration, it is a Home Assistant card. This card is designed to interact with your media player devices in the most efficient way possible. Because it is not an integration, Firemote requires Home Assistant integrations to work. Any function that Firemote is capable of preforming could also be done without the Firemote card through Home Assistant commands and scripts.

flowchart LR
  UI(Home Assistant Dashboard) <--> cards
  subgraph HA[Home Assistant]
    direction LR
    subgraph cards[HA Dashboard Cards]
      direction TB
      FiremoteCard[[Firemote Card]] 
      cardetc[[etc...]]
    end
    core[(core)]
    subgraph Ints[Home Assistant Integrations]
      direction TB
      ADB[Android Debug Bridge]
      ATR[Android TV Remote]
      RI[Roku Integration]
      AI[Apple TV Integration]
      intETC[etc...]
    end
  end
  cards <--> core
  core <--> Ints
  ADB <-.-> A
  ATR <-.-> A
  RI <-.-> A
  AI <-.-> A
  cardetc ~~~ ATR
  A[/Media Player Device\]
Loading

Resources

Forums

The Firemote Discussions page is a great place to look for answers to your questions.

Feel free to join us over at the FIREMOTE-GENERAL-CHAT Discord channel (English)

There are a few conversation threads on Reddit and on the Home Assistant Community Forum but if you want the attention of the project maintainer, the best option is to communicate here through GitHub.

If you believe you have found a bug, or would like to request a feature, then the Issues page is a great place to look first. If there isn't an open issue concerning your topic, then you may want to open a new issue.

If you would like to share the Firemote project with a friend or on a forum, you can post this link https://github.com/PRProd/HA-Firemote


Devices Officially Supported by Firemote

Firemote has tested and currently supports devices from the following families of products. Click on a product family for more details.

Devices Not Officially Supported by Firemote

If you own a device that IS in one of the families listed above, but that device does not yet have official Firemote support, then I invite you to open a new Device Support Request

If you own a device that is not listed as being supported, you can still use Firemote! There is an entity: none feature that makes this possible.

If you own a device from a new device family that you want added to this project, cast your vote here!

Please keep in mind that in order to add your device request to the Firemote card, I will likely need to have the device in my hand for proper testing, or I will need to work closely with you (frequent communication) to work out the details. Each device seems to have its own unique characteristics.

Since it is expensive for me to personally purchase, evaluate, and develop support for all of your device requests, I've set up an Amazon Wish List (US) and an Amazon Wish List (DE) for any of you who are feeling incredibly generous and want to send me something that I don't already own.


App/Function Launcher Buttons

The availability of applications can vary by region and from device to device. Currently, Firemote supports OVER 360 unique launcher buttons for applications, device input switching, and special device features. The majority of these options were added by community request.

Existing Buttons

The list of Firemote buttons is growing every day!

A complete list of over 330 app launcher buttons, more than 25 device specific input and function buttons, and their supported devices can be found here.

Request a New Button

Do you have an app that you'd like to launch from Firemote, but it's not yet available? No problem! This is the BEST way to get your app shortcut added quickly:

  • Review the instructions for providing App Launcher Request details
  • Open a new App Shortcut Request from the issues tab.
  • After you have submitted the request, if the app on the platform you requested is available to download for free in the U.S. region, your request will likely be completed and added to the next Firemote release. If it is not available for me to easily download and confirm that it's working, I will contact you to request more information. Please do your best to reply in a timely manner. I don't like having too many issues open at once.

Create a Custom Button for Yourself

You are not limited to only using the launcher buttons that come with Firemote. Through YAML, you can define your own working buttons in one of two ways: defining a script or constructing an action call.

Example:

type: custom:firemote-card
entity: media_player.fire_tv_192_168_107_88
device_family: amazon-fire
device_type: fire_tv_4_series
compatibility_mode: default
custom_launchers:
  - friendly_name: flash the light
    label: FLASH
    image_path: https://upload.wikimedia.org/wikipedia/commons/2/28/Flash-outlined-thin-circular-button.svg
    color: red
    background: white
    script: flashthelablight
  - friendly_name: Red Lamp
    label: red
    icon: mdi:lamp
    color: red
    background: blue
    action: light.toggle
    target:
      entity_id: light.bedroom_lamp
    data:
      color_name: red
      transition: 2
      brightness_pct: 100
app_launch_1: customlauncher flash the light
app_launch_2: customlauncher Red Lamp
scale: '110'

YAML usage:

Key Value Required Description
friendly_name string yes This is the name that will appear in the GUI app selector dropdown
label string no The text that will appear on the button
icon mdi icon name no a valid mdi icon name
ex: mdi:lamp
image_path url no path to an image resource
color css color value no custom color for your text label or your mdi icon
ex: white
ex: '#ff0000'
background css color value no custom color for your button's background
ex: green
ex: '#ffffff'
script string yes if calling a script The name of your Home Assistant script
action string yes if not using a script The name of the Home Assistant action you want to call
target object yes if not using a script Define the entity for your action to act upon
data object no optional parameters for your action call

Once defined, a custom button can be assigned to a Firemote button location through the YAML config itself, or it can be selected through the Visual Editor dropdown

image


This format can also be used to make your own app launcher buttons too! Here are 3 example snippets of code that would create a button in position 2, and launch the Netflix app on an Amazon Fire device:
custom_launchers:
  - friendly_name: NETFLIX
    label: red
    icon: mdi:netflix
    color: red
    background: white
    action: androidtv.adb_command
    target:
      entity_id: {YOUR AMAZON FIRE MEDIA PLAYER ENTITY GOES HERE}
    data:
      command: adb shell am start -n com.netflix.ninja/.MainActivity
app_launch_2: customlauncher NETFLIX
custom_launchers:
  - friendly_name: NETFLIX
    label: red
    icon: mdi:netflix
    color: red
    background: white
    action: media_player.select_source
    target:
      entity_id: {YOUR AMAZON FIRE MEDIA PLAYER ENTITY GOES HERE}
    data:
      source: com.netflix.ninja
app_launch_2: customlauncher NETFLIX
custom_launchers:
  - friendly_name: NETFLIX
    label: red
    icon: mdi:netflix
    color: red
    background: white
    action: media_player.select_source
    target:
      entity_id: {YOUR AMAZON FIRE MEDIA PLAYER ENTITY GOES HERE}
    data:
      source: Netflix
app_launch_2: customlauncher NETFLIX

The YAML is nearly identical for a Roku device. You can open the app/channel by name, or by ID number

custom_launchers:
  - friendly_name: NETFLIX
    label: red
    icon: mdi:netflix
    color: red
    background: white
    action: media_player.select_source
    target:
      entity_id: {YOUR ROKU MEDIA PLAYER ENTITY GOES HERE}
    data:
      source: Netflix
app_launch_2: customlauncher NETFLIX
custom_launchers:
  - friendly_name: NETFLIX
    label: red
    icon: mdi:netflix
    color: red
    background: white
    action: media_player.select_source
    target:
      entity_id: {YOUR ROKU MEDIA PLAYER ENTITY GOES HERE}
    data:
      source: "12"
app_launch_2: customlauncher NETFLIX


Create a Custom Button for the Community

If you are comfortable with Git and understand how to make a pull request, here is a list of the standards (subject to change) and the locations of where to make your code modifications.

Inside the const fastappchoices is a JSON structure that defines a button. Locate the section alphabetically where your button should go, and insert JSON in the following format:

  "{unique-lowercase-app-name}": {
      "button": "{value}",
      "friendlyName": "{value}",
      "className": "{value}",
      "deviceFamily": ["amazon-fire", "apple-tv", "chromecast", "homatics", "nvidia-shield", "onn", "roku", "xiaomi"],
      "amazon-fire": {
          "appName": "{value}",
          "androidName": "{value}",
          "adbLaunchCommand": "{value}",
      "apple-tv": {
          "appName": "{value}",
      },
      "chromecast": {
          "appName": "{value}",
          "androidName": "{value}",
          "adbLaunchCommand": "{value}",
      },
      "homatics": {
          "appName": "{value}",
          "androidName": "{value}",
          "adbLaunchCommand": "{value}",
      },
      "nvidia-shield": {
          "appName": "{value}",
          "androidName": "{value}",
          "adbLaunchCommand": "{value}",
      },
      "onn": {
          "appName": "{value}",
          "androidName": "{value}",
          "adbLaunchCommand": "{value}",
      },
      "roku": {
          "appName": "{value}",
          "app-id": {integer value},
      },
      "xiaomi": {
          "appName": "{value}",
          "androidName": "{value}",
          "adbLaunchCommand": "{value}",
      },
  },
Key Value
button Single quoted, small in length SVG xml blob that represents the button's artwork
friendlyName Human readable friendly name that will appear in the UI app dropdown menu
className CSS class name that points to the css class describing the background (and/or other attributes) of this button
deviceFamily Array value containing one or more of the example values listed above. Any device family listed here MUST have a corresponding key below
appName The source: attribute found in Home Assistant developer tools when this app is active
androidName For Android Devices Only
The app_id: attribute found in Home Assistant developer tools when this app is active, typically the same as appName
adbLaunchCommand For Android Devices Only
Optional, but recommended for speed
An ADB shell command that will launch this app, typically beginning with adb shell am start -n followed by a value found from the output of following these directions. For a more in depth description, please read the wiki article How to write an ADB command to launch an app

Inside the static styles scroll down until you see app names listed, then continue scrolling to where your className would fit alphabetically in the list. Insert a small CSS block describing the background of the button

    .myButtonClassName {
        background: #ffffff;
    }


CEC for Volume, Power, and other controls

If you need help or would like to read more about using CEC controls with Firemote, the Using CEC Controls page is a great place to start.



Known Limitations

Amazon Fire

  • The Android TV Remote Integration does NOT support Amazon Fire devices which means that certain Fire devices may experience a considerable lag between button presses and device reactions that cannot yet be overcome. The most heavily impacted devices are:
  • After a restart or other similar type of interruption, a button press on your physical remote control may be required to regain control with your Firemote.

Apple TV

  • There is currently no way to simulate keyboard input for Apple TV devices through the Apple TV Home Assistant integration, so that means that Firemote also has that limitation

Roku

  • Keyboard functionality was introduced in Firemote version v3.2.3 and requires Home Assistant version 2024.2.0 or newer.
  • The search feature does not work properly in with the Roku integration, so it cannot be added to the function options. Ticket #105827 was opened to report this issue, but there may not be a positive outcome.
  • The sleep button (sleep timer for compatible Roku TV devices) requires Home Assistant 2024.3.1 or newer



FAQ

I installed the Firemote Card, but I can't find it to add in my dashboard

This tends to happen when your Home Assistant UI needs a refresh. The best way to do this is through force clearing your Home Assistant cache and trying again.

Why won't the volume, mute, and/or power buttons work from my Firemote card?

In many cases, your remote control sends commands for volume, mute, and power to your TV or receiver using the IR emitter on the front of the physical remote control. These IR commands cannot be sent in a traditional Home Assistant setup.

If your player device AND the device they are connected to both offer CEC options, then activating CEC will allow the Firemote card controls to work as expected. Click here to learn more about how to configure CEC to work with your Firemote. Another option might be to control your devices (TVs, Receivers, etc.) using Button Overrides. If you can control those kinds of devices through Home Assistant, you can write a HA script and attach that script to a button on your Firemote.

Due to the way the Apple TV Home Assistant integration is built, an Apple TV style Firemote cannot properly simulate a "Mute" button press. A Button Override will be required in this case.

Why don't any of the buttons on the Firemote work at all?

  • If your Firemote used to work perfectly, and some or all of the buttons suddenly stopped working, it could be that all you need to do is press one button (any button) on your Fire TV device's physical remote control. After doing that step, try your Firemote again. This step most commonly fixes the issue in Amazon Fire devices after they are powered on, restarted, or updated.
  • Check your card configuration:
    • Is the correct Android device selected?
    • Is the correct Device Family selected?
    • Is the correct Device type selected?
    • If you are using it, is the correct matching Android TV Remote Entity selected?
    • Is Compatibility Mode set to Default?
  • If the Default Compatibility Mode is not working on your device, and you've checked every other step, slowly choose "event0", "event1", etc. and test your remote buttons under each mode. One of these will work.

I own a device that isn't a part of any of the existing device families, can it be added?

Yes! In fact, there is a poll in the discussion group called Vote for what gets added next where the community can help decide which new device family will gain Firemote support next. If your device isn't on the ballot, no problem! Just vote for "Other" and write the name of your device in the discussion thread below.

Why isn't the model of my Amazon Fire Device supported?

There are over 40 kinds of Amazon Fire devices, so it will take a while to gain properly tested support for all of them. If Firemote doesn't support your Amazon Fire device yet, you can still use Firemote! Simply choose a supported device that is similar to the one that you have (preferably a remote that looks the same as your physical remote), then you can test different compatibility modes to find out which one works the best.

The BEST option for everyone is if you would submit a request to have your device added! It's simple! Just open a new Amazon Fire TV Device Support Request, fill out the quick and easy form, and you're done!

Why do only some of the Firemote buttons for the Apps that came with my Apple TV work properly, while others don't?

Apple TV app shortcuts work simply by passing the name of the app to the apple tv remote entity. Firemote is built and tested against an environment that uses English as the primary language. In some scenarios, built-in Apple TV apps use language app specific names, which is why asking it to open the English version of that app's name does not work. In order to overcome this, I request that you open a new language support request so we can work together and make all of these buttons work as intended.

Can I make a dashboard button, voice command, or Home Assistant script that calls Firemote?

No. As far as I'm aware there isn't a way to access a card's buttons, functions, or features by calling an outside script or using a voice command.

I want a shortcut button for an app I use frequently, but it's not on the list. Can it be added?

Absolutely! Simply ask! Here's how: From the Issues menu, simply start a new App Shortcut Request. If you absolutely cannot wait, you can also build your own launcher button using YAML.

Why aren't there keyboard controls for Apple devices?

This is all a result of how the Firemote card sends commands. The Apple TV integration for Home Assistant does not include any keyboard or letter button press commands for Firemote to hook into.

Why do I still need the ADB integration when there is an Android Remote Integration?

You've likely noticed in the Firemote setup instructions that for several devices, the ADB integration is a requirement. The reason for this comes down to using the best tool for the job.

Between the two integrations, the Android Debug Bridge / Android TV Integration can do almost all of the things that Firemote requires to control Android based devices. The Android TV Remote Integration unfortunately does not currently have the same range of abilities and features. However, the benefit of adding the Android TV Remote Integration to your Firemote is that it can offer a level of speed and stability for some commands that just isn't possible through standard ADB commands.

Firemote always defaults to using the ADB integration, but will choose to use the Android TV Remote integration based on these factors:

  • If the Android TV Remote Integration has been configured
  • If using the Android TV Remote Integration would have a speed advantage over the ADB integration

The speed element is a big one! ADB commands can introduce a serious lag because of how they work, where the commands sent using the Android TV integration can be nearly instantaneous.

If you want a quick tutorial to help you to enable ADB, I've created a YouTube video titled Enable ADB & USB Debugging just for you!

How do I write an ADB command?

If you need some help to write an ADB app launch command, take a look at this article: How to write an ADB command to launch an app It builds upon the instructions [article | video] given for learning more about the active app

Which languages are currently supported?

The Firemote project is written in English. In an effort to make things easier for all users, language translations are being added to the Firemote visual editor through the help of the community. Additionally, Apple TV users who do not have their devices set to English might experience problems when trying to launch the Apple native apps with Firemote, so in those cases language translations are required.

Language Code Visual Editor Apple TV App Names
Danish da
Dutch, Flemish nl
English en
Estonian et
French fr
German de
Hebrew he
Lithuanian lt
Polish pl
Portuguese pt
Portuguese BR pt-br
Spanish es
Spanish (Latin America) es-419
Swedish sv

If a language you speak is not currently supported, please consider opening a new language support request. If your language is supported, but you do not see it when using the Firemote visual editor, take a look at this article: Changing Your Home Assistant Language.

How do I report a problem, make a request, or talk about stuff?

Click on the Issues button at the top of this page, click 'New Issue', and select the appropriate category for your needs. You're also welcome to join or begin a new discussion if that suits your needs.

How can I contribute?

  • Did you install Firemote through HACS? If you did, and it was easy, visit the HACS Github Page and give their project a star! There should be thousands, but for some reason they don't have many. Give them some love!
  • Give this GitHub project a star! Not only does it help more people see it, but it also kicks off an automation that plays an encouraging little tune at my workstation. It's great!
  • Take a look at the current discussions board to see if anything is tagged with "Help Wanted".
  • Since it is personally expensive for me to purchase, evaluate, and develop integrations for all of your requests, I've set up an Amazon Wish List (US) and an Amazon Wish List (DE) for any of you who are feeling incredibly generous and want to send me something that I don't already own.
  • If you speak a language that's not currently in this list, you can open a new language support request
  • Buy Me A Coffee
Clone this wiki locally