Script: Cast (deeplink) a YouTube video to a Roku device

I spent some time searching for a smooth solution to play a specific YouTube video on a Roku device. There are a couple ways to do it, but they are all pretty involved, so I made my own. My adjusting the app_id, it should be possible to adapt this to deep-link media in any Roku app.

This script will play the specified YouTube video on the given Roku device. It may present a “select a profile” screen; if so, the script will pick the default profile so it can start playing.

alias: "Provide Penguins: Roku"
description: >-
  This script will cast a YouTube video (Monterey Bay Penguin Cam, by default)
  to the chosen Roku device, turning it on and clicking through the
  "choose a profile" screen if necessary.
variables:
  entity_name: smaller_roku_tv
  video_id: gOptyLanxq4
fields:
  entity_name:
    name: Roku Entity Base Name
    description: >-
      The last field of the entity id, after the '.' so if your full entity_id
      is "media_player.my_roku", then the entity_name should be "my_roku"
    example: my_roku
    default: my_roku
    selector:
      text: null
  video_id:
    name: Video ID
    description: The YouTube video ID
    example: gOptyLanxq4
    default: gOptyLanxq4
    selector:
      text: null
sequence:
  - variables:
      mp_entity: media_player.{{ entity_name }}
      r_entity: remote.{{ entity_name }}
  - if:
      - condition: template
        value_template: "{{ states(r_entity) == 'off'  }}"
    then:
      - service: remote.turn_on
        data:
          entity_id: "{{ r_entity }}"
  - service: media_player.play_media
    data:
      entity_id: "{{ mp_entity }}"
      media_content_id: 837
      media_content_type: app
      extra:
        content_id: "{{ video_id }}"
        content_type: live
  - delay:
      hours: 0
      minutes: 0
      seconds: 30
      milliseconds: 0
  - if:
      - condition: not
        conditions:
          - condition: template
            value_template: "{{states( mp_entity ) == 'playing'}}"
    then:
      - service: remote.send_command
        data:
          command:
            - enter
          entity_id: "{{ r_entity }}"
icon: mdi:penguin
mode: parallel
4 Likes

Trying this almost 3 years after you posted, and it works great! I will say, though, you missed out on a great opportunity to Rick Roll the many HA new-commers that followed you! :slight_smile:

Thanks for this. Can confirm it still works perfectly!

Love this!! I’ve been wanting to set a script to start one of the channels we use to entertain the dogs when we go out to run errands. Works like a champ!

Here end of December and Script still working great! Not sure why it works so much more reliably than trying to deep link directly in an automation but thank you OP.