From 389354c292f2cdb4d6a281099fbae759205d2bbc Mon Sep 17 00:00:00 2001 From: Jeff Irion Date: Wed, 13 Mar 2019 04:38:56 -0700 Subject: [PATCH] Document 'firetv' -> 'androidtv' renaming and added Android TV functionality (#8913) * Document Android TV functionality in Fire TV component * Remove extra ')' * More documentation updates for Android TV support * Remove "stick" * Clarify that 'get_sources' only applies to Fire TV devices * Generalize to Android TV and Fire Tv * More Android TV / Fire TV generalization * Generalize the host and port descriptions to Android TV / Fire TV * Rename integration from 'firetv' to 'androidtv' * Add Android TV + Fire TV image * Rename 'media_player.firetv.markdown' -> 'media_player.androidtv.markdown' and add redirect * Rename 'firetv.adb_command' -> 'androidtv.adb_command' * :pencil2: Tweaks * :pencil2: Tweak * :hammer: Changed to component doc instead of platform --- source/_components/androidtv.markdown | 226 ++++++++++++++++++ .../_components/media_player.firetv.markdown | 178 -------------- source/images/supported_brands/androidtv.png | Bin 0 -> 20705 bytes 3 files changed, 226 insertions(+), 178 deletions(-) create mode 100644 source/_components/androidtv.markdown delete mode 100644 source/_components/media_player.firetv.markdown create mode 100644 source/images/supported_brands/androidtv.png diff --git a/source/_components/androidtv.markdown b/source/_components/androidtv.markdown new file mode 100644 index 00000000000..691948a810b --- /dev/null +++ b/source/_components/androidtv.markdown @@ -0,0 +1,226 @@ +--- +layout: page +title: "Android TV" +description: "Instructions on how to integrate Android TV and Fire TV devices into Home Assistant." +date: 2015-10-23 18:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: androidtv.png +ha_category: Media Player +ha_release: 0.7.6 +ha_iot_class: Local Polling +redirect_from: + - /components/media_player.firetv/ +--- + +The `androidtv` platform allows you to control an Android TV device or [Amazon Fire TV](https://www.amazon.com/b/?node=8521791011) device. + +## {% linkable_title Device preparation %} + +To set up your device, you will need to find its IP address and enable ADB debugging. For Android TV devices, please consult the documentation for your device. + +For Fire TV devices, the instructions are as follows: + +- Turn on ADB Debugging on your Amazon Fire TV: + - From the main (Launcher) screen, select Settings. + - Select System > Developer Options. + - Select ADB Debugging. +- Find Amazon Fire TV device IP address: + - From the main (Launcher) screen, select Settings. + - Select System > About > Network. + +## {% linkable_title Configuration %} + +```yaml +# Example configuration.yaml entry +media_player: + # Use the Python ADB implementation without authentication + - platform: androidtv + name: Android TV 1 + host: 192.168.0.111 + + # Use the Python ADB implementation with authentication + - platform: androidtv + name: Android TV 2 + host: 192.168.0.222 + adbkey: "/config/android/adbkey" + + # Use an ADB server for sending ADB commands + - platform: androidtv + name: Android TV 3 + host: 192.168.0.123 + adb_server_ip: 127.0.0.1 +``` + +{% configuration %} +host: + description: The IP address for your Android TV / Fire TV device. + required: true + type: string +name: + description: The friendly name of the device. + required: false + default: Android TV + type: string +port: + description: The port for your Android TV / Fire TV device. + required: false + default: 5555 + type: integer +adbkey: + description: The path to your `adbkey` file. Note that the file `adbkey.pub` must be in the same directory. + required: false + type: string +adb_server_ip: + description: The IP address of the ADB server. + required: false + type: string +adb_server_port: + description: The port for the ADB server. + required: false + default: 5037 + type: port +get_sources: + description: Whether or not to retrieve the running apps as the list of sources for Fire TV devices; not used for Android TV devices. + required: false + default: true + type: boolean +apps: + description: A dictionary where the keys are app IDs and the values are app names that will be displayed in the UI; see example below. + required: false + default: {} + type: dict +device_class: + description: "The type of device: `auto` (detect whether it is an Android TV or Fire TV device), `androidtv`, or `firetv`." + required: false + default: auto + type: string +{% endconfiguration %} + +### {% linkable_title Full Configuration %} + +```yaml +# Example configuration.yaml entry +media_player: + # Use an ADB server to setup an Android TV device + # and provide an app name + - platform: androidtv + name: Android TV + device_class: androidtv + host: 192.168.0.222 + adb_server_ip: 127.0.0.1 + apps: + com.amazon.tv.launcher: "Fire TV" + + # Use the Python ADB implementation with authentication + # to setup a Fire TV device and don't get the running apps + - platform: androidtv + name: Fire TV + device_class: firetv + host: 192.168.0.222 + adbkey: "/config/android/adbkey" + get_sources: false +``` + +## {% linkable_title ADB Setup %} + +This component works by sending ADB commands to your Android TV / Fire TV device. There are two ways to accomplish this: + +### {% linkable_title 1. ADB Server %} + +You can use an ADB server to connect to your Android TV and Fire TV devices. + +For Hass.io users, you can install the [Android Debug Bridge](https://github.com/hassio-addons/addon-adb/blob/master/README.md) addon. Using this approach, Home Assistant will send the ADB commands to the server, which will then send them to the Android TV / Fire TV device and report back to Home Assistant. To use this option, add the `adb_server_ip` option to your configuration. If you are running the server on the same machine as Home Assistant, you can use `127.0.0.1` for this value. + +### {% linkable_title 2. Python ADB Implementation %} + +The second option is to connect to your device using the `adb` Python package. + +If your device requires ADB authentication, you will need to follow the instructions in the [ADB Authentication](#adb-authentication) section below. Once you have an authenticated key, this approach does not require any additional setup or addons. However, users with newer devices may find that the ADB connection is unstable. For a Fire TV device, you can try setting the `get_sources` configuration option to `false`. If the problem cannot be resolved, you should use the ADB server option. + +### {% linkable_title ADB Authentication %} + +If you get a "Device authentication required, no keys available" error when trying to set up your Android TV or Fire TV, then you'll need to create an adbkey and add its path to your configuration. Follow the instructions on this page to connect to your device from your computer: [Connecting to Fire TV Through adb](https://developer.amazon.com/zh/docs/fire-tv/connecting-adb-to-device.html). + +

+In the dialog appearing on your Android TV / Fire TV, you must check the box that says "always allow connections from this device." ADB authentication in Home Assistant will only work using a trusted key. +

+ +Once you've successfully connected to your Android TV / Fire TV via the command `adb connect `, the files `adbkey` and `adbkey.pub` will be created on your computer. The default locations for these files are (from [https://developer.android.com/studio/command-line/adb](https://developer.android.com/studio/command-line/adb)): + +- Linux and Mac: `$HOME/.android.` +- Windows: `%userprofile%\.android.` + +Copy the `adbkey` and `adbkey.pub` files to your Home Assistant folder and add the path to the `adbkey` file to your configuration. + +#### {% linkable_title ADB Troubleshooting %} + +If you receive the error message `Issue: Error while setting up platform androidtv` in your log when trying to set up an Android TV or Fire TV device with an ADB key, then there is probably an issue with your ADB key. Here are some possible causes. + +1. ADB is not enabled on your device. + +2. Your key is not pre-authenticated. Before using the `adbkey` in Home Assistant, you _**must**_ connect to your device using the ADB binary and tell it to always allow connections from this computer. For more information, see the section [ADB Authentication](#adb-authentication) above. + +3. Home Assistant does not have the appropriate permissions for the `adbkey` file and so it is not able to use it. Once you fix the permissions, the component should work. + +4. You are already connected to the Android TV / Fire TV via ADB from another device. Only one device can be connected, so disconnect the other device, restart the Android TV / Fire TV (for good measure), and then restart Home Assistant. + +## {% linkable_title Services %} + +### {% linkable_title `media_player.select_source` %} + +For Fire TV devices, you can launch an app using the `media_player.select_source` command. Simply provide the app ID as the `source`. You can also stop an app by prefixing the app ID with a `!`. For example, you could define [scripts](/docs/scripts) to start and stop Netflix as follows: + +```yaml +start_netflix: + sequence: + - service: media_player.select_source + data: + entity_id: media_player.fire_tv_living_room + source: 'com.netflix.ninja' + +stop_netflix: + sequence: + - service: media_player.select_source + data: + entity_id: media_player.fire_tv_living_room + source: '!com.netflix.ninja' +``` + +### {% linkable_title `androidtv.adb_command` %} + +The service `androidtv.adb_command` allows you to send either keys or ADB shell commands to your Android TV / Fire TV device. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | no | Name(s) of Android TV / Fire TV entities. +| `command` | no | Either a key command or an ADB shell command. + +In an [action](/getting-started/automation-action/) of your [automation setup](/getting-started/automation/) it could look like this: + +```yaml +action: + service: androidtv.adb_command + data: + entity_id: media_player.androidtv_tv_living_room + command: "HOME" +``` + +Available key commands include: + +- `POWER` +- `SLEEP` +- `HOME` +- `UP` +- `DOWN` +- `LEFT` +- `RIGHT` +- `CENTER` +- `BACK` +- `MENU` + +The full list of key commands can be found [here](https://github.com/JeffLIrion/python-androidtv/blob/e1c07176efc9216cdcff8245c920224c0234ea56/androidtv/constants.py#L115-L155). + +You can also use the command `GET_PROPERTIES` to retrieve the properties used by Home Assistant to update the device's state. These will be logged at the INFO level and can be used to help improve state detection in the backend [androidtv](https://github.com/JeffLIrion/python-androidtv) package. diff --git a/source/_components/media_player.firetv.markdown b/source/_components/media_player.firetv.markdown deleted file mode 100644 index 8be1bdb2fd2..00000000000 --- a/source/_components/media_player.firetv.markdown +++ /dev/null @@ -1,178 +0,0 @@ ---- -layout: page -title: "Fire TV" -description: "Instructions on how to integrate Fire-TV into Home Assistant." -date: 2015-10-23 18:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: firetv.png -ha_category: Media Player -ha_release: 0.7.6 -ha_iot_class: "Local Polling" ---- - - -The `firetv` platform allows you to control an [Amazon Fire TV/stick](https://www.amazon.com/b/?node=8521791011). - -Steps to configure your Amazon Fire TV stick with Home Assistant: - -- Turn on ADB Debugging on your Amazon Fire TV: - - From the main (Launcher) screen, select Settings. - - Select System > Developer Options. - - Select ADB Debugging. -- Find Amazon Fire TV device IP: - - From the main (Launcher) screen, select Settings. - - Select System > About > Network. - - -## {% linkable_title Configuration %} - -```yaml -# Example configuration.yaml entry -media_player: - # Use the Python ADB implementation without authentication - - platform: firetv - name: Fire TV 1 - host: 192.168.0.111 - - # Use the Python ADB implementation with authentication - - platform: firetv - name: Fire TV 2 - host: 192.168.0.222 - adbkey: "/config/android/adbkey" - - # Use an ADB server for sending ADB commands - - platform: firetv - name: Fire TV 3 - host: 192.168.0.123 - adb_server_ip: 127.0.0.1 -``` - -{% configuration %} -host: - description: The IP address for your Fire TV device. - required: true - type: string -name: - description: The friendly name of the device. - required: false - default: Amazon Fire TV - type: string -port: - description: The port for your Fire TV device. - required: false - default: 5555 - type: integer -adbkey: - description: The path to your `adbkey` file. Note that the file `adbkey.pub` must be in the same directory. - required: false - type: string -adb_server_ip: - description: The IP address of the ADB server. - required: false - type: string -adb_server_port: - description: The port for the ADB server. - required: false - default: 5037 - type: port -get_sources: - description: Whether or not to retrieve the running apps as the list of sources. - required: false - default: true - type: boolean -apps: - description: A dictionary where the keys are app IDs and the values are app names that will be displayed in the UI; see example below. - required: false - default: {} - type: dict -{% endconfiguration %} - - -### {% linkable_title Full Configuration %} - -```yaml -# Example configuration.yaml entry -media_player: - # Use the Python ADB implementation with authentication, - # don't get the running apps, and provide an app name - - platform: firetv - name: Fire TV - host: 192.168.0.222 - adbkey: "/config/android/adbkey" - get_sources: false - apps: - com.amazon.tv.launcher: "Fire TV" -``` - - -## {% linkable_title ADB Setup %} - -This component works by sending ADB commands to your Fire TV device. There are two ways to accomplish this: - -1. Using the `adb` Python package. If your device requires ADB authentication, you will need to follow the instructions in the "ADB Authentication (for Fire TV devices with recent software)" section below. Once you have an authenticated key, this approach does not require any additional setup or addons. However, users with newer devices may find that the ADB connection is unstable. If setting the `get_sources` configuration option to `false` does not help, they should use the next option. -2. Using an ADB server. For Hass.io users, you can install the [Android Debug Bridge](https://github.com/hassio-addons/addon-adb/blob/v0.1.0/README.md) addon. With this approach, Home Assistant will send the ADB commands to the server, which will then send them to the Fire TV device and report back to Home Assistant. To use this option, add the `adb_server_ip` option to your configuration. If you are running the server on the same machine as Home Assistant, you can use `127.0.0.1` for this value. - - -### {% linkable_title ADB Authentication (for Fire TV devices with recent software) %} - -If you get a "Device authentication required, no keys available" error when trying to set up Fire TV, then you'll need to create an adbkey and add its path to your configuration. Follow the instructions on this page to connect to your Fire TV from your computer: [Connecting to Fire TV Through adb](https://developer.amazon.com/zh/docs/fire-tv/connecting-adb-to-device.html). - -

- In the dialog appearing on your Fire TV, you must check the box that says "always allow connections from this device." ADB authentication in Home Assistant will only work using a trusted key. -

- -Once you've successfully connected to your Fire TV via the command `adb connect `, the files `adbkey` and `adbkey.pub` will be created on your computer. The default locations for these files are (from [https://developer.android.com/studio/command-line/adb](https://developer.android.com/studio/command-line/adb)): - -* Linux and Mac: `$HOME/.android.` -* Windows: `%userprofile%\.android.` - -Copy the `adbkey` and `adbkey.pub` files to your Home Assistant folder and add the path to the `adbkey` file to your configuration. - - -#### ADB Troubleshooting - -If you receive the error message `Issue: Error while setting up platform firetv` in your log when trying to set up a Fire TV device with an ADB key, then there is probably an issue with your ADB key. Here are some possible causes. - -1. ADB is not enabled on your Fire TV. To remedy this, enable ADB by following the instructions above. - -2. Your key is not pre-authenticated. Before using the `adbkey` in Home Assistant, you _**must**_ connect to your Fire TV device using the ADB binary and tell the Fire TV to always allow connections from this computer. For more information, see the section "ADB Authentication (for Fire TV devices with recent software)" above. - -3. Home Assistant does not have the appropriate permissions for the `adbkey` file and so it is not able to use it. Once you fix the permissions, the component should work. - -4. You are already connected to the Fire TV via ADB from another device. Only one device can be connected, so disconnect the other device, restart the Fire TV (for good measure), and then restart Home Assistant. - - -## {% linkable_title Service %} - -The service `firetv.adb_command` allows you to send either keys or ADB shell commands to the Fire TV. - -| Service data attribute | Optional | Description | -| ---------------------- | -------- | ----------- | -| `entity_id` | no | Name(s) of Fire TV entities. -| `command` | no | Either a key command or an ADB shell command. - -In an [action](/getting-started/automation-action/) of your [automation setup](/getting-started/automation/) it could look like this: - -```yaml -action: - service: firetv.adb_command - data: - entity_id: media_player.fire_tv_living_room - command: "HOME" -``` - -Available key commands are: - -* `POWER` -* `SLEEP` -* `HOME` -* `UP` -* `DOWN` -* `LEFT` -* `RIGHT` -* `CENTER` -* `BACK` -* `MENU` diff --git a/source/images/supported_brands/androidtv.png b/source/images/supported_brands/androidtv.png new file mode 100644 index 0000000000000000000000000000000000000000..b98653066daedf1f4241191f6b9afd7b4a90dd47 GIT binary patch literal 20705 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