We have multiple Chromecast devices that are connected to a single Spotify account, which mostly works well. However, there are instances when the music gets interrupted because someone started playing on another device. Although not a big problem, it can be annoying. To mitigate this, we have an alternative solution of playing music from our local Plex server, which eliminates the interruption issue. I have explored creating an automation that detects Spotify interruption caused by another device’s playback and replaces it with music from our local Plex server.
I built this automation with the help of ChatGPT, which has proven to be efficient in using jinja2 templates.
Feel free to re-use/comment.
alias: Spotify double usage interruption
description: Detect if Spotify is launched while it was already playing on another device
trigger:
- platform: state
entity_id:
- media_player.audio_chromecast
- media_player.hub
- media_player.chromecast
- media_player.nest_wifi
to: playing
condition:
- condition: template
value_template: "{{ (state_attr(trigger.entity_id, 'app_name')) == 'Spotify' }}"
enabled: true
action:
- service: media_player.play_media
data:
entity_id: >
{% set media_players = states | selectattr("entity_id", "match", "^media_player.*") | list %}
{% set playing_media_players = media_players | selectattr('state','in',['playing','paused']) | list %}
{% set other_playing_media_players = playing_media_players | rejectattr("entity_id", "in",trigger.entity_id) | rejectattr("entity_id", "match","^media_player.mass*") | list %}
{% set other_playing_media_players_spotify = other_playing_media_players | selectattr("attributes.app_name", "eq", "Spotify") | list %}
{% for device in other_playing_media_players_spotify %}
{{device.entity_id}}
{% endfor %}
media_content_id: >-
plex://{ "playlist_name": "{{states('input_select.PlexPlaylist')}}",
"shuffle": "1" }
media_content_type: PLAYLIST
mode: single