Enhanced NVIDIA Shield TV integration for Home Assistant. ADB-based media session tracking, Jellyfin rich metadata, power monitoring, and receiver coordination.
Status: Early access (0.1.x). Tested on the author's own setup; expect rough edges and occasional breaking changes until 1.0. Please file issues on GitHub if anything is broken.
graph TD
subgraph "NVIDIA Shield Integration"
ADB["ADB Media Session"] -->|now playing| Entity["media_player.nvidia_shield"]
JF["Jellyfin"] -->|rich metadata| Entity
ATV["Android TV Remote"] -->|power / commands| Entity
PWR["Smart Plug"] -->|power state| Entity
end
Entity -->|"media_dag_*"| MZ["Media Zone"]
style Entity fill:#76b900,color:#fff
style MZ fill:#1a73e8,color:#fff
style ADB fill:#444,color:#fff
style JF fill:#00a4dc,color:#fff
style ATV fill:#444,color:#fff
style PWR fill:#444,color:#fff
- ADB Media Session -- Now-playing from any app (PipePipe, Spotify, VLC, Plex, etc.), not just Jellyfin
- Jellyfin Rich Metadata -- Title, series, season/episode, duration, position, stream details (resolution, codec, HDR, audio format)
- Power Monitoring -- Smart plug for reliable on/off detection with auto-discovered sibling sensors (watts, voltage, current)
- Receiver Coordination -- Links to a receiver entity and input name
- Intent Tracking -- Commands reflect in HA state immediately, self-heal against actual device state
- Privacy Mode -- Show only app name without media details for non-Jellyfin apps
- Controlled ADB Pairing -- Dedicated pairing step in config flow + re-pair button entity
- Media DAG Attributes -- Full signal chain data for Media Zone orchestration
- In HACS, open the overflow menu (⋮) → Custom repositories.
- Paste
https://github.com/ltomes/ha-nvidia-shield, pick type Integration, click Add. - Find NVIDIA Shield in the HACS list and click Download.
- Restart Home Assistant.
- Go to Settings → Devices & Services → Add Integration, search for NVIDIA Shield, and set up the integration (see Configuration).
Copy custom_components/nvidia_shield to your HA config/custom_components/ directory, restart, then add the integration from Settings → Devices & Services.
- Settings > Devices & Services > Add Integration > "NVIDIA Shield"
- Select the Android TV Remote entity for your Shield
- Enable ADB if you want now-playing from all apps
- If ADB is enabled, the next step will pair -- approve the prompt on the Shield
- Optionally configure Jellyfin, receiver, power switch
ADB is paired during setup via a dedicated config flow step. If you need to re-pair later (e.g., after factory reset), use the "Pair ADB" button on the device page in HA.
Requirements: Settings > Developer options > Network debugging enabled on the Shield.
- Jellyfin Media Player -- Auto-detected or manually selected
- Receiver + Input -- For Media Zone coordination
- Power Switch -- Smart plug entity
- ADB Host/Port -- Override auto-detection if needed
| Entity | Type | Description |
|---|---|---|
| Media Player | media_player |
Main entity with playback controls and metadata |
| Current App | sensor |
Currently running app |
| Now Playing | sensor |
Formatted now-playing string |
| Pair ADB | button |
Initiate or re-pair ADB connection |
Shared ADB helpers live in ha-adb-common and are also used by ha-hisense-tv. For HACS installs, a copy is vendored at custom_components/nvidia_shield/ha_adb_common/ so end users need nothing extra. We plan to publish ha-adb-common to PyPI so it can be declared as a normal manifest.json requirement; until then, the vendored copy is the source consumed at runtime.
To hack on the shared code locally, clone ha-adb-common as a sibling directory and run uv sync --extra dev — the [tool.uv.sources] section in pyproject.toml wires it up editable.
This integration works standalone, but pairs with ha-media-zone to create a unified zone controller:
- ha-media-zone -- Orchestrates receiver + display + sources into one entity
- ha-emotiva-mc1 -- RS232 control for Emotiva MC1 receiver
- ha-hisense-tv -- Hisense Google TV control via ADB + AirPlay
MIT