> ## Documentation Index
> Fetch the complete documentation index at: https://docs.unicontrol.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Android TV / Google TV

> Controle dispositivos Android TV e Google TV pelo Portal

# Android TV / Google TV

Controle dispositivos **Android TV** e **Google TV** diretamente pelo Portal usando o mesmo
protocolo do aplicativo Google TV (Android TV Remote v2). Suporta sticks de streaming,
TVs com Android TV embarcado, dongles Chromecast com Google TV, e qualquer outro
dispositivo que rode o serviço `Android TV Remote Service`.

## Pré-requisitos

* O dispositivo Android TV precisa estar **ligado** e na mesma rede do edge local.
* O serviço **Android TV Remote Service** já vem pré-instalado em todos os dispositivos
  Google TV / Android TV oficiais — não é necessário ativar modo desenvolvedor nem ADB.
* A integração precisa rodar em um **edge local**. Crie um em **Configurações → Edges**
  antes de adicionar.

## Configurar

<Steps>
  <Step title="Adicione a integração">
    Va em **Configurações → Integrações → Adicionar → Android TV / Google TV**.
  </Step>

  <Step title="Informe o IP">
    Digite o endereço IP local da TV (ex: `192.168.1.50`). O nome amigável é opcional.
  </Step>

  <Step title="Digite o PIN">
    A TV exibirá um código de 6 caracteres. Digite-o no Portal para concluir o
    pareamento. O certificado gerado fica armazenado e o pareamento não precisa
    ser repetido.
  </Step>

  <Step title="Controle">
    Duas entidades são criadas:

    * `media_player.android_tv_<ip>_media_player` — controle de mídia (play/pause, volume, fontes)
    * `remote.android_tv_<ip>_remote` — envio de comandos de tecla arbitrários
  </Step>
</Steps>

## Funcionalidades

* Liga/desliga (toggle via `KEYCODE_POWER`)
* Volume up/down/mute
* Play / Pause / Next / Previous
* Channel up/down
* Lançar app por **deep link** (ex: `https://www.netflix.com/title.*`)
* Envio de qualquer **KEYCODE** Android via `remote.send_command`

## Comandos de tecla suportados

A entidade `remote` aceita qualquer keycode Android. Exemplos comuns:

| Comando       | Keycode                                                                           |
| ------------- | --------------------------------------------------------------------------------- |
| Setas         | `KEYCODE_DPAD_UP`, `KEYCODE_DPAD_DOWN`, `KEYCODE_DPAD_LEFT`, `KEYCODE_DPAD_RIGHT` |
| Confirmar     | `KEYCODE_DPAD_CENTER`, `KEYCODE_ENTER`                                            |
| Voltar / Home | `KEYCODE_BACK`, `KEYCODE_HOME`                                                    |
| Power         | `KEYCODE_POWER`                                                                   |
| Volume        | `KEYCODE_VOLUME_UP`, `KEYCODE_VOLUME_DOWN`, `KEYCODE_VOLUME_MUTE`                 |
| Mídia         | `KEYCODE_MEDIA_PLAY_PAUSE`, `KEYCODE_MEDIA_NEXT`, `KEYCODE_MEDIA_PREVIOUS`        |
| Entradas HDMI | `KEYCODE_TV_INPUT_HDMI_1`..`KEYCODE_TV_INPUT_HDMI_4`                              |

A lista completa segue as constantes do **Android KeyEvent**.

<Tip>
  Você pode usar nomes curtos: o Portal automaticamente prefixa `KEYCODE_` quando
  necessário. `remote.send_command` com `command: "home"` é equivalente a
  `KEYCODE_HOME`.
</Tip>

## Dashboard

Use o card **Media Player** para exibir o estado (ligado/desligado, app atual,
volume) e o card **Remote** para envio de comandos por botão.

## Comandos ADB (avançado)

Além do protocolo Android TV Remote v2, a integração expõe um canal **ADB**
(Android Debug Bridge) que permite executar **qualquer comando shell** no
dispositivo — útil para automações de baixo nível, abrir activities específicas,
listar pacotes, ler logs, etc.

### Pré-requisitos para ADB

<Steps>
  <Step title="Habilite o ADB sobre rede">
    Em **Configurações → Sistema → Sobre → Build** (toque 7 vezes para ativar
    modo desenvolvedor). Depois em **Configurações → Sistema → Opções de
    desenvolvedor**, ative **Depuração USB** e **Depuração via rede** (ou
    "ADB sobre Wi-Fi", dependendo do dispositivo).
  </Step>

  <Step title="Aprove o edge na primeira conexão">
    Na primeira chamada `adb_command`, a TV exibe um diálogo
    **"Permitir depuração USB?"** com o fingerprint RSA do edge.
    Marque **"Sempre permitir deste computador"** e clique em **Permitir**.
  </Step>
</Steps>

### Action: `android_tv.adb_command`

Aceita um campo `command` que pode ser:

* Um **alias curto**: `HOME`, `BACK`, `UP`, `DOWN`, `LEFT`, `RIGHT`, `CENTER`,
  `POWER`, `SLEEP`, `WAKEUP`, `MENU`, `ENTER`, `VOLUME_UP`, `VOLUME_DOWN`,
  `MUTE`, `PLAY`, `PAUSE`, `PLAY_PAUSE`, `STOP`, `NEXT`, `PREVIOUS`,
  `CHANNEL_UP`, `CHANNEL_DOWN`.
* Um **comando shell ADB cru**, ex.: `input keyevent 26`,
  `am start -a android.intent.action.VIEW -d "https://youtube.com"`,
  `pm list packages`, `dumpsys media_session`.

**Exemplo — apertar HOME:**

```yaml theme={null}
action: android_tv.adb_command
target:
  entity_id: media_player.android_tv_192_168_1_50_media_player
data:
  command: HOME
```

**Exemplo — abrir Netflix por intent:**

```yaml theme={null}
action: android_tv.adb_command
target:
  entity_id: media_player.android_tv_192_168_1_50_media_player
data:
  command: "am start -a android.intent.action.VIEW -d 'https://www.netflix.com/title.*'"
```

**Exemplo — listar apps instalados:**

```yaml theme={null}
action: android_tv.adb_command
target:
  entity_id: media_player.android_tv_192_168_1_50_media_player
data:
  command: "pm list packages -3"
```

A saída do comando volta no campo `result.response` da resposta HTTP do serviço.

<Tip>
  Comandos ADB são mais lentos que o protocolo Remote v2 (TCP handshake por
  chamada). Use o `remote.send_command` para teclas comuns e o `adb_command`
  para coisas que o Remote v2 não cobre.
</Tip>

## Solução de problemas

* **"Sessão de pareamento expirou"** — o PIN só pode ser enviado dentro de 5 minutos
  após o início do pareamento. Recomece a partir do passo do IP.
* **"Android TV reportou unpaired"** — alguém removeu o pareamento no menu
  Configurações → Apps → Android TV Remote Service da TV. Remova a integração no
  Portal e refaça.
* **TV não exibe PIN** — verifique se a TV está ligada e na mesma rede do edge.
  Algumas TVs precisam estar no menu inicial (não em modo standby profundo).
* **"adb connect rejeitado: failed to authenticate"** — você ainda não aprovou o
  edge na TV. Execute o `adb_command` uma vez, aceite o diálogo na TV e tente
  novamente.
* **"adb connect rejeitado: unable to connect"** — ADB não está ativado nas
  opções de desenvolvedor, ou a porta 5555 está bloqueada por firewall.
