Files

RelayTV Home Assistant Integration

This integration provides a RelayTV media_player entity, RelayTV service actions, and an optional Home Assistant sidebar panel embedding RelayTV UI.

Implemented Behavior

  • media_player platform is enabled (custom_components/relaytv/media_player.py).
  • Hybrid state updates:
    • bootstrap/reconnect uses RelayTV GET /status
    • RelayTV GET /ui/events SSE provides hot-state updates
    • status events are treated as authoritative full snapshots
    • playback / queue / jellyfin events trigger fast updates or targeted refreshes
  • Sidebar panel is registered via Home Assistant frontend iframe panel APIs.
  • Optional bearer-token authentication is validated during setup and supports Home Assistant reauthentication.
  • Credential-bearing query parameters are removed from entity state and persisted resume keys.
  • RelayTV services are registered from services.yaml:
    • smart_url
    • play_now
    • announce
    • play_temporary
    • overlay
    • play_synced
    • snapshot
    • play_with_resume
    • upload_media
    • upload_media_play
    • upload_media_enqueue

Setup

  1. Place this folder at:

    /config/custom_components/relaytv/

  2. Restart Home Assistant.

  3. Add integration: Settings -> Devices & Services -> Add Integration -> RelayTV.

  4. Provide RelayTV base URL (example: http://relaytv-host:8787), a server/display name, and the optional RelayTV API token.

Options

  • panel_enabled
  • panel_target_entry_id
  • sensor_stream_mappings

Notes

  • smart_url uses RelayTV POST /smart, which enqueues while already playing and otherwise starts playback immediately.
  • play_now and announce currently target RelayTV POST /play.
  • RelayTV also exposes POST /play_now, but this integration does not currently use its preserve-current behavior.
  • Upload services target RelayTV POST /ingest/media, POST /ingest/media/play, and POST /ingest/media/enqueue.
  • Upload services accept either a Home Assistant local media source selection or an allowlisted file_path visible inside the Home Assistant container.
  • Overlay requires text or image_url.
  • Snapshot requires active playback on the RelayTV server.
  • Snapshot responses are normalized to absolute URLs for Home Assistant entity attributes.
  • The integration keeps /status as bootstrap/fallback and does not treat /ui/events as a replay log.
  • Version 0.4.0 requires Home Assistant 2026.7 or newer.

For fuller documentation and examples, see the repository root README.

License

RelayTV Home Assistant is licensed under the GNU General Public License, version 3 only (GPL-3.0-only). See the repository root LICENSE file.