We’re pleased to have been able to add some new features to the Squeezebox integration in 2025.6 and we wanted to share a little more information on these, in part because a couple of them didn’t make it into the release notes.
Update Platform @pssc added a new update platform which adds entities to the LMS service which show if there are updates available your LMS and/or for your plugins.
Alarm Support
One feature that’s been requested for a while is support for alarms. In 2025.6, we’ve introduced a switch platform and initial support for alarms. Initially, this is just support for turning individual alarms on and off, and the ability to disable or enable all alarms for a device.
We’re continuing discussions with the architecture team about the right way to extend the functionality and fully implement alarms, but for now hopefully you’ll find this useful.
Search Media
In 2025.5 a new action, search_media, was added to the media_player and is now available for squeezebox media players. This action allows you to search the media library and will be particularly useful in implementing scripts and intents - i.e. the ability to search for a particular piece of media before then playing it.
You can specify a content type to choose where to search (e.g. albums, playlists, favorites etc.), and/or a media class filter to filter the result set (e.g. album, playlist etc.).
One of the uses of search_media will of course be to search for something and then play it. I wrote a script to make this easier, which you can call from other scripts and automations. It’s a bit more complex because searching for favorites returns a media_content_id which can’t be played directly, so instead we’re using browse_media rather than search_media for favorites.
sequence:
- choose:
- conditions:
- condition: template
value_template: "{{ media_content_type == 'favorites' }}"
sequence:
- action: media_player.browse_media
data:
media_content_type: "{{ media_content_type }}"
target:
entity_id: "{{ media_player }}"
response_variable: search_result
default:
- action: media_player.search_media
data:
search_query: "{{ search_query }}"
media_content_type: "{{ media_content_type }}"
target:
entity_id: "{{ media_player }}"
response_variable: search_result
- choose:
- conditions:
- condition: template
value_template: >
{% if media_content_type == 'favorites' %}
{% set result = search_result[media_player].children %}
{% else %}
{% set result = search_result[media_player].result %}
{% endif %}
{% if match_type == 'exact' or media_content_type == 'favorites'
%}
{% set match = result
| selectattr('title', 'equalto', search_query)
| list | first %}
{% else %}
{% set match = result
| list | first %}
{% endif %}
{{ match.media_content_id is defined }}
sequence:
- variables:
matched_item: >
{% if media_content_type == 'favorites' %}
{% set result = search_result[media_player].children %}
{% else %}
{% set result = search_result[media_player].result %}
{% endif %}
{% if match_type == 'exact' or media_content_type == 'favorites'
%}
{% set match = result
| selectattr('title', 'equalto', search_query)
| list | first %}
{% else %}
{% set match = result | list | first %}
{% endif %}
{% if match %}
{% set media_type = match.media_content_type.value if match.media_content_type.value is defined else match.media_content_type %}
{{
{
'title': match.title,
'media_content_id': match.media_content_id,
'media_content_type': media_type
}
}}
{% else %}
{{ none }}
{% endif %}
- target:
entity_id: "{{ media_player }}"
data:
media_content_id: "{{ matched_item['media_content_id'] }}"
media_content_type: "{{ matched_item['media_content_type'] }}"
action: media_player.play_media
default:
- data:
title: Music Search Failed
message: >
Could not find an item matching '{{ search_query }}' in {{
media_content_type }}. Available matches: {{
search_result[media_player].result | map(attribute='title') | list
}}
action: notify.persistent_notification
alias: Browse/Search and Play
description: >-
This script searches the LMS media library for an item which matches the
specified conditions, and then plays the item on the specified Squeezebox
fields:
search_query:
selector:
text: null
name: Search Query
description: String for which to search
required: true
media_content_type:
selector:
select:
options:
- Albums
- Artists
- Favorites
- Playlists
- Tracks
- Genres
- Album Artists
name: Media Content Type
description: The type of media for which to search
required: true
media_player:
selector:
entity:
filter:
- integration: squeezebox
domain: media_player
name: Squeezebox Media Player
description: The Squeezebox player's entity
required: true
match_type:
selector:
select:
options:
- label: Exact Match
value: exact
- label: First Match
value: first
name: Match Type
description: Should the search look for an exact match, or the first similar match?
default: exact
required: true
As you’ll see, I’ve added fields to the script, so you can call it from other scripts and automations