Play_media always plays with repeat on for tts messages

I’ve been using media_source to play tts messages from my elevenlabs integration. I had a script that would play the tts message then return the sonos speaker back to its previous state.

Up until recently, play_media didn’t used to repeat automatically, so I was able to check when the speaker went idle and then return back to the previous snapshot. Now my tts just keeps repeating even when I set it to no repeat before the play_media is called. Even if I change to no repeat during the tts, it still keeps repeating until I manually pause the speaker.

Here is my tts script that used to work a few builds ago:

alias: GPT-3 Script
sequence:
  - service: input_text.set_value
    data:
      value: "{{ message }}"
    target:
      entity_id: input_text.gpt_input
  - wait_for_trigger:
      - platform: state
        entity_id:
          - sensor.hassio_openai_response
  - service: sonos.snapshot
    data:
      with_group: true
      entity_id: media_player.adam_s_room_one
  - delay:
      hours: 0
      minutes: 0
      seconds: 1
      milliseconds: 0
  - service: media_player.volume_set
    data:
      volume_level: 0.47
    target:
      entity_id: media_player.adam_s_room_one
  - service: media_player.repeat_set
    data:
      repeat: "off"
    target:
      entity_id: media_player.adam_s_room_one
  - service: media_player.play_media
    data_template:
      media_content_id: >-
        media-source://tts/tts.elevenlabs_tts?message={{
        state_attr('sensor.hassio_openai_response', 'response_text') | urlencode
        }}
      media_content_type: music
      announce: false
    target:
      entity_id: media_player.adam_s_room_one
    enabled: true
  - delay:
      hours: 0
      minutes: 0
      seconds: 1
      milliseconds: 0
  - wait_template: "{{ is_state('media_player.adam_s_room_one','playing') }}"
    continue_on_timeout: true
    timeout: "00:00:30"
  - wait_template: >-
      {{ is_state('media_player.adam_s_room_one', 'paused') or
      is_state('media_player.adam_s_room_one', 'idle') }}
    continue_on_timeout: true
  - service: sonos.restore
    data:
      with_group: true
      entity_id: media_player.adam_s_room_one
  - delay:
      hours: 0
      minutes: 0
      seconds: 2
      milliseconds: 0
mode: single
icon: mdi:robot

If anyone knows how I would fix it so that my play_media does not repeat and just plays it once that would be awesome!

Try with your need

alias: Play Repeat Music
sequence:

  • service: input_boolean.turn_on
    data: {}
    target:
    entity_id: input_boolean.play_repeat_music

  • service: input_boolean.turn_off
    data: {}
    target:
    entity_id: input_boolean.play_shuffle_music

  • repeat:
    while:
    - condition: template
    value_template: “{{ repeat.index <= states.sensor.music.attributes.number_of_files }}”
    sequence:
    - service: media_player.turn_on
    data: {}
    target:
    entity_id: >-
    {% if states(‘input_select.choose_speaker_for_music’) == ‘Loa
    Phòng Bếp’ -%}
    media_player.googlehome4128
    {% elif states(‘input_select.choose_speaker_for_music’) == ‘Loa
    Phòng Ngủ’ -%}
    media_player.phong_ng_speaker
    {% elif states(‘input_select.choose_speaker_for_music’) == ‘Loa
    Phòng Khách’ -%}
    media_player.phong_khach_speaker
    {%- else -%}
    media_player.googlehome4128, media_player.phong_ng_speaker, media_player.phong_khach_speaker
    {%- endif %}
    - service: media_player.play_media
    data_template:
    media_content_type: audio/mp3
    media_content_id: >-
    media-source://media_source/local{{(states.sensor.music.attributes.file_list[repeat.index
    - 1])[6:]}}
    entity_id: >-
    {% if states(‘input_select.choose_speaker_for_music’) == ‘Loa
    Phòng Bếp’ -%}
    media_player.googlehome4128
    {% elif states(‘input_select.choose_speaker_for_music’) == ‘Loa
    Phòng Ngủ’

          -%}
            media_player.phong_ng_speaker
          {% elif states('input_select.choose_speaker_for_music') == 'Loa
          Phòng Khách'
    
          -%}
            media_player.phong_khach_speaker
          {%- else -%}
            media_player.googlehome4128, media_player.phong_ng_speaker, media_player.phong_khach_speaker
          {%- endif %}
    - service: input_number.set_value
      data:
        value: "{{ repeat.index }}"
      target:
        entity_id: input_number.index_when_play_repeat_music
    - service: input_number.set_value
      data:
        value: >-
          {% if states('input_select.choose_speaker_youtube') == 'Loa Phòng
          Bếp' -%}
            {{ state_attr('media_player.googlehome4128','volume_level')|round(2) }}
          {%- elif states('input_select.choose_speaker_youtube') == 'Loa
          Phòng Ngủ' -%}
            {{ state_attr('media_player.phong_ng_speaker','volume_level')|round(2) }}
          {%- elif states('input_select.choose_speaker_youtube') == 'Loa
          Phòng Khách' -%}
            {{ state_attr('media_player.phong_khach_speaker','volume_level')|round(2) }}
          {%- else -%}
            0.5
          {%- endif %}
      target:
        entity_id: input_number.volume_music_slider
    - delay:
        hours: 0
        minutes: 0
        seconds: 11
        milliseconds: 0
    - wait_template: >-
        {% if states('input_select.choose_speaker_for_music') == 'Loa Phòng
        Bếp' -%}
          {{ is_state('media_player.googlehome4128','idle') }}
        {%- elif states('input_select.choose_speaker_for_music') == 'Loa
        Phòng Ngủ' -%}
          {{ is_state('media_player.phong_ng_speaker','idle') }}
        {%- elif states('input_select.choose_speaker_for_music') == 'Loa
        Phòng Khách' -%}
          {{ is_state('media_player.phong_khach_speaker','idle') }}
        {%- else -%}
          {{ is_state('media_player.googlehome4128', 'idle') and  is_state('media_player.phong_ng_speaker', 'idle') and  is_state('media_player.phong_khach_speaker', 'idle')  }}
        {%- endif %}
    

mode: single
icon: mdi:repeat-variant