diff --git a/source/_integrations/androidtv_remote.markdown b/source/_integrations/androidtv_remote.markdown new file mode 100644 index 00000000000..ff4874af3dd --- /dev/null +++ b/source/_integrations/androidtv_remote.markdown @@ -0,0 +1,357 @@ +--- +title: Android TV Remote +description: Instructions on how to integrate Android TV remotes into Home Assistant. +ha_category: + - Remote +ha_release: 2023.5 +ha_iot_class: Local Push +ha_config_flow: true +ha_codeowners: + - '@tronikos' +ha_quality_scale: platinum +ha_domain: androidtv_remote +ha_zeroconf: true +ha_platforms: + - diagnostics + - remote +ha_integration_type: device +--- + +The Android TV Remote integration allows you to control an Android TV device by sending [commands](https://github.com/tronikos/androidtvremote2/blob/main/TvKeys.txt) and launching apps. For this to work the Android TV device needs to have [Android TV Remote Service](https://play.google.com/store/apps/details?id=com.google.android.tv.remote.service) which is pre-installed on most devices. + +{% include integrations/config_flow.md %} + +## Entity + +This integration adds a `remote` entity which turns on/off the Android TV device. +The entity has the `current_activity` attribute that shows the current foreground app on the Android TV. + +## Services + +You can use the `remote.turn_off`, `remote.turn_on`, `remote.toggle`, and `remote.send_command` services from the [remote](/integrations/remote/) platform. + +For a list of the most common commands you can send to the Android TV via `remote.send_command` see: [TvKeys](https://github.com/tronikos/androidtvremote2/blob/main/TvKeys.txt). +For a full list see [here](https://github.com/tronikos/androidtvremote2/blob/main/src/androidtvremote2/remotemessage.proto#L90). + +If `activity` is specified in `remote.turn_on` it will open the specified URL in the associated app. + +Examples of URLs to pass as activity for some popular apps: + +| App | URL | +| --- | --- | +| YouTube | https://www.youtube.com +| Netflix | https://www.netflix.com/title +| Prime Video | https://app.primevideo.com +| Disney+ | https://www.disneyplus.com + +Examples of service calls: + +```yaml +# Open the currently selected item on the Android TV +service: remote.send_command +data: + command: DPAD_CENTER +target: + entity_id: remote.living_room_tv +``` + +```yaml +# Long press on the currently selected item on the Android TV +service: remote.send_command +data: + command: DPAD_CENTER + hold_secs: 0.5 +target: + entity_id: remote.living_room_tv +``` + +```yaml +# Launch YouTube +service: remote.turn_on +data: + activity: https://www.youtube.com +target: + entity_id: remote.living_room_tv +``` + +```yaml +# Open a specific YouTube video: +service: remote.turn_on +data: + activity: https://www.youtube.com/watch?v=dQw4w9WgXcQ +target: + entity_id: remote.living_room_tv +``` + +## Dashboard example + +You have to manually create buttons in Lovelace to send commands to the Android TV device or launch apps on it. + +Below is an example for you to start with. Many of the buttons support long press. + +![Screenshot Android TV Remote example](/images/integrations/androidtv_remote/lovelace_example.png) + +{% details "Lovelace example" %} + +Replace all instances of `living_room_tv` with your entity ID. + +```yaml +type: vertical-stack +cards: + - type: entities + entities: + - entity: remote.living_room_tv + - square: true + columns: 3 + type: grid + cards: + - type: button + show_icon: false + tap_action: + action: none + hold_action: + action: none + - type: button + icon: mdi:arrow-up-bold + tap_action: + action: call-service + service: remote.send_command + data: + command: DPAD_UP + target: + entity_id: remote.living_room_tv + hold_action: + action: none + - type: button + show_icon: false + tap_action: + action: none + hold_action: + action: none + - type: button + icon: mdi:arrow-left-bold + tap_action: + action: call-service + service: remote.send_command + data: + command: DPAD_LEFT + target: + entity_id: remote.living_room_tv + hold_action: + action: none + - type: button + icon: mdi:circle + tap_action: + action: call-service + service: remote.send_command + data: + command: DPAD_CENTER + target: + entity_id: remote.living_room_tv + hold_action: + action: call-service + service: remote.send_command + data: + command: DPAD_CENTER + hold_secs: 0.5 + target: + entity_id: remote.living_room_tv + - type: button + icon: mdi:arrow-right-bold + tap_action: + action: call-service + service: remote.send_command + data: + command: DPAD_RIGHT + target: + entity_id: remote.living_room_tv + hold_action: + action: none + - type: button + icon: mdi:arrow-left + tap_action: + action: call-service + service: remote.send_command + data: + command: BACK + target: + entity_id: remote.living_room_tv + hold_action: + action: call-service + service: remote.send_command + data: + command: BACK + hold_secs: 0.5 + target: + entity_id: remote.living_room_tv + - type: button + icon: mdi:arrow-down-bold + tap_action: + action: call-service + service: remote.send_command + data: + command: DPAD_DOWN + target: + entity_id: remote.living_room_tv + hold_action: + action: none + - type: button + icon: mdi:home-outline + tap_action: + action: call-service + service: remote.send_command + data: + command: HOME + target: + entity_id: remote.living_room_tv + hold_action: + action: call-service + service: remote.send_command + data: + command: HOME + hold_secs: 0.5 + target: + entity_id: remote.living_room_tv + - square: false + columns: 3 + type: grid + cards: + - type: button + icon: mdi:skip-previous + tap_action: + action: call-service + service: remote.send_command + data: + command: MEDIA_PREVIOUS + target: + entity_id: remote.living_room_tv + hold_action: + action: call-service + service: remote.send_command + data: + command: MEDIA_REWIND + target: + entity_id: remote.living_room_tv + - type: button + icon: mdi:play-pause + tap_action: + action: call-service + service: remote.send_command + data: + command: MEDIA_PLAY_PAUSE + target: + entity_id: remote.living_room_tv + hold_action: + action: call-service + service: remote.send_command + data: + command: MEDIA_STOP + target: + entity_id: remote.living_room_tv + - type: button + icon: mdi:skip-next + tap_action: + action: call-service + service: remote.send_command + data: + command: MEDIA_NEXT + target: + entity_id: remote.living_room_tv + hold_action: + action: call-service + service: remote.send_command + data: + command: MEDIA_FAST_FORWARD + target: + entity_id: remote.living_room_tv + - type: button + icon: mdi:volume-off + tap_action: + action: call-service + service: remote.send_command + data: + command: MUTE + target: + entity_id: remote.living_room_tv + hold_action: + action: none + - type: button + icon: mdi:volume-medium + tap_action: + action: call-service + service: remote.send_command + data: + command: VOLUME_DOWN + target: + entity_id: remote.living_room_tv + hold_action: + action: none + - type: button + icon: mdi:volume-high + tap_action: + action: call-service + service: remote.send_command + data: + command: VOLUME_UP + target: + entity_id: remote.living_room_tv + hold_action: + action: none + - square: false + columns: 4 + type: grid + cards: + - type: button + icon: mdi:youtube + tap_action: + action: call-service + service: remote.turn_on + data: + activity: https://www.youtube.com + target: + entity_id: remote.living_room_tv + hold_action: + action: none + - type: button + icon: mdi:netflix + tap_action: + action: call-service + service: remote.turn_on + data: + activity: https://www.netflix.com/title + target: + entity_id: remote.living_room_tv + hold_action: + action: none + - type: picture + image: >- + https://upload.wikimedia.org/wikipedia/commons/thumb/1/11/Amazon_Prime_Video_logo.svg/450px-Amazon_Prime_Video_logo.svg.png + tap_action: + action: call-service + service: remote.turn_on + data: + activity: https://app.primevideo.com + target: + entity_id: remote.living_room_tv + hold_action: + action: none + - type: picture + image: >- + https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Disney%2B_logo.svg/440px-Disney%2B_logo.svg.png + tap_action: + action: call-service + service: remote.turn_on + data: + activity: https://www.disneyplus.com + target: + entity_id: remote.living_room_tv + hold_action: + action: none + - type: entity + entity: remote.living_room_tv + attribute: current_activity + - type: media-control + entity: media_player.living_room_tv +``` + +{% enddetails %} diff --git a/source/images/integrations/androidtv_remote/lovelace_example.png b/source/images/integrations/androidtv_remote/lovelace_example.png new file mode 100644 index 00000000000..ac68b166ad1 Binary files /dev/null and b/source/images/integrations/androidtv_remote/lovelace_example.png differ