All notable changes to this project are listed here.
Change are listed in reverse chronological order (newest to oldest).
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.139.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.138.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.137.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.135.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.134.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.133.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.132.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.131.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.130.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.129.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.128.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.127.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.126.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.125.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.123.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.122. - The above
spotifywebapiPython
package will now return an exception due to the functions being deprecated by the Spotify development team. More information can be found on the Spotify Developer Forum Blog post that was conveyed on November 27, 2024. The following methods will now raise aSpotifyApiError
exception due to the Spotify development team changes:GetArtistRelatedArtists
,GetTrackRecommendations
,GetTrackAudioFeatures
,GetFeaturedPlaylists
,GetCategoryPlaylists
,GetGenres
. The following properties were also marked as deprecated for the same reason:TrackSimplified.PreviewUrl
. - Due to the above chnages made by Spotify, any Algorithmic and Spotify-owned editorial playlists are no longer accessible or have more limited functionality. This means that you can no longer obtain details via the
SpotifyClient.GetPlaylist
andSpotifyClient.GetPlaylistItems
methods for Spotify-owned / generated content (e.g. "Made For You", etc). A404 - Not Found
error will be returned when trying to retrieve information for these playlist types.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.121.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.119.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.114.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.113.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.112.
- Updated service description strings to correct HASSFest validation errors on GitHub.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.106. - Updated underlying
bosesoundtouchapi
package requirement to version 1.0.68.
- Updated
system_health
module to read the contents of the manifest file outside of the event loop. This was causingDetected blocking call to open with args ...
exceptions in the system log when gathering integration health details. - Updated underlying
spotifywebapiPython
package requirement to version 1.0.101.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.99.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.97.
- Added extra state variable:
stp_nowplaying_image_url
. Returns the url of the nowplaying image if one is present; otherwise, None. - Updated underlying
spotifywebapiPython
package requirement to version 1.0.96.
- Added extra state variable:
stp_nowplaying_image_url
. Returns the url of the nowplaying image if one is present; otherwise, None. - Updated underlying
spotifywebapiPython
package requirement to version 1.0.95.
- Updated
media_player.sound_mode
property to hold the same value as thesoundtouchplus_sound_mode
attribute.
- Updated
_OnSoundTouchUpdateEvent_audiodspcontrols
event processing to method. The Bose AudioDspControls update event does not contain the supported audio modes in some circumstances. This is causing the SupportedAudioModes property to be set to None, which in turn causes exceptions in theselect_sound_mode
service. I did not catch this in my testing, as it appears to only happen when the update event occurs which is driven by a change from the device (e.g. by clicking the dialog mode button on the remote). - Updated underlying
spotifywebapiPython
package requirement to version 1.0.88.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.86.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.84.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.83.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.76.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.73.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.71.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.64.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.62.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.61.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.59.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.48.
- Fixed a bug that was causing
ValueError: list.remove(x): x not in list
exceptions to be raised whenever the user changed configuration options for a device. This started appearing with the HA 2024.6.1 release.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.46. - Added the following requirements to manifest.json so that any dependency
ResolutionImpossible
errors can be quickly identified: 'oauthlib>=3.2.2', 'platformdirs>=4.1.0', 'requests>=2.31.0', 'requests_oauthlib>=1.3.1', 'zeroconf>=0.132.2'. This bug bit me in the HA 2024.6.1 release when the HA devs upgraded therequests
dependency to 2.32.3! The System log was showing that thespotifywebapiPython
library was the invalid dependency, but it was not - the REAL culprit was therequests
dependency!
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.44.
- Changed logic to access file system files via a
hass.async_add_executor_job
call. This fixes the issue ofDetected blocking call to open inside the event loop by custom integration 'X' ...
that was introduced with HA 2024.6 release.
- Added extra state variable:
soundtouchplus_websockets_enabled
. Returns true if websocket support is enabled for the device; otherwise, false if device does not support websockets or if websockets were disabled during device setup. - Added extra state variable:
soundtouchplus_polling_enabled
. Returns true if device polling is enabled; otherwise, false. Polling can be a temporary condition, in that it will be enabled if websocket support is enabled and the connection is lost and has not been re-established yet.
- Added extra state variables related to recently played cache feature:
soundtouchplus_recents_cache_enabled
,soundtouchplus_recents_cache_max_items
,soundtouchplus_recents_cache_lastupdated
. - Added service
recent_list_cache
to retrieve the recently played items cache from the file system. - Added service
remove_preset
to remove the specified preset id. - Changed all
media_player.schedule_update_ha_state(force_refresh=True)
calls toschedule_update_ha_state(force_refresh=False)
to improve performance. Suggested by @bdraco, along with an explanation of why. Thanks @bdraco! - Updated underlying
bosesoundtouchapi
package requirement to version 1.0.66.
- Changed all
media_player.async_write_ha_state()
calls toschedule_update_ha_state(force_refresh=True)
calls due to HA 2024.5 release requirements. This fixes the issue of "Failed to call service X. Detected that custom integration 'Y' calls async_write_ha_state from a thread at Z. Please report it to the author of the 'Y' custom integration.". - Added service
get_source_list
to get the current source list configuration of the device. - Modified
media_player.service_preset_list
service to update the extra state attribute namedsoundtouchplus_presets_lastupdated
to correctly reflect the last update datetime. - Modified
media_player.service_recent_list
service to update the extra state attribute namedsoundtouchplus_recents_lastupdated
to correctly reflect the last update datetime. - Added system health information.
- Modified strings.json (and translations) to remove a placeholder inside single quotes that was embedded in a service description. This was causing hass validation step to fail.
- Updated underlying
bosesoundtouchapi
package requirement to version 1.0.59. - Updated Python version from 3.11 to 3.12.3 due to HA 2024.5 release requirements.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.43.
- Corrected a bug in the underlying
bosesoundtouchapi
that was returning an incorrect image url for currently playing media. This incorrect value was being used by themedia_player.media_image_url
value, which caused an incorrect image to be displayed for currently playing media in the media player UI. - Updated underlying
bosesoundtouchapi
package requirement to version 1.0.58.
- Updated Media Browser logic to return an empty
BrowseMedia
object when ignoring Sonos-Card 'favorites' node requests, as a null object was causing numerousBrowse Media should use new BrowseMedia class
log warnings. - Updated underlying
spotifywebapiPython
package requirement to version 1.0.42.
- Updated Media Browser logic to ignore Sonos-Card 'favorites' node requests, as there is no SoundTouch direct equivalent.
- Updated
media_player.media_title
attribute to just return the track name (not theartist - track name
). - Updated underlying
spotifywebapiPython
package requirement to version 1.0.41.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.40.
- Updated
media_player.state
property to return the correct power state when the device has been placed into STANDBY. This corrects a bug that was introduced in v1.0.28, which set the state to STANDBY instead of OFF. - Updated
media_player.media_image_url
to return the content item coverart if present; otherwise, return the nowplaying arturl value. - Added new extra state attribute named
soundtouchplus_nowplaying_isadvertisement
- True if the current source is playing an advertisement; otherwise, False. Note that not all sources support advertisement detection. - Added new extra state attribute named
soundtouchplus_nowplaying_isfavorite
- True if the current source content has been marked as a favorite; otherwise, False. Note that not all sources support favorites. - Updated underlying
bosesoundtouchapi
package requirement to version 1.0.57.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.37.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.36.
- Updated TTS force Google Translate support to use a volume level of zero, which causes the announcement to be played at the current volume level of the SoundTouch device. Prior to the fix, the volume level was set at 30.
- Added TTS force Google Translate support, which will force all TTS play media announcement requests to use Google Translate instead of the called service. This functionality was provided because the SoundTouch device could not play the MP3 file generated by some TTS services due to bitrate limitations. These includes
tts.speak
,tts.cloud_say
, etc.
- Added service
clear_source_nowplayingstatus
to clear the NowPlayingStatus for a given source. - Added service
update_source_nowplayingstatus
to allow updates to the NowPlayingStatus for a given source. - Updated underlying
bosesoundtouchapi
package requirement to version 1.0.56.
- Updated underlying
spotifywebapiPython
package requirement to version 1.0.33.
- Added Spotify music service support. See the SoundTouchPlus Wiki for details on how to customize it.
- Updated
browse_media.py
to add options for SpotifyPlus integration support. Also reorganized the library map structure to easily support more music services in the future.
- Updated
media_player.py
to properly restart websocket event listener when connectivity to a device is lost. Prior to this fix, HA would need to be restarted in order to receive status notifications after a device lost connectivity. It will now gracefully reconnect to the device within 30 seconds. - Updated
__init__.py
with proper support for options update processing. - Updated all modules with better tracing support.
- Updated underlying
bosesoundtouchapi
package requirement to version 1.0.55.
- Added browse media support that allows the user to play Pandora Stations, SoundTouch Presets, and SoundTouch Recently played items from the media browser. See the SoundTouchPlus Wiki for details on how to customize it.
- Added Spotify URI support to the stock
play_media
service. - Updated
media_player.py
with better tracing support. - Updated underlying
bosesoundtouchapi
package requirement to version 1.0.53.
- Added "set_repeat()" support, which allows track play to be repeated (one, all, off).
- Added "set_shuffle()" support, which allows track play to be shuffled (on, off).
- Added "media_seek()" support, which allows playing track position to be changed, as well as display duration, position, and estimated time remaining values.
- Updated underlying
bosesoundtouchapi
package requirement to version 1.0.51.
- Added source title resolution to the
preset_list
andrecent_list
services, which includes a ui-friendly source title value for preset and recent list items. - Added service "Toggle Zone Member" - Toggles the given zone member in the master device's zone. If the member exists in the zone then it is removed; if the member does not exist in the zone, then it is added. A new zone is automatically created if necessary.
- Updated underlying
bosesoundtouchapi
package requirement to version 1.0.48. This also increases PoolManager sizes and fixes the "Connection pool is full, discarding connection ..." warning messages.
- Added
include_empty_slots
argument to thepreset_list
service - True to include ALL preset slots (both empty and set); otherwise, False (default) to only include preset slots that have been set. - Updated underlying
bosesoundtouchapi
package requirement to version 1.0.44.
- Added configuration options support - source_select processing, to only show sources that the user wants.
- Added friendlier sound_mode_list display values for devices that support audiodspcontrols (ST-300, etc).
- Updated code in init.py to log an error message (instead of an exception) when a SoundTouchClient instance could not be created. This is usually caused by a temporary error (e.g. device unplugged, network connectivity, etc), in which case the user will need to manually reload the device when the temporary condition is cleared. If it's a permanent error (e.g. ip address change), then the user needs to correct the configuration.
- Updated underlying
bosesoundtouchapi
package requirement to version 1.0.43.
- Added service "Music Service Station List" - Gets a list of your stored stations from the specified music service (e.g. PANDORA, etc).
- Updated underlying
bosesoundtouchapi
package requirement to version 1.0.35. - Updated configuration caching to utilize the
SoundTouchClient
module cache instead of local variables. It's doing the same thing, without twice the overhead of memory storage.
- Added service "Reboot Device" - Reboots the operating system of the SoundTouch device.
- Updated Remote Keypress service to include key_state argument. This allows presets to be stored (press) or selected for playing (release).
- Updated underlying
bosesoundtouchapi
package requirement to version 1.0.31.
- Updated underlying
bosesoundtouchapi
package requirement to version 1.0.22. - Updated
sourcesUpdated
event processing to refresh the source list when the list has changed.
- Updated service "Play Content Item" to make most parameters optional, to support switching to LOCAL source if necessary.
- Updated README.md page to reference documentation in the GitHub Wiki pages.
- Changed github validation script to run once per month instead of once per day.
- Added service "Play Content Item" to allow media content from sources (e.g. TUNEIN, LOCAL_MUSIC, etc) to be played directly.
- Corrected high cpu rate condition in the underlying
SmartInspectPython
package api. This was causing the integration to consume 50%+ of the cpu at all times.
- Updated
media_player.source_list
property to include sourceAccount as well as the source in the returned list (e.g. "PRODUCT:TV", etc).
- Added service "Adjust Audio Tone Levels" to allow bass and treble levels to be adjusted for devices that support AudioProductToneControls capability.
- Added new extra state attribute named "soundtouchplus_audio_bass_level" to indicate the current bass level.
- Added new extra state attribute named "soundtouchplus_audio_treble_level" to indicate the current treble level.
- Updated
select_source
method with the ability to select the last source (LASTSOURCE), as well as the last Soundtouch source (LASTSOUNDTOUCHSOURCE).
- Added "select_sound_mode()" support, which allows the device to enable AUDIO_MODE_DIALOG or AUDIO_MODE_NORMAL. Note that only certain SoundTouch devices support the audiodspcontrols API (e.g. ST-300 does, ST-10 does not).
- Updated "select_source()" method processing to call the "SelectLocalSource()" method if LOCAL is specified for the source value; for some SoundTouch devices, this is the only way that the LOCAL source can be selected.
- Added a new extra state attribute to media_player named "soundtouchplus_source". This will return a "source:sourceAccount" value if the sourceAccount value is populated; otherwise, it just returns the "source" value.
- Updated initialization method to load the _attr_source_list state property with the list of sources the device supports. Also added listener to update the source list when it is changed in real-time.
- Allow user to disable websocket notifications if desired when device is added. This will enable device polling every 10 seconds from Home Assistant UI for status updates.
- Updated config flow to allow configuration key name changes. Updates were failing due to a configuration key name change.
- Updated config flow to allow entry for websocket port and ping interval values.
- Updated websocket connection event handler to log a debug message instead of an error when a socket connection is opened or closed.
- Updated code to handle device websocket connection errors (e.g. power loss, socket connection errors, etc). This was causing devices to not respond once the websocket connection was re-established.
- Updated code to handle devices that do not support websocket notifications. In this case, HA will poll the device every 10 seconds for status updates.
- Added "play_url" service support that allows better support for playing URL media content.
- Removed some HTML formatting from strings.json to be HASSFest validation compliant.
- Corrected a bug in the underlying bosesoundtouchapi which would cause delays in playing url's with no metadata present.
- Version 1 initial release.