Voice Music control with SpotifyPlus and HA Voice PE

Hi everyone!

I’ve built a voice-controlled Spotify automation using my new Home Assistant Voice PE and the Spotify Plus (SpotifyPlus Integration Big thanks to @thlucas ) integration. It lets you:

  • Play artists, songs, or playlists via natural commands (e.g., “Play the playlist ‘Workout’”, “Play party music”, “Play Coldplay”, “Start Apache radio”)
  • Control playback (pause, skip, shuffle, adjust volume).
  • Play curated content like Weekly or Favorite Songs or Podcasts

I have the following automations in place:

  • Voice: Play playlist
  • Voice: Change Volume
  • Voice: Play Radio from
  • Voice: Shuffle Playback
  • Voice: Play Podcast
  • Voice: Play Spotify
  • Voice: Pause Spotify
  • Voice: Play Music from
  • Voice: Next Song
  • Voice: Play Spotify Weekly
  • Voice: Play Song
  • Voice: Like Current Song
  • Voice: Play Spotify and Favorite Song

Example: Playlist v2

Command examples:

  • “Play the playlist ‘Chill Vibes’.”
  • “Start the playlist ‘Workout’.”
  • “Play ‘Party’ music on shuffle.”
  • “Play something else”

Here’s the concept for the “Voice: Play playlist” automation in German language:

alias: "Voice: Spiele Playlist - v2"
description: ""
triggers:
  - trigger: conversation
    command:
      - >-
        Spiel[e] [die] [eine] Playlist [mit] {playlist} [Musik] [in zufälliger
        Reihenfolge] [zufällig]
      - >-
        Starte [die] [eine] Playlist [mit] {playlist} [Musik] [in zufälliger
        Reihenfolge] [zufällig]
      - >-
        Leg [die] [eine] Playlist [mit] {playlist} [Musik] [in zufälliger
        Reihenfolge] [zufällig] auf
      - >-
        Ich möchte [die] [eine] Playlist [mit] {playlist} [Musik] [in zufälliger
        Reihenfolge] [zufällig] hören
      - >-
        Spiel [bitte] [die] [eine] Playlist [mit] {playlist} [Musik] [in
        zufälliger Reihenfolge] [zufällig]
      - >-
        Lass [uns] [die] [eine] Playlist [mit] {playlist} [Musik] [in zufälliger
        Reihenfolge] [zufällig] hören
      - Spiel[e] [eine] andere Playlist
      - Spiel[e] {playlist} [Musik]
      - Spiel[e] andere Musik
      - >-
        Spiel[e] [die] Playlist {playlist} [in zufälliger Reihenfolge]
        [zufällig]
      - Spiel[e] {playlist} [in zufälliger Reihenfolge] [zufällig]
      - Andere Playlist
      - Andere Musik
conditions:
  - condition: template
    value_template: |
      {{ not ('spotify' in trigger.sentence.lower() or
               'weekly' in trigger.sentence.lower() or
               'radio' in trigger.sentence.lower() or               
               'lieblingssongs' in trigger.sentence.lower() or
               'lieblingsmusik' in trigger.sentence.lower() or
               'podcast' in trigger.sentence.lower() or
               'track' in trigger.sentence.lower() or
               'lied' in trigger.sentence.lower() or
               'musik von' in trigger.sentence.lower() or  
               'songs von' in trigger.sentence.lower() or  
               'Nachrichten' in trigger.sentence.lower() or  
               'radiosender' in trigger.sentence.lower() or
               'track' in trigger.sentence.lower() or
               'song' in trigger.sentence.lower()) }}
actions:
  - action: script.play_spotify_on_lt12b_source
    metadata: {}
    data: {}
  - choose:
      - conditions:
          - condition: template
            value_template: >-
              {{ 'zufällig' in trigger.sentence.lower() or 'zufälliger
              reihenfolge' in trigger.sentence.lower() }}
        sequence:
          - data:
              entity_id: media_player.spotifyplus_lt12b
              shuffle: true
            action: media_player.shuffle_set
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ 'andere' in trigger.sentence.lower() }}"
        sequence:
          - data:
              entity_id: input_number.voice_spotify_last_search_index
              value: >-
                {{ (states('input_number.voice_spotify_last_search_index') | int
                + 1) % 10 }}
            action: input_number.set_value
          - action: spotifyplus.search_playlists
            metadata: {}
            data:
              entity_id: media_player.spotifyplus_lt12b
              criteria: >-
                {{ states('input_text.voice_spotify_last_search') |
                regex_replace('zufällig|in zufälliger reihenfolge', '',
                ignorecase=True) }}
              limit: 10
            response_variable: resultplaylist
    default:
      - action: input_number.set_value
        metadata: {}
        data:
          value: 0
        target:
          entity_id: input_number.voice_spotify_last_search_index
      - data:
          entity_id: input_text.voice_spotify_last_search
          value: >-
            {{ (trigger.slots.playlist if trigger.slots and 'playlist' in
            trigger.slots else 'Party') | regex_replace('zufällig|in zufälliger
            reihenfolge', '', ignorecase=True) }}
        action: input_text.set_value
      - action: spotifyplus.search_playlists
        metadata: {}
        data:
          entity_id: media_player.spotifyplus_lt12b
          criteria: >-
            {{ (trigger.slots.playlist if trigger.slots and 'playlist' in
            trigger.slots else 'Party') | regex_replace('zufällig|in zufälliger
            reihenfolge', '', ignorecase=True) }}
          limit: 10
        response_variable: resultplaylist
  - action: media_player.play_media
    target:
      entity_id: media_player.spotifyplus_lt12b
    data:
      media_content_id: >-
        spotify:playlist:{{
        resultplaylist['result']['items'][states('input_number.voice_spotify_last_search_index')
        | int]['id'] }}
      media_content_type: playlist
mode: single

English translation, not tested:

alias: "Voice: Play Playlist - v2"
description: ""
triggers:
  - trigger: conversation
    command:
      - >-
        Play [the] [a] playlist [with] {playlist} [music] [in random order]
        [randomly]
      - >-
        Start [the] [a] playlist [with] {playlist} [music] [in random order]
        [randomly]
      - >-
        Put on [the] [a] playlist [with] {playlist} [music] [in random order]
        [randomly]
      - >-
        I want to listen to [the] [a] playlist [with] {playlist} [music] [in
        random order] [randomly]
      - >-
        Please play [the] [a] playlist [with] {playlist} [music] [in random
        order] [randomly]
      - >-
        Let's listen to [the] [a] playlist [with] {playlist} [music] [in random
        order] [randomly]
      - Play [a] different playlist
      - Play {playlist} [music]
      - Play different music
      - >-
        Play [the] playlist {playlist} [in random order] [randomly]
      - Play {playlist} [in random order] [randomly]
      - Different playlist
      - Different music
conditions:
  - condition: template
    value_template: |
      {{ not ('spotify' in trigger.sentence.lower() or
               'weekly' in trigger.sentence.lower() or
               'radio' in trigger.sentence.lower() or               
               'favorite songs' in trigger.sentence.lower() or
               'favorite music' in trigger.sentence.lower() or
               'podcast' in trigger.sentence.lower() or
               'track' in trigger.sentence.lower() or
               'song' in trigger.sentence.lower() or
               'music by' in trigger.sentence.lower() or  
               'songs by' in trigger.sentence.lower() or  
               'news' in trigger.sentence.lower() or  
               'radio station' in trigger.sentence.lower() or
               'track' in trigger.sentence.lower() or
               'song' in trigger.sentence.lower()) }}
actions:
  - action: script.play_spotify_on_lt12b_source
    metadata: {}
    data: {}
  - choose:
      - conditions:
          - condition: template
            value_template: >-
              {{ 'randomly' in trigger.sentence.lower() or 'in random order' in
              trigger.sentence.lower() }}
        sequence:
          - data:
              entity_id: media_player.spotifyplus_lt12b
              shuffle: true
            action: media_player.shuffle_set
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ 'different' in trigger.sentence.lower() }}"
        sequence:
          - data:
              entity_id: input_number.voice_spotify_last_search_index
              value: >-
                {{ (states('input_number.voice_spotify_last_search_index') | int
                + 1) % 10 }}
            action: input_number.set_value
          - action: spotifyplus.search_playlists
            metadata: {}
            data:
              entity_id: media_player.spotifyplus_lt12b
              criteria: >-
                {{ states('input_text.voice_spotify_last_search') |
                regex_replace('randomly|in random order', '',
                ignorecase=True) }}
              limit: 10
            response_variable: resultplaylist
    default:
      - action: input_number.set_value
        metadata: {}
        data:
          value: 0
        target:
          entity_id: input_number.voice_spotify_last_search_index
      - data:
          entity_id: input_text.voice_spotify_last_search
          value: >-
            {{ (trigger.slots.playlist if trigger.slots and 'playlist' in
            trigger.slots else 'Party') | regex_replace('randomly|in random
            order', '', ignorecase=True) }}
        action: input_text.set_value
      - action: spotifyplus.search_playlists
        metadata: {}
        data:
          entity_id: media_player.spotifyplus_lt12b
          criteria: >-
            {{ (trigger.slots.playlist if trigger.slots and 'playlist' in
            trigger.slots else 'Party') | regex_replace('randomly|in random
            order', '', ignorecase=True) }}
          limit: 10
        response_variable: resultplaylist
  - action: media_player.play_media
    target:
      entity_id: media_player.spotifyplus_lt12b
    data:
      media_content_id: >-

You will need two helpers:

input_text:
  voice_spotify_last_search:
    name: "Last Playlist Search"
    initial: ""

and

input_number:
  voice_spotify_last_search_index:
    name: "Last Playlist Search Index"
    min: 0
    max: 10
    step: 1
    mode: box

I hope the concept is helpful for some of you.

Best,
Axel

10 Likes

Hey @brix29,

Thats some great work!
I’ve been looking for a smooth setup to control Spotify with Voice Assist and found Music Assistant to be a bit to slow for my taste.

Your solution with SpotifyPlus looks a lot more like what I’d like to end up with.

Would you mind sharing your other Automations?

Hi Sven,

Thanks for your feedback. Very much appreciated. I just uploaded the automation file to Github:

Best,
Axel

1 Like

And yes. It’s very fast. :rocket:

Just uploaded a new version. Multiple automations were combined to increase reliability. Enjoy.

1 Like

Thanks for your work, is it also possible to manually add it to my automations so no need to add second automations yaml. or are you working on a blueprint in parallel?

I’m not familiar with blueprints, but would definitely be the better option. :wink:

Copy & paste the code in your automations.yaml and minor amends (player entity, Spotify connect source name, Spotify ID) should work for you.

Great i will do so, what need’s to be changed.
i changed the media_player.spotifyplus_yourID but i get the following error:
Fehler: There is no active Spotify player device, and a default player device was not configured.
If i make one as a active player in the app it works.

Have you configured your Spotify Connect source in the automation?
It will be the Spotify device you would like to use.
You can even set a default source in the SpotifyPlus settings as a fallback.

I have many Spotify Connect sources (PC, FireTV, Smartphone). That’s why I use a script to select the right source first. (script.play_spotify_on_lt12b_source)

The fallback option is not working for me (default source in Spotify plus integration)
On which points in the automations do I need to add my default player?

Check out the code of the script script.play_spotify_on_yourID_source on GitHub.
It checks the Spotify source and sets it, if necessary.

Got the sequence also but it gives me follwing error:
Fehler: SAM0001E - An unhandled exception occured while processing method “PlayerSetShuffleMode”. UPnP Error 712 received: Play mode not supported from 192.168.17.124
And now this:
Ausgeführt: 22. Februar 2025 um 08:33:02
Fehler: required key not provided @ data[‘source’]

Thanks a lot for your effort! Ilike it a lot and its working fine for me.
Already posted in your github project, but maybe the disussion is the better spot for this :slight_smile:

Did you think about adding source selection by voice?

I really like your project and was playing around a litte bit with source selection.
Maybe a little inspiration for you if you thought about that already. :slight_smile:

I added a script “spotify_quelle_auf_geraet” (could replace yours):

sequence:
  - variables:
      Geraet_Such: "{{geraet}}"
      Geraet_Ziel: >-
        {{ state_attr('media_player.spotifyplus_ID', 'source_list') | list | select('search', Geraet_Such) | first }}
  - if:
      - condition: template
        value_template: "{{Geraet_Ziel|count >0 and not Geraet_Ziel=='' }} "
    then:
      - data:
          source: "{{Geraet_Ziel}}"
        action: media_player.select_source
        target: entity_id: media_player.spotifyplus_ID
    else:
      - data:
          source: Enter your default
        action: media_player.select_source
        target: entity_id: media_player.spotifyplus_ID
alias: "Spotify: Gerät einstellen"

The automation triggers could be modified like:
Spiele [mir] Musik von {artist} [(auf|im) {geraet}]

With the following action being like:

if:
  - condition: template
    value_template: >-
      {{ "auf" in trigger.sentence.lower() or "im" in trigger.sentence.lower()}}
then:
  - action: script.spotify_quelle_auf_geraet
    data:
      geraet: "{{ trigger.slots.geraet }}"
1 Like

Hi Sascha, that’s cool! Just added you to the Github project.

1 Like

I think this is related to the SpotifyPlus integration and not the automations. Better ask here:

1 Like

Seems i got it working by adding the device name and not the ID, that was my issue.
Thanks for your support.

Are the automations also working with grouped Speakers?

2 Likes

Sounds good! I haven’t tried grouped speakers yet. If multiroom is supported by SpotifyPlus, it shouldn’t be a problem.

Let us know, if you get it running.

Hi guys,
I hope that you can help me :slight_smile:
Just started with Home Assistant, so I’m really not good in all that.
I installed HACS and then SpotifyPlus.
It appears in my voice assistant area as well.
Now I tried to upload the script via Spotify Plus - create new script - edit in YAML.
I adjusted the entity IDs like mentioned in README.
As well, I added the two helpers mentioned in README in my configuration.yaml.
Though if I try to save, I get the following error:
Message malformed: extra keys not allowed @ data[‘0’]
(The script I tried to save is the exact same one as in GitHub just with entity_id media_player.spotifyplus_1133041XXX)
Does anyone know what I did wrong here?
Thanks a lot!

Hi Katha,

Pls share your code… otherwise it will be difficult to help you. :wink:

Cheers,
Axel

Hi brix,

Sorry, that’s my code :slight_smile:
(I x-ed the last 3 digits of my Spotify account number here).
It’s actually apart from the number otherwise 100% the code for the German version on the Git-page.

- id: '1739227579468'
  alias: 'Voice: Spotify Music Control'
  description: Unified automation for playing music, playlists, radio, podcasts, and
    more.
  triggers:
  - trigger: conversation
    command:
    - Spiele [das] Radio von {artist}
    - Starte [das] Radio von {artist}
    - Lass [uns] [das] Radio von {artist} hören
    - Ich möchte [das] Radio von {artist} hören
    - Spiele [bitte] [das] Radio von {artist}
    - Leg [das] Radio von {artist} auf
    - Spiel [das] Künstler-Radio von {artist}
    - Spiele [den] Song {song}
    - Starte [den] Song {song}
    - Leg [den Song] {song} auf
    - Spiele {playlist} Musik
    - Starte {playlist} Musik
    - Spiele [das] Lied {song}
    - Starte [das] Lied {song}
    - Spiele [die] Playlist {playlist}
    - Starte [die] Playlist {playlist}
    - Spiele [den] Podcast {podcast}
    - Starte [den] Podcast {podcast}
    - Spiele [mir] Musik von {artist}
    - '[Spiele] [etwas] anderes'
    - Spiele Weekly
    - Starte Weekly
  conditions: []
  actions:
  - action: script.play_spotify_on_lt12b_source
    metadata: {}
    data: {}
    continue_on_error: true
  - choose:
    - conditions:
      - condition: template
        value_template: '{{ "podcast" in trigger.sentence.lower() }}'
      sequence:
      - action: spotifyplus.player_set_shuffle_mode
        metadata: {}
        data:
          state: false
          entity_id: media_player.spotifyplus_1133041XXX
          delay: 1
        continue_on_error: true
      - action: spotifyplus.search_shows
        data:
          entity_id: media_player.spotifyplus_1133041XXX
          criteria: '{{ trigger.slots.podcast }}'
          limit: 1
        response_variable: resultpodcast
      - action: media_player.play_media
        target:
          entity_id: media_player.spotifyplus_1133041XXX
        data:
          media_content_id: spotify:show:{{ resultpodcast["result"]["items"][0]["id"]
            }}
          media_content_type: podcast
      alias: Podcast
    - conditions:
      - condition: template
        value_template: '{{ "weekly" in trigger.sentence.lower() }}'
      sequence:
      - action: media_player.play_media
        target:
          entity_id: media_player.spotifyplus_1133041XXX
        data:
          media_content_id: spotify:playlist:37abcdefghijkl
          media_content_type: playlist
      alias: Weekly
    - conditions:
      - condition: template
        value_template: '{{ "radio" in trigger.sentence.lower() }}'
      sequence:
      - action: spotifyplus.player_set_shuffle_mode
        metadata: {}
        data:
          state: true
          entity_id: media_player.spotifyplus_1133041XXX
          delay: 1
        continue_on_error: true
      - action: spotifyplus.search_artists
        data:
          entity_id: media_player.spotifyplus_1133041XXX
          criteria: '{{ trigger.slots.artist }}'
        response_variable: resultartist
      - action: spotifyplus.search_playlists
        data:
          entity_id: media_player.spotifyplus_1133041XXX
          criteria: '{{ trigger.slots.artist }} Radio'
          limit: 1
        response_variable: resultplaylist
      - action: media_player.play_media
        target:
          entity_id: media_player.spotifyplus_1133041XXX
        data:
          media_content_id: spotify:artist:{{ resultartist["result"]["items"][0]["id"]
            }}
          media_content_type: artist
      alias: Radio
    - conditions:
      - condition: template
        value_template: '{{ ''musik'' in trigger.sentence.lower() and ''musik von''
          not in trigger.sentence.lower() }}'
      sequence:
      - action: spotifyplus.player_set_shuffle_mode
        metadata: {}
        data:
          state: true
          entity_id: media_player.spotifyplus_1133041XXX
          delay: 1
        continue_on_error: true
        alias: Zufällige Wiedergabe
      - choose:
        - conditions:
          - condition: template
            value_template: '{{ ''zufällig'' in trigger.sentence.lower() or ''zufälliger
              reihenfolge'' in trigger.sentence.lower() }}'
          sequence:
          - data:
              entity_id: media_player.spotifyplus_1133041XXX
              shuffle: true
            action: media_player.shuffle_set
        enabled: false
      - action: input_number.set_value
        metadata: {}
        data:
          value: 0
        target:
          entity_id: input_number.voice_spotify_last_search_index
      - data:
          entity_id: input_text.voice_spotify_last_search
          value: '{{ (trigger.slots.playlist if trigger.slots and ''playlist'' in
            trigger.slots else ''Party'') | regex_replace(''zufällig|in zufälliger
            reihenfolge'', '''', ignorecase=True) }}'
        action: input_text.set_value
      - action: spotifyplus.search_playlists
        metadata: {}
        data:
          entity_id: media_player.spotifyplus_1133041XXX
          criteria: '{{ (trigger.slots.playlist if trigger.slots and ''playlist''
            in trigger.slots else ''Party'') | regex_replace(''zufällig|in zufälliger
            reihenfolge'', '''', ignorecase=True) }}'
          limit: 10
        response_variable: resultplaylist
      - action: media_player.play_media
        target:
          entity_id: media_player.spotifyplus_1133041XXX
        data:
          media_content_id: spotify:playlist:{{ resultplaylist['result']['items'][states('input_number.voice_spotify_last_search_index')
            | int]['id'] }}
          media_content_type: playlist
      alias: Genre
    - conditions:
      - condition: template
        value_template: '{{ "song" in trigger.sentence.lower() or "lied" in trigger.sentence.lower()
          }}'
      sequence:
      - action: spotifyplus.search_tracks
        data:
          entity_id: media_player.spotifyplus_1133041XXX
          criteria: '{{ trigger.slots.song }}'
          limit: 1
        response_variable: resultsong
      - action: media_player.play_media
        target:
          entity_id: media_player.spotifyplus_1133041XXX
        data:
          media_content_id: spotify:track:{{ resultsong["result"]["items"][0]["id"]
            }}
          media_content_type: track
      alias: Song
    - conditions:
      - condition: template
        value_template: '{{ "playlist" in trigger.sentence.lower() or "anderes" in
          trigger.sentence.lower() }}'
      sequence:
      - action: spotifyplus.player_set_shuffle_mode
        metadata: {}
        data:
          state: true
          entity_id: media_player.spotifyplus_1133041XXX
          delay: 1
        alias: Zufällige Wiedergabe
      - choose:
        - conditions:
          - condition: template
            value_template: '{{ ''zufällig'' in trigger.sentence.lower() or ''zufälliger
              reihenfolge'' in trigger.sentence.lower() }}'
          sequence:
          - data:
              entity_id: media_player.spotifyplus_1133041XXX
              shuffle: true
            action: media_player.shuffle_set
        enabled: false
      - choose:
        - conditions:
          - condition: template
            value_template: '{{ ''andere'' in trigger.sentence.lower() }}'
          sequence:
          - data:
              entity_id: input_number.voice_spotify_last_search_index
              value: '{{ (states(''input_number.voice_spotify_last_search_index'')
                | int + 1) % 10 }}'
            action: input_number.set_value
          - action: spotifyplus.search_playlists
            metadata: {}
            data:
              entity_id: media_player.spotifyplus_1133041XXX
              criteria: '{{ states(''input_text.voice_spotify_last_search'') | regex_replace(''zufällig|in
                zufälliger reihenfolge'', '''', ignorecase=True) }}'
              limit: 10
            response_variable: resultplaylist
        default:
        - action: input_number.set_value
          metadata: {}
          data:
            value: 0
          target:
            entity_id: input_number.voice_spotify_last_search_index
        - data:
            entity_id: input_text.voice_spotify_last_search
            value: '{{ (trigger.slots.playlist if trigger.slots and ''playlist'' in
              trigger.slots else ''Party'') | regex_replace(''zufällig|in zufälliger
              reihenfolge'', '''', ignorecase=True) }}'
          action: input_text.set_value
        - action: spotifyplus.search_playlists
          metadata: {}
          data:
            entity_id: media_player.spotifyplus_1133041XXX
            criteria: '{{ (trigger.slots.playlist if trigger.slots and ''playlist''
              in trigger.slots else ''Party'') | regex_replace(''zufällig|in zufälliger
              reihenfolge'', '''', ignorecase=True) }}'
            limit: 10
          response_variable: resultplaylist
      - action: media_player.play_media
        target:
          entity_id: media_player.spotifyplus_1133041XXX
        data:
          media_content_id: spotify:playlist:{{ resultplaylist['result']['items'][states('input_number.voice_spotify_last_search_index')
            | int]['id'] }}
          media_content_type: playlist
      alias: Playlists oder anderes
    - conditions: []
      sequence:
      - action: spotifyplus.search_artists
        data:
          entity_id: media_player.spotifyplus_1133041XXX
          criteria: '{{ trigger.slots.artist }}'
        response_variable: resultspotify
      - action: media_player.play_media
        target:
          entity_id: media_player.spotifyplus_1133041XXX
        data:
          media_content_id: spotify:artist:{{ resultspotify["result"]["items"][0]["id"]
            }}
          media_content_type: artist
      alias: Play only
  mode: single
- id: '1730550572695'
  alias: 'Voice: Spiele Spotify und Lieblingssongs'
  description: ''
  triggers:
  - trigger: conversation
    command:
    - Starte meine Lieblingssongs
    - Spiele meine Lieblingssongs
    - Spiele meine Lieblingsmusik
  conditions: []
  actions:
  - action: script.play_spotify_on_yourID_source
    data: {}
  - action: spotifyplus.search_playlists
    metadata: {}
    data:
      entity_id: media_player.spotifyplus_1133041XXX
      criteria: '{{ trigger.slots.playlist }}'
      limit: 1
    response_variable: resultplaylist
    enabled: false
  - action: media_player.play_media
    target:
      entity_id: media_player.spotifyplus_1133041XXX
    data:
      media_content_id: spotify:user:1111111111:collection
      media_content_type: playlist
  mode: single
- id: '1730553443702'
  alias: 'Voice: Lautstärke ändern'
  description: Adjust the volume or set it to a specific percentage
  triggers:
  - trigger: conversation
    command:
    - Leiser
    - Lauter
    - Mach leiser
    - Mach lauter
    - Viel leiser
    - Viel lauter
    - Lautstärke auf {volume}%
    - Volumen auf {volume}%
    - Volle Lautstärke
    - Maximale Lautstärke
    - Mach auf volle Lautstärke
    - Dreh voll auf
  conditions: []
  actions:
  - choose:
    - conditions:
      - '{{ ''leiser'' in trigger.sentence.lower() }}'
      sequence:
      - target:
          entity_id: media_player.spotifyplus_1133041XXX
        action: media_player.volume_down
      - target:
          entity_id: media_player.spotifyplus_1133041XXX
        action: media_player.volume_down
      - target:
          entity_id: media_player.spotifyplus_1133041XXX
        action: media_player.volume_down
    - conditions:
      - '{{ ''lauter'' in trigger.sentence.lower() }}'
      sequence:
      - target:
          entity_id: media_player.spotifyplus_1133041XXX
        action: media_player.volume_up
      - target:
          entity_id: media_player.spotifyplus_1133041XXX
        action: media_player.volume_up
      - target:
          entity_id: media_player.spotifyplus_1133041XXX
        action: media_player.volume_up
    - conditions:
      - '{{ ''volle lautstärke'' in trigger.sentence.lower() or ''maximale lautstärke''
        in trigger.sentence.lower() or ''dreh voll auf'' in trigger.sentence.lower()
        }}'
      sequence:
      - target:
          entity_id: media_player.spotifyplus_1133041XXX
        data:
          volume_level: 1
        action: media_player.volume_set
    - conditions:
      - '{{ ''lautstärke auf'' in trigger.sentence.lower() }}'
      sequence:
      - target:
          entity_id: media_player.spotifyplus_1133041XXX
        data:
          volume_level: '{{ trigger.slots.volume | int / 100 }}'
        action: media_player.volume_set
  mode: single
- id: '1730553837629'
  alias: 'Voice: Nächstes Lied'
  description: Skip to the next track on Spotify
  triggers:
  - trigger: conversation
    command:
    - Nächstes Lied
    - Nächster Song
    - Skip
    - Mach weiter
    - Weiter
    - Next
  conditions: []
  actions:
  - target:
      entity_id: media_player.spotifyplus_1133041XXX
    action: media_player.media_next_track
  mode: single
- id: '1730553973956'
  alias: 'Voice: Zufällige Wiedergabe'
  description: Toggle shuffle on or off for Spotify
  triggers:
  - trigger: conversation
    command:
    - Zufällige Wiedergabe an
    - Shuffle an
    - Zufällige Wiedergabe aus
    - Shuffle aus
    - Zufällige Wiedergabe
  conditions: []
  actions:
  - choose:
    - conditions:
      - '{{ ''an'' in trigger.sentence.lower() }}'
      sequence:
      - target:
          entity_id: media_player.spotifyplus_1133041XXX
        data:
          shuffle: true
        action: media_player.shuffle_set
    - conditions:
      - condition: template
        value_template: '{{ ''aus'' in trigger.sentence.lower() }}'
      sequence:
      - target:
          entity_id: media_player.spotifyplus_1133041XXX
        data:
          shuffle: false
        action: media_player.shuffle_set
  mode: single
- id: '1730554056789'
  alias: 'Voice: Spotify abspielen / Play'
  description: ''
  triggers:
  - trigger: conversation
    command:
    - Spiele Musik
    - Starte Spotify
    - Spiele Spotify
    - Starte Musik
  conditions: []
  actions:
  - action: script.play_spotify_on_yourID_source
    data: {}
  - action: spotifyplus.search_playlists
    metadata: {}
    data:
      entity_id: media_player.spotifyplus_1133041XXX
      criteria: '{{ trigger.slots.playlist }}'
      limit: 1
    response_variable: resultplaylist
    enabled: false
  - action: media_player.media_play
    target:
      entity_id:
      - media_player.spotifyplus_1133041XXX
    data: {}
  mode: single
- id: '1730625469560'
  alias: 'Voice: Like Current Song'
  description: Like the currently playing song on Spotify
  triggers:
  - trigger: conversation
    command:
    - Ich mag [dieses] [das] Lied
    - Lied liken
    - Gefällt mir [dieses] [das] Lied
    - Song liken
    - Ich mag [den] [diesen] Song
    - Füge [den] [diesen] Song zu meinen Favoriten hinzu
    - Speichere [den] [diesen] Song
    - Song zu meinen Favoriten hinzufügen
    - Speichere [dieses] [das] Lied
    - Dieses Lied zu Favoriten hinzufügen
    - Speichere [diesen] [den] Track
    - Track liken
    - Ich mag [diesen] [den] Track
    - Track speichern
    - Song speichern
    - Lied speichern
    - Song zu Favoriten hinzufügen
    - Füge diesen Track zu meinen Favoriten hinzu
    - Gefällt mir [dieser] [der] Song
    - Dieses Lied speichern
    - like [diesen] [den] Song
  conditions: []
  actions:
  - data:
      entity_id: media_player.spotifyplus_1133041XXX
    action: spotifyplus.save_track_favorites
  mode: single
- id: '1730637071634'
  alias: 'Voice: Pause Spotify'
  description: Pause or stop the Spotify playback
  triggers:
  - trigger: conversation
    command:
    - '[Musik] [Spotify] Pause'
    - '[Musik] [Spotify] Stop'
    - '[Mach] Spotify aus'
    - '[Mach die] Musik aus'
  conditions: []
  actions:
  - target:
      entity_id: media_player.spotifyplus_1133041XXX
    action: media_player.media_pause
  mode: single