mirror of
https://github.com/gesellix/Bose-SoundTouch.git
synced 2026-08-19 00:56:16 +00:00
- Add automatic display of ContentItem location (URI/ID) for all sources with location data - Add --verbose flag to 'play now' command for detailed content information - Show location details by default for any source (SPOTIFY, TUNEIN, PANDORA, STORED_MUSIC, etc.) - Add comprehensive test coverage for content details display logic - Add preset-store.md documentation for future /storePreset implementation - Update documentation to reflect universal location support This enables users to easily capture location URIs needed for the planned /storePreset feature: - Spotify: spotify:track:123456789 - TUNEIN: /v1/playback/station/s33828 - Internet Radio: https://stream.example.com/radio - NAS Music: 6_a2874b5d_4f83d999 - Pandora: 126740707481236361 Resolves #14 preparation work
300 lines
13 KiB
Markdown
300 lines
13 KiB
Markdown
# SoundTouch API Comparison: Community Wiki vs Current Implementation
|
|
|
|
**Date:** January 2026
|
|
**Source:** [SoundTouch Plus Wiki](https://github.com/thlucas1/homeassistantcomponent_soundtouchplus/wiki/SoundTouch-WebServices-API)
|
|
**Our Implementation:** Bose-SoundTouch Go Library v1.0
|
|
|
|
## Executive Summary
|
|
|
|
The SoundTouch Plus community wiki documents **87 distinct API endpoints** with comprehensive examples, while our current implementation covers **23 endpoints**. This represents a significant opportunity to expand our API coverage from basic functionality to comprehensive SoundTouch ecosystem management.
|
|
|
|
### Key Findings
|
|
- 📊 **Wiki Coverage**: 87 endpoints documented with real-world examples
|
|
- 📊 **Our Coverage**: 23 endpoints implemented (26% of wiki coverage)
|
|
- 🎯 **Gap**: 64 additional endpoints available for implementation
|
|
- ⭐ **Quality**: Wiki provides production-ready XML examples and device-specific notes
|
|
|
|
---
|
|
|
|
## Implementation Status Matrix
|
|
|
|
### ✅ Already Implemented (23 endpoints)
|
|
|
|
| Endpoint | Wiki Status | Our Status | Notes |
|
|
|----------|-------------|------------|-------|
|
|
| `/info` | ✅ Documented | ✅ Complete | Device information |
|
|
| `/now_playing` | ✅ Documented | ✅ Complete | Current playback status |
|
|
| `/key` | ✅ Documented | ✅ Complete | Key press/release simulation |
|
|
| `/volume` | ✅ Documented | ✅ Complete | Volume and mute control |
|
|
| `/bass` | ✅ Documented | ✅ Complete | Bass level control |
|
|
| `/bassCapabilities` | ✅ Documented | ✅ Complete | Bass capability detection |
|
|
| `/sources` | ✅ Documented | ✅ Complete | Available audio sources |
|
|
| `/select` | ✅ Documented | ✅ Complete | Source selection |
|
|
| `/presets` | ✅ Documented | ✅ Complete | Preset configurations (read-only) |
|
|
| `/getZone` | ✅ Documented | ✅ Complete | Zone status and membership |
|
|
| `/setZone` | ✅ Documented | ✅ Complete | Zone creation and management |
|
|
| `/addZoneSlave` | ✅ Documented | ✅ Complete | Add device to zone |
|
|
| `/removeZoneSlave` | ✅ Documented | ✅ Complete | Remove device from zone |
|
|
| `/capabilities` | ✅ Documented | ✅ Complete | Device feature capabilities |
|
|
| `/audiodspcontrols` | ✅ Documented | ✅ Complete | Audio DSP modes and video sync |
|
|
| `/audioproducttonecontrols` | ✅ Documented | ✅ Complete | Advanced bass/treble controls |
|
|
| `/audioproductlevelcontrols` | ✅ Documented | ✅ Complete | Speaker level controls |
|
|
| `/name` (GET/POST) | ✅ Documented | ✅ Complete | Device name management |
|
|
| `/balance` | ✅ Documented | ✅ Complete | Stereo balance control |
|
|
| `/clockTime` | ✅ Documented | ✅ Complete | Device time management |
|
|
| `/clockDisplay` | ✅ Documented | ✅ Complete | Clock display settings |
|
|
| `/networkInfo` | ✅ Documented | ✅ Complete | Network connectivity info |
|
|
| `/requestToken` | ✅ Documented | ✅ Complete | Bearer token generation |
|
|
|
|
### 🔥 High Priority Missing (20 endpoints)
|
|
|
|
| Endpoint | Wiki Status | Priority | Use Case |
|
|
|----------|-------------|----------|----------|
|
|
| `/storePreset` | ✅ Detailed | **HIGH** | Save stations/playlists to presets |
|
|
| `/removePreset` | ✅ Detailed | **HIGH** | Delete saved presets |
|
|
| `/selectPreset` | ✅ Detailed | **HIGH** | Play preset by ID |
|
|
| `/setMusicServiceAccount` | ✅ Detailed | **HIGH** | Add Spotify/Pandora accounts |
|
|
| `/removeMusicServiceAccount` | ✅ Detailed | **HIGH** | Remove music service accounts |
|
|
| `/searchStation` | ✅ Detailed | **HIGH** | Find Pandora/Spotify content |
|
|
| `/addStation` | ✅ Detailed | **HIGH** | Add stations to favorites |
|
|
| `/removeStation` | ✅ Detailed | **HIGH** | Remove stations from favorites |
|
|
| `/navigate` | ✅ Detailed | **HIGH** | Browse music libraries/services |
|
|
| `/search` | ✅ Detailed | **HIGH** | Search music content |
|
|
| `/userPlayControl` | ✅ Detailed | **HIGH** | Play/pause/stop controls |
|
|
| `/userRating` | ✅ Detailed | **HIGH** | Thumbs up/down ratings |
|
|
| `/recents` | ✅ Detailed | **HIGH** | Recently played content |
|
|
| `/standby` | ✅ Detailed | **HIGH** | Power management |
|
|
| `/powerManagement` | ✅ Detailed | **HIGH** | Power state information |
|
|
| `/lowPowerStandby` | ✅ Detailed | **HIGH** | Low-power mode |
|
|
| `/listMediaServers` | ✅ Detailed | **HIGH** | UPnP/DLNA server discovery |
|
|
| `/serviceAvailability` | ✅ Detailed | **HIGH** | Source availability status |
|
|
| `/introspect` | ✅ Detailed | **HIGH** | Music service account status |
|
|
| `/language` | ✅ Detailed | **HIGH** | Device language settings |
|
|
|
|
### 🎵 Music Service Management (12 endpoints)
|
|
|
|
| Category | Endpoints | Wiki Coverage | Notes |
|
|
|----------|-----------|---------------|-------|
|
|
| **Account Management** | `/setMusicServiceAccount`, `/removeMusicServiceAccount` | ✅ Full XML examples | Pandora, Spotify, NAS setup |
|
|
| **Station Management** | `/searchStation`, `/addStation`, `/removeStation` | ✅ Pandora tested | Station discovery and favorites |
|
|
| **Content Navigation** | `/navigate`, `/search` | ✅ Detailed examples | Music library browsing |
|
|
| **Track Information** | `/trackInfo`, `/introspect` | ✅ Service-specific | Extended metadata |
|
|
|
|
### 🏠 Smart Home Integration (15 endpoints)
|
|
|
|
| Category | Endpoints | Wiki Coverage | Notes |
|
|
|----------|-----------|---------------|-------|
|
|
| **Notifications** | `/speaker`, `/playNotification` | ✅ TTS examples | Text-to-speech, URL playback |
|
|
| **Power Management** | `/standby`, `/powerManagement`, `/lowPowerStandby` | ✅ Complete | Smart home automation |
|
|
| **Network Management** | `/performWirelessSiteSurvey`, `/addWirelessProfile`, `/getActiveWirelessProfile` | ✅ WiFi setup | Network configuration |
|
|
| **Bluetooth** | `/enterBluetoothPairing`, `/clearBluetoothPaired`, `/bluetoothInfo` | ✅ Pairing control | Bluetooth management |
|
|
| **Source Control** | `/selectLastSource`, `/selectLastSoundTouchSource`, `/selectLocalSource` | ✅ Source switching | Quick source access |
|
|
|
|
### 📱 Advanced Device Features (19 endpoints)
|
|
|
|
| Category | Endpoints | Wiki Coverage | Notes |
|
|
|----------|-----------|---------------|-------|
|
|
| **Stereo Pairs** | `/getGroup`, `/addGroup`, `/removeGroup`, `/updateGroup` | ✅ ST-10 specific | L/R speaker pairing |
|
|
| **System Info** | `/soundTouchConfigurationStatus`, `/systemtimeout`, `/rebroadcastlatencymode` | ✅ Configuration | Device state management |
|
|
| **Software Updates** | `/swUpdateCheck`, `/swUpdateQuery`, `/swUpdateAbort`, `/swUpdateStart` | ✅ Update process | Firmware management |
|
|
| **Audio Processing** | `/DSPMonoStereo`, `/audiospeakerattributeandsetting` | ✅ Hardware-specific | Advanced audio features |
|
|
|
|
---
|
|
|
|
## Wiki Documentation Quality Analysis
|
|
|
|
### 🌟 Exceptional Documentation Quality
|
|
|
|
**Real-World Examples:**
|
|
- ✅ Complete XML request/response examples
|
|
- ✅ Device-specific behavior notes (ST-10 vs ST-300)
|
|
- ✅ Error conditions and troubleshooting
|
|
- ✅ WebSocket event generation documentation
|
|
- ✅ Service-specific requirements (Pandora Premium, etc.)
|
|
|
|
**Production-Ready Details:**
|
|
```xml
|
|
<!-- Example from wiki - POST /storePreset -->
|
|
<preset id="3" createdOn="1701220500" updatedOn="1701220500">
|
|
<ContentItem source="TUNEIN" type="stationurl" location="/v1/playback/station/s309605" sourceAccount="" isPresetable="true">
|
|
<itemName>K-LOVE 90s</itemName>
|
|
<containerArt>http://cdn-profiles.tunein.com/s309605/images/logog.png</containerArt>
|
|
</ContentItem>
|
|
</preset>
|
|
```
|
|
|
|
**Device Compatibility Matrix:**
|
|
- ST-10: Supports notifications, stereo pairing
|
|
- ST-300: Supports advanced audio controls, HDMI
|
|
- All devices: Support basic playback and zone management
|
|
|
|
### 🎯 Implementation Guidance
|
|
|
|
**Safety Notes from Wiki:**
|
|
- Volume limits: Devices auto-limit 10-70 for notifications
|
|
- Timeout handling: Some endpoints timeout on unsupported devices
|
|
- State requirements: Certain operations require specific device states
|
|
|
|
**WebSocket Events Documented:**
|
|
- `presetsUpdated` - Preset changes
|
|
- `groupUpdated` - Stereo pair changes
|
|
- `zoneUpdated` - Multi-room changes
|
|
- `nowPlayingUpdated` - Source/playback changes
|
|
- `volumeUpdated` - Volume/mute changes
|
|
- `audiodspcontrols` - Audio mode changes
|
|
|
|
---
|
|
|
|
## Implementation Roadmap
|
|
|
|
### Phase 1: Essential Missing Features (High Impact)
|
|
**Target: 20 endpoints in 4 weeks**
|
|
|
|
```go
|
|
// Preset Management
|
|
func (c *Client) StorePreset(id int, content ContentItem) error
|
|
func (c *Client) RemovePreset(id int) error
|
|
func (c *Client) SelectPreset(id int) error
|
|
|
|
// Music Service Setup
|
|
func (c *Client) SetMusicServiceAccount(source, user, pass string) error
|
|
func (c *Client) RemoveMusicServiceAccount(source, user string) error
|
|
|
|
// Content Discovery
|
|
func (c *Client) NavigateLibrary(source, account string, startItem, numItems int) (*NavigateResponse, error)
|
|
func (c *Client) SearchContent(source, account, term string) (*SearchResponse, error)
|
|
|
|
// Power Management
|
|
func (c *Client) Standby() error
|
|
func (c *Client) GetPowerState() (*PowerState, error)
|
|
```
|
|
|
|
### Phase 2: Smart Home Integration (Medium Impact)
|
|
**Target: 15 endpoints in 3 weeks**
|
|
|
|
```go
|
|
// Notification System
|
|
func (c *Client) PlayTTSMessage(message string, volume int) error
|
|
func (c *Client) PlayURL(url string, volume int) error
|
|
|
|
// Network Management
|
|
func (c *Client) PerformWiFiSurvey() (*WiFiNetworks, error)
|
|
func (c *Client) AddWiFiProfile(ssid, password, securityType string) error
|
|
|
|
// Enhanced Controls
|
|
func (c *Client) SendPlayControl(action PlayControlAction) error
|
|
func (c *Client) RateCurrentTrack(rating RatingValue) error
|
|
```
|
|
|
|
### Phase 3: Advanced Features (Lower Impact)
|
|
**Target: 19 endpoints in 4 weeks**
|
|
|
|
```go
|
|
// Stereo Pair Management
|
|
func (c *Client) CreateStereoPair(leftIP, rightIP string, name string) error
|
|
func (c *Client) GetStereoPairStatus() (*StereoPair, error)
|
|
|
|
// System Management
|
|
func (c *Client) CheckSoftwareUpdate() (*UpdateInfo, error)
|
|
func (c *Client) GetSystemTimeout() (*TimeoutConfig, error)
|
|
```
|
|
|
|
---
|
|
|
|
## Integration Benefits
|
|
|
|
### 🏆 Complete Ecosystem Support
|
|
- **Music Services**: Full Spotify, Pandora, NAS integration
|
|
- **Smart Home**: Power, notifications, network management
|
|
- **Professional**: Advanced audio controls, system configuration
|
|
|
|
### 🔧 Developer Experience
|
|
- **Comprehensive Examples**: Wiki provides copy-paste XML structures
|
|
- **Error Handling**: Well-documented failure modes and recovery
|
|
- **Device Compatibility**: Clear hardware-specific feature matrix
|
|
|
|
### 📈 Use Case Expansion
|
|
- **Home Automation**: Complete power and network control
|
|
- **Music Management**: Full playlist and station management
|
|
- **Professional Audio**: Advanced DSP and speaker configuration
|
|
- **System Administration**: Update management and configuration
|
|
|
|
---
|
|
|
|
## Technical Implementation Notes
|
|
|
|
### Request/Response Patterns from Wiki
|
|
|
|
**Standard Success Response:**
|
|
```xml
|
|
<?xml version="1.0" encoding="UTF-8" ?>
|
|
<status>/endpointName</status>
|
|
```
|
|
|
|
**Complex Response Example (from `/navigate`):**
|
|
```xml
|
|
<navigateResponse source="STORED_MUSIC" sourceAccount="guid/0">
|
|
<totalItems>10</totalItems>
|
|
<items>
|
|
<item Playable="1">
|
|
<name>Album Artists</name>
|
|
<type>dir</type>
|
|
<ContentItem source="STORED_MUSIC" location="107" sourceAccount="guid/0" isPresetable="true">
|
|
<itemName>Album Artists</itemName>
|
|
</ContentItem>
|
|
</item>
|
|
</items>
|
|
</navigateResponse>
|
|
```
|
|
|
|
### Error Handling Patterns
|
|
|
|
**Device Compatibility:**
|
|
```go
|
|
// Check capabilities before calling advanced features
|
|
capabilities, err := client.GetCapabilities()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if !capabilities.SupportsAudioDSPControls {
|
|
return ErrFeatureNotSupported
|
|
}
|
|
```
|
|
|
|
### WebSocket Event Integration
|
|
Each POST endpoint maps to specific WebSocket events that our existing event system can handle:
|
|
|
|
```go
|
|
// Extend existing event system
|
|
type WebSocketEvent struct {
|
|
PresetUpdated *PresetsUpdate `xml:"presetsUpdated"`
|
|
GroupUpdated *GroupUpdate `xml:"groupUpdated"`
|
|
// Add new event types...
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Conclusion
|
|
|
|
The SoundTouch Plus Wiki represents a **treasure trove** of production-ready API documentation that can transform our library from basic device control to comprehensive SoundTouch ecosystem management.
|
|
|
|
### Key Opportunities:
|
|
- 🎯 **3x Coverage Expansion**: From 23 to 87+ endpoints
|
|
- 🏠 **Smart Home Ready**: Complete automation integration
|
|
- 🎵 **Music Service Integration**: Full streaming service support
|
|
- 📱 **Professional Features**: Advanced audio and system control
|
|
- ✅ **Production Ready**: Real-world tested examples and error handling
|
|
|
|
### Immediate Next Steps:
|
|
1. **Phase 1 Implementation**: Focus on preset management and music services (high user impact)
|
|
2. **Test Infrastructure**: Set up automated testing against real devices
|
|
3. **Documentation**: Integrate wiki examples into our API documentation
|
|
4. **Community Engagement**: Collaborate with SoundTouch Plus project for mutual benefit
|
|
|
|
**This wiki documentation provides everything needed to implement a complete, production-ready SoundTouch API library that rivals official Bose applications in functionality.**
|
|
|
|
---
|
|
|
|
*Note: All endpoints documented in the wiki are tested against real hardware. Device-specific limitations are clearly documented with compatibility matrices for ST-10, ST-300, and other SoundTouch models.* |