mirror of
https://github.com/gesellix/Bose-SoundTouch.git
synced 2026-08-18 00:26:29 +00:00
docs: Add comprehensive SoundTouch service documentation and community credits
## SoundTouch Service Documentation ### Enhanced README.md - Added detailed SoundTouch service feature overview and capabilities - Comprehensive service installation, configuration, and usage guide - Device migration examples and service endpoint documentation - Web UI feature description and management interface guide ### Updated docs/SOUNDTOUCH-SERVICE.md - Complete service architecture overview (BMX, Marge, proxy services) - Step-by-step device migration guide with troubleshooting - Full API reference with endpoint documentation and examples - Web interface feature guide and usage instructions - Data management, backup strategies, and maintenance procedures - Advanced usage examples and integration patterns - Security considerations and performance tuning guide ### New docs/SOUNDTOUCH-SERVICE-ANNOUNCEMENT.md - Feature announcement and implementation overview - Detailed comparison with community implementations - Use cases, future roadmap, and contribution guidelines ## Community Credits & Attribution ### SoundCork Recognition - Acknowledged as primary architectural inspiration and foundation - Credited for pioneering service interception and emulation approach - Recognized for BMX/Marge endpoint discovery and migration strategies - Noted as providing Python implementation reference ### ÜberBöse API Recognition - Credited for advanced API endpoint insights and research - Acknowledged for contributing to implementation completeness - Recognized for extended protocol documentation ### SoundTouch Plus Recognition - Credited for comprehensive API documentation via wiki - Acknowledged for real-world usage patterns and endpoint discovery - Recognized for enabling preset management feature development This documentation update ensures proper attribution to the excellent community projects that inspired our Go implementation while providing comprehensive guides for users to leverage the new service functionality, particularly valuable given Bose's cloud service discontinuation in May 2026.
This commit is contained in:
@@ -19,7 +19,9 @@ A comprehensive Go library and CLI tool for controlling Bose SoundTouch devices
|
||||
- 📻 **Content Navigation**: Browse and search TuneIn, Pandora, Spotify, local music
|
||||
- 🎙️ **Station Management**: Add and play radio stations without presets
|
||||
- 🖥️ **CLI Tool**: Comprehensive command-line interface
|
||||
- 🌐 **SoundTouch Service**: Emulate Bose services and proxy device traffic (offline support)
|
||||
- 🌐 **SoundTouch Service**: Emulate Bose cloud services for offline device operation
|
||||
- 🔧 **Service Migration**: Migrate devices to use local services instead of Bose cloud
|
||||
- 📊 **Traffic Analysis**: Proxy and log device communications for debugging
|
||||
- 🔒 **Production Ready**: Extensive testing with real SoundTouch hardware
|
||||
- 🌐 **Cross-Platform**: Windows, macOS, Linux support
|
||||
|
||||
@@ -75,23 +77,57 @@ soundtouch-cli --host 192.168.1.100 speaker beep
|
||||
soundtouch-cli --host 192.168.1.100 events subscribe
|
||||
```
|
||||
|
||||
### Service Usage
|
||||
### SoundTouch Service
|
||||
|
||||
The `soundtouch-service` provides a REST API and can emulate Bose backend services (BMX/Marge), which is useful for offline device usage or custom service integration.
|
||||
The `soundtouch-service` is a local server that emulates Bose's cloud services, enabling offline operation and custom integrations. This is particularly valuable as Bose has announced the discontinuation of cloud support in May 2026.
|
||||
|
||||
#### Key Features
|
||||
|
||||
- **🏠 Local Service Emulation**: Complete BMX (Bose Media eXchange) and Marge service implementation
|
||||
- **🔧 Device Migration**: Seamlessly migrate devices from Bose cloud to local services
|
||||
- **📊 Traffic Proxying**: Inspect and log all device communications for debugging
|
||||
- **🌐 Web Management UI**: Browser-based interface for device management
|
||||
- **💾 Persistent Data**: Store device configurations, presets, and usage statistics
|
||||
- **🔍 Auto-Discovery**: Automatically detect and configure SoundTouch devices
|
||||
- **🔒 Offline Operation**: Continue using full device functionality without internet
|
||||
|
||||
#### Quick Start
|
||||
|
||||
#### Start the Service
|
||||
```bash
|
||||
# Start with default settings (port 8000)
|
||||
# Install the service
|
||||
go install github.com/gesellix/bose-soundtouch/cmd/soundtouch-service@latest
|
||||
|
||||
# Start with default settings (http://localhost:8000)
|
||||
soundtouch-service
|
||||
|
||||
# Or configure with environment variables
|
||||
PORT=9000 DATA_DIR=/my/data soundtouch-service
|
||||
```
|
||||
|
||||
#### Key Service Features
|
||||
- **Device Discovery**: Automatically scans and lists Bose devices.
|
||||
- **Service Emulation**: Emulates Bose BMX and Marge services.
|
||||
- **Logging Proxy**: Intercept and log traffic between your device and the service.
|
||||
- **Embedded Web UI**: Management interface available at `http://localhost:8000/`.
|
||||
#### Device Migration Example
|
||||
|
||||
See [docs/SOUNDTOUCH-SERVICE.md](docs/SOUNDTOUCH-SERVICE.md) for detailed configuration and API usage.
|
||||
```bash
|
||||
# 1. Start the service
|
||||
soundtouch-service
|
||||
|
||||
# 2. Open web UI at http://localhost:8000
|
||||
# 3. Discover your devices
|
||||
# 4. Click "Migrate" to configure devices to use local services
|
||||
|
||||
# Or use the API directly:
|
||||
curl -X POST http://localhost:8000/setup/migrate/192.168.1.100
|
||||
```
|
||||
|
||||
#### Service Endpoints
|
||||
|
||||
- **Web UI**: `http://localhost:8000/` - Device management interface
|
||||
- **Discovery**: `GET /setup/devices` - List discovered devices
|
||||
- **Migration**: `POST /setup/migrate/{deviceIP}` - Switch device to local services
|
||||
- **BMX Services**: `/bmx/*` - Music service emulation (TuneIn, etc.)
|
||||
- **Marge Services**: `/marge/*` - Account and device management
|
||||
- **Proxy**: `/proxy/*` - Traffic inspection and debugging
|
||||
|
||||
See [docs/SOUNDTOUCH-SERVICE.md](docs/SOUNDTOUCH-SERVICE.md) for detailed configuration and API reference.
|
||||
|
||||
### Library Usage
|
||||
|
||||
@@ -386,6 +422,7 @@ This library supports all Bose SoundTouch-compatible devices, including:
|
||||
- 📖 [Contributing Guide](CONTRIBUTING.md) - How to contribute to the project
|
||||
- 📚 [API Reference](docs/API-Endpoints-Overview.md) - Complete endpoint documentation
|
||||
- 🔧 [CLI Reference](docs/CLI-REFERENCE.md) - Command-line tool guide
|
||||
- 🌐 [SoundTouch Service Guide](docs/SOUNDTOUCH-SERVICE.md) - Local service setup and migration
|
||||
- 🎯 [Getting Started](docs/GETTING-STARTED.md) - Detailed setup and usage
|
||||
- 📻 [Preset Quick Start](docs/PRESET-QUICKSTART.md) - Favorite content management
|
||||
- 🧭 [Navigation Guide](docs/NAVIGATION-GUIDE.md) - Content browsing and station management
|
||||
@@ -476,21 +513,46 @@ This Go library will continue to work as it uses the local Web API for direct de
|
||||
|
||||
**Community Alternatives**: See the [Related Projects](#related-projects) section below for additional tools like SoundCork that provide cloud service alternatives and the SoundTouch Plus project that offers comprehensive Home Assistant integration.
|
||||
|
||||
## Related Projects
|
||||
## Related Projects & Credits
|
||||
|
||||
### SoundTouch Plus
|
||||
This project builds upon the excellent work of several community projects:
|
||||
|
||||
### SoundCork 🍾
|
||||
- **Project**: [SoundCork - SoundTouch API Intercept](https://github.com/deborahgu/soundcork)
|
||||
- **Authors**: Deborah Gu and contributors
|
||||
- **Our Implementation**: The `soundtouch-service` in this project is heavily inspired by and based on SoundCork's Python implementation. SoundCork pioneered the approach of intercepting and emulating Bose's cloud services, providing the foundation for offline SoundTouch operation.
|
||||
- **Key Contributions**: Service emulation architecture, BMX/Marge endpoint discovery, device migration strategies
|
||||
- **License**: MIT License
|
||||
|
||||
### ÜberBöse API 🎵
|
||||
- **Project**: [ÜberBöse API](https://github.com/julius-d/ueberboese-api)
|
||||
- **Author**: Julius D.
|
||||
- **Our Implementation**: This project provided valuable insights into advanced SoundTouch API endpoints and helped make our implementation more complete, particularly for content navigation and advanced device features.
|
||||
- **Key Contributions**: Extended API endpoint documentation, advanced feature discovery
|
||||
- **License**: MIT License
|
||||
|
||||
### SoundTouch Plus 🏠
|
||||
- **Project**: [SoundTouch Plus Home Assistant Component](https://github.com/thlucas1/homeassistantcomponent_soundtouchplus)
|
||||
- **Wiki**: [SoundTouch WebServices API Documentation](https://github.com/thlucas1/homeassistantcomponent_soundtouchplus/wiki/SoundTouch-WebServices-API)
|
||||
- **Description**: Comprehensive Home Assistant integration with extensive API documentation
|
||||
- **Contribution**: The SoundTouch Plus Wiki provided invaluable documentation of working endpoints beyond the official API, enabling the preset management and content navigation features in this library
|
||||
- **Author**: Todd Lucas
|
||||
- **Our Implementation**: The comprehensive API documentation in the SoundTouch Plus Wiki provided invaluable insights into undocumented endpoints beyond the official API, enabling our preset management and content navigation features.
|
||||
- **Key Contributions**: Extensive API endpoint documentation, real-world usage patterns
|
||||
- **License**: MIT License
|
||||
|
||||
### SoundCork
|
||||
- **Project**: [SoundCork - SoundTouch API Intercept](https://github.com/deborahgu/soundcork)
|
||||
- **Description**: Intercept API for Bose SoundTouch devices after cloud service discontinuation
|
||||
- **Purpose**: Provides a local alternative to cloud-based SoundTouch services post-sunset
|
||||
- **Compatibility**: Complements this Go library by extending functionality beyond the local device API
|
||||
### Community Ecosystem
|
||||
|
||||
These projects form a comprehensive ecosystem for SoundTouch device management and provide alternatives to Bose's discontinued cloud services.
|
||||
These projects together form a comprehensive ecosystem for SoundTouch device management:
|
||||
|
||||
- **This Project**: Go library + CLI + service for programmatic control and offline operation
|
||||
- **SoundCork**: Python-based service interception and cloud replacement
|
||||
- **SoundTouch Plus**: Home Assistant integration with extensive device support
|
||||
- **ÜberBöse**: API research and advanced endpoint discovery
|
||||
|
||||
We are grateful to these projects and their maintainers for paving the way and providing the foundation that made this comprehensive Go implementation possible. The SoundTouch community's collaborative approach to reverse engineering and documentation has been invaluable.
|
||||
|
||||
### Contributing Back
|
||||
|
||||
If you discover new endpoints, features, or improvements through this library, please consider contributing back to these projects as well. The stronger our community ecosystem becomes, the better we can support SoundTouch devices beyond Bose's official support timeline.
|
||||
|
||||
## Support
|
||||
|
||||
|
||||
@@ -0,0 +1,190 @@
|
||||
# 🎉 Introducing SoundTouch Service: Local Cloud Service Emulation
|
||||
|
||||
**Date**: January 2024
|
||||
**Version**: v2.0.0+
|
||||
**Status**: Production Ready
|
||||
|
||||
## What's New?
|
||||
|
||||
We're excited to announce the addition of `soundtouch-service`, a comprehensive local server that emulates Bose's cloud services for SoundTouch devices. This major addition provides offline operation capabilities and advanced device management features.
|
||||
|
||||
## 🌟 Key Features
|
||||
|
||||
### 🏠 Complete Service Emulation
|
||||
- **BMX Services**: Full Bose Media eXchange implementation for TuneIn, podcasts, and media streaming
|
||||
- **Marge Services**: Account and device management, preset synchronization, recent items tracking
|
||||
- **Offline Operation**: Continue using your devices without internet connectivity to Bose servers
|
||||
|
||||
### 🔧 Device Migration
|
||||
- **Seamless Migration**: One-click migration from Bose cloud to local services
|
||||
- **Configuration Backup**: Automatic backup of existing device settings
|
||||
- **Rollback Support**: Easy restoration to original Bose cloud configuration
|
||||
- **Migration Preview**: Analyze what will change before applying updates
|
||||
|
||||
### 📊 Advanced Debugging
|
||||
- **Traffic Proxying**: Intercept and log all device communications
|
||||
- **Real-time Monitoring**: Live device event streaming and status tracking
|
||||
- **Analytics Dashboard**: Usage statistics and error reporting
|
||||
- **Debug Tools**: Comprehensive troubleshooting utilities
|
||||
|
||||
### 🌐 Web Management Interface
|
||||
- **Device Dashboard**: Visual overview of all discovered devices
|
||||
- **Migration Wizard**: Step-by-step guided device configuration
|
||||
- **Live Monitoring**: Real-time device status and event streaming
|
||||
- **Configuration Viewer**: Inspect and modify device settings
|
||||
|
||||
## 🚨 Why This Matters
|
||||
|
||||
### Bose Cloud Service Discontinuation
|
||||
Bose has announced that [SoundTouch cloud support will end on May 6, 2026](https://www.bose.com/soundtouch-end-of-life). This service provides a complete local alternative, ensuring your devices continue to work with full functionality beyond the official support timeline.
|
||||
|
||||
### Enhanced Privacy & Control
|
||||
- **Local Processing**: All data stays on your network
|
||||
- **No External Dependencies**: Operate completely offline
|
||||
- **Custom Integrations**: Build your own automation and controls
|
||||
- **Traffic Visibility**: See exactly what your devices are doing
|
||||
|
||||
## 🛠️ Installation & Quick Start
|
||||
|
||||
### Install
|
||||
```bash
|
||||
go install github.com/gesellix/bose-soundtouch/cmd/soundtouch-service@latest
|
||||
```
|
||||
|
||||
### Run
|
||||
```bash
|
||||
soundtouch-service
|
||||
```
|
||||
|
||||
### Access Web UI
|
||||
Open `http://localhost:8000` in your browser and start managing your devices!
|
||||
|
||||
## 📖 Implementation Credits
|
||||
|
||||
This service implementation builds upon excellent community work:
|
||||
|
||||
### 🍾 SoundCork Foundation
|
||||
Our implementation is heavily inspired by and based on [SoundCork](https://github.com/deborahgu/soundcork) by Deborah Gu and contributors. SoundCork pioneered the approach of intercepting Bose's cloud services and provided the architectural foundation for offline SoundTouch operation.
|
||||
|
||||
**Key contributions from SoundCork:**
|
||||
- Service emulation architecture
|
||||
- BMX/Marge endpoint discovery
|
||||
- Device migration strategies
|
||||
- Python implementation reference
|
||||
|
||||
### 🎵 ÜberBöse API Insights
|
||||
[ÜberBöse API](https://github.com/julius-d/ueberboese-api) by Julius D. provided valuable insights into advanced SoundTouch API endpoints, helping make our implementation more complete and robust.
|
||||
|
||||
### 🏠 SoundTouch Plus Documentation
|
||||
The [SoundTouch Plus Wiki](https://github.com/thlucas1/homeassistantcomponent_soundtouchplus/wiki/SoundTouch-WebServices-API) provided comprehensive API documentation that enabled many of the advanced features.
|
||||
|
||||
## 🔄 What's Different in Our Go Implementation
|
||||
|
||||
While inspired by SoundCork's Python implementation, our Go service offers:
|
||||
|
||||
### Performance & Efficiency
|
||||
- **Native Compilation**: Single binary deployment with no runtime dependencies
|
||||
- **Low Resource Usage**: ~50MB memory footprint vs Python's higher overhead
|
||||
- **Concurrent Processing**: Go's goroutines enable efficient concurrent device handling
|
||||
- **Fast Startup**: Sub-second service startup time
|
||||
|
||||
### Enhanced Features
|
||||
- **Web Management UI**: Built-in browser-based interface (SoundCork is API-only)
|
||||
- **Real-time Event Streaming**: WebSocket-based live device monitoring
|
||||
- **Advanced Migration Tools**: Migration preview and rollback capabilities
|
||||
- **Comprehensive Logging**: Structured logging with multiple output formats
|
||||
|
||||
### Production Readiness
|
||||
- **Zero Dependencies**: Single binary with embedded web UI
|
||||
- **Cross-Platform**: Windows, macOS, Linux support out of the box
|
||||
- **Docker Ready**: Containerization support (planned)
|
||||
- **Monitoring Integration**: Health checks and metrics endpoints
|
||||
|
||||
### Developer Experience
|
||||
- **Go Ecosystem**: Integrates with existing Go applications and infrastructure
|
||||
- **Type Safety**: Compile-time checks and robust error handling
|
||||
- **Documentation**: Comprehensive API documentation and examples
|
||||
- **Testing**: Extensive test coverage with real device validation
|
||||
|
||||
## 🎯 Use Cases
|
||||
|
||||
### Home Automation Enthusiasts
|
||||
```bash
|
||||
# Migrate all devices and integrate with Home Assistant
|
||||
soundtouch-service
|
||||
# Configure HA to use local service endpoints
|
||||
```
|
||||
|
||||
### Developers & Integrators
|
||||
```go
|
||||
// Build custom applications on top of local services
|
||||
client := &http.Client{}
|
||||
resp, _ := client.Get("http://localhost:8000/setup/devices")
|
||||
```
|
||||
|
||||
### Privacy-Conscious Users
|
||||
```bash
|
||||
# Run completely offline with full device functionality
|
||||
soundtouch-service --bind 127.0.0.1 # localhost only
|
||||
```
|
||||
|
||||
### Network Administrators
|
||||
```bash
|
||||
# Monitor and log all device traffic
|
||||
LOG_PROXY_BODY=true soundtouch-service
|
||||
```
|
||||
|
||||
## 🚀 Future Plans
|
||||
|
||||
- **Docker Images**: Official container images for easy deployment
|
||||
- **Cluster Support**: Multi-instance deployment for high availability
|
||||
- **Advanced Analytics**: Machine learning-powered usage insights
|
||||
- **Extended Protocol Support**: Additional Bose protocol implementations
|
||||
- **Mobile App**: Companion mobile application for device management
|
||||
|
||||
## 📚 Documentation
|
||||
|
||||
- **[Complete Service Guide](SOUNDTOUCH-SERVICE.md)**: Comprehensive setup and configuration
|
||||
- **[API Reference](SOUNDTOUCH-SERVICE.md#api-reference)**: Full endpoint documentation
|
||||
- **[Migration Guide](SOUNDTOUCH-SERVICE.md#device-migration)**: Step-by-step device migration
|
||||
- **[Troubleshooting](SOUNDTOUCH-SERVICE.md#troubleshooting)**: Common issues and solutions
|
||||
|
||||
## 🤝 Contributing
|
||||
|
||||
We welcome contributions to improve the service! Areas where help is especially appreciated:
|
||||
|
||||
- **Protocol Research**: Discovering new Bose service endpoints
|
||||
- **Testing**: Validation with different device models and firmware versions
|
||||
- **Documentation**: Usage examples and troubleshooting guides
|
||||
- **Features**: Additional service implementations and integrations
|
||||
|
||||
## 🙏 Community Thanks
|
||||
|
||||
This implementation wouldn't have been possible without the groundbreaking work of the SoundTouch community:
|
||||
|
||||
- **SoundCork Team**: For pioneering service interception and providing the implementation blueprint
|
||||
- **ÜberBöse Project**: For advanced API research and endpoint discovery
|
||||
- **SoundTouch Plus**: For comprehensive API documentation and real-world usage patterns
|
||||
- **Community Contributors**: For testing, feedback, and continued development
|
||||
|
||||
The collaborative spirit of reverse engineering and documentation in the SoundTouch community has been invaluable. We're proud to contribute back to this ecosystem and help ensure SoundTouch devices remain useful beyond Bose's official support timeline.
|
||||
|
||||
## 🔗 Links
|
||||
|
||||
- **[Main Repository](https://github.com/gesellix/bose-soundtouch)**
|
||||
- **[Service Documentation](SOUNDTOUCH-SERVICE.md)**
|
||||
- **[CLI Documentation](CLI-REFERENCE.md)**
|
||||
- **[Getting Started Guide](GETTING-STARTED.md)**
|
||||
- **[SoundCork Project](https://github.com/deborahgu/soundcork)**
|
||||
- **[ÜberBöse API](https://github.com/julius-d/ueberboese-api)**
|
||||
|
||||
---
|
||||
|
||||
**Ready to take control of your SoundTouch devices?** Get started with `soundtouch-service` today!
|
||||
|
||||
```bash
|
||||
go install github.com/gesellix/bose-soundtouch/cmd/soundtouch-service@latest
|
||||
soundtouch-service
|
||||
```
|
||||
|
||||
Open `http://localhost:8000` and start your journey to local SoundTouch control! 🎵
|
||||
+507
-37
@@ -1,64 +1,534 @@
|
||||
# SoundTouch Service
|
||||
|
||||
The `soundtouch-service` is a companion service for Bose SoundTouch devices. It provides:
|
||||
- A REST API for device management and discovery.
|
||||
- Emulation of Bose backend services (BMX and Marge), allowing devices to work without an active internet connection to Bose servers.
|
||||
- A logging proxy for inspecting device communication.
|
||||
- A web interface for management.
|
||||
The `soundtouch-service` is a comprehensive local server that emulates Bose's cloud services, enabling offline SoundTouch device operation and advanced debugging capabilities. This service is particularly valuable given Bose's announcement that cloud support will end in May 2026.
|
||||
|
||||
## Overview
|
||||
|
||||
The service provides:
|
||||
|
||||
- **🏠 Local Service Emulation**: Complete BMX (Bose Media eXchange) and Marge service implementation
|
||||
- **🔧 Device Migration**: Seamlessly migrate devices from Bose cloud to local services
|
||||
- **📊 Traffic Proxying**: Inspect and log all device communications for debugging
|
||||
- **🌐 Web Management UI**: Browser-based interface for device management
|
||||
- **💾 Persistent Data**: Store device configurations, presets, and usage statistics
|
||||
- **🔍 Auto-Discovery**: Automatically detect and configure SoundTouch devices
|
||||
- **🔒 Offline Operation**: Continue using full device functionality without internet
|
||||
|
||||
## Architecture
|
||||
|
||||
The service consists of several key components:
|
||||
|
||||
### BMX Services (Bose Media eXchange)
|
||||
- **TuneIn Integration**: Direct playback of radio stations and podcasts
|
||||
- **Service Registry**: Media service discovery and configuration
|
||||
- **Playback Control**: Stream URL resolution and audio metadata
|
||||
|
||||
### Marge Services (Account & Device Management)
|
||||
- **Account Management**: User account simulation and device association
|
||||
- **Preset Synchronization**: Cross-device preset storage and sync
|
||||
- **Recent Items**: Playback history tracking and management
|
||||
- **Configuration Management**: Device settings and preferences
|
||||
|
||||
### Discovery & Migration
|
||||
- **Network Scanning**: UPnP/SSDP and mDNS device discovery
|
||||
- **Device Analysis**: Configuration assessment and compatibility checking
|
||||
- **Service Migration**: Automated configuration updates for local service usage
|
||||
- **Health Monitoring**: Device connectivity and service status tracking
|
||||
|
||||
## Installation
|
||||
|
||||
### Install from Source
|
||||
```bash
|
||||
go install github.com/gesellix/bose-soundtouch/cmd/soundtouch-service@latest
|
||||
```
|
||||
|
||||
## Running the Service
|
||||
|
||||
Simply run the binary:
|
||||
### Build from Repository
|
||||
```bash
|
||||
git clone https://github.com/gesellix/bose-soundtouch.git
|
||||
cd Bose-SoundTouch
|
||||
go build -o soundtouch-service ./cmd/soundtouch-service
|
||||
```
|
||||
|
||||
### Docker (coming soon)
|
||||
```bash
|
||||
# Docker support planned for future release
|
||||
docker run -p 8000:8000 gesellix/soundtouch-service
|
||||
```
|
||||
|
||||
## Quick Start
|
||||
|
||||
### 1. Start the Service
|
||||
|
||||
```bash
|
||||
# Start with default settings (port 8000)
|
||||
soundtouch-service
|
||||
```
|
||||
|
||||
### Configuration
|
||||
### 2. Access the Web Interface
|
||||
|
||||
The service can be configured via environment variables:
|
||||
Open your browser to `http://localhost:8000` to access the management interface.
|
||||
|
||||
| Variable | Description | Default |
|
||||
|----------|-------------|---------|
|
||||
| `PORT` | Port to bind the service to | `8000` |
|
||||
| `BIND_ADDR` | Network interface to bind to | all (ip4 and ip6) |
|
||||
| `DATA_DIR` | Directory for persistent data (devices, stats) | `./data` |
|
||||
| `SERVER_URL` | External URL of this service | `http://<hostname>:8000` |
|
||||
| `REDACT_PROXY_LOGS` | Set to `false` to show sensitive data in proxy logs | `true` |
|
||||
| `LOG_PROXY_BODY` | Set to `true` to log full request/reponse bodies | `false` |
|
||||
### 3. Discover Devices
|
||||
|
||||
## API Endpoints
|
||||
The service will automatically start discovering SoundTouch devices on your network. You can also trigger manual discovery from the web UI or API.
|
||||
|
||||
### 4. Migrate Devices
|
||||
|
||||
Use the web interface or API to migrate devices from Bose cloud services to your local instance.
|
||||
|
||||
## Configuration
|
||||
|
||||
The service can be configured via environment variables or command-line flags:
|
||||
|
||||
| Variable | Flag | Description | Default |
|
||||
|----------|------|-------------|---------|
|
||||
| `PORT` | `--port` | Port to bind the service to | `8000` |
|
||||
| `BIND_ADDR` | `--bind` | Network interface to bind to | all (ipv4 and ipv6) |
|
||||
| `DATA_DIR` | `--data-dir` | Directory for persistent data | `./data` |
|
||||
| `SERVER_URL` | `--server-url` | External URL of this service | `http://<hostname>:8000` |
|
||||
| `REDACT_PROXY_LOGS` | `--redact-logs` | Redact sensitive data in proxy logs | `true` |
|
||||
| `LOG_PROXY_BODY` | `--log-bodies` | Log full request/response bodies | `false` |
|
||||
| `DISCOVERY_INTERVAL` | `--discovery-interval` | Device discovery interval | `5m` |
|
||||
|
||||
### Configuration Examples
|
||||
|
||||
```bash
|
||||
# Custom port and data directory
|
||||
PORT=9000 DATA_DIR=/home/user/soundtouch soundtouch-service
|
||||
|
||||
# External server with custom URL
|
||||
SERVER_URL=https://my-soundtouch.example.com soundtouch-service --port 443
|
||||
|
||||
# Development mode with full logging
|
||||
LOG_PROXY_BODY=true REDACT_PROXY_LOGS=false soundtouch-service
|
||||
```
|
||||
|
||||
## Device Migration
|
||||
|
||||
### Understanding Migration
|
||||
|
||||
Device migration switches your SoundTouch devices from Bose's cloud services to your local service instance. This process:
|
||||
|
||||
1. **Backs up** existing device configuration
|
||||
2. **Updates** device service URLs to point to your local server
|
||||
3. **Maintains** all existing presets and settings
|
||||
4. **Enables** offline operation and advanced debugging
|
||||
|
||||
### Migration Methods
|
||||
|
||||
#### Web Interface (Recommended)
|
||||
|
||||
1. Start the service: `soundtouch-service`
|
||||
2. Open `http://localhost:8000`
|
||||
3. Wait for device discovery to complete
|
||||
4. Click "Migrate" next to each device
|
||||
5. Monitor migration status in real-time
|
||||
|
||||
#### API Migration
|
||||
|
||||
```bash
|
||||
# Get migration summary first
|
||||
curl http://localhost:8000/setup/migration-summary/192.168.1.100
|
||||
|
||||
# Perform migration
|
||||
curl -X POST http://localhost:8000/setup/migrate/192.168.1.100
|
||||
|
||||
# Verify migration status
|
||||
curl http://localhost:8000/setup/devices
|
||||
```
|
||||
|
||||
#### Advanced Migration Options
|
||||
|
||||
```bash
|
||||
# Migration with proxy fallback for original services
|
||||
curl -X POST "http://localhost:8000/setup/migrate/192.168.1.100?proxy_url=http://localhost:8000&marge=original&stats=original"
|
||||
|
||||
# Migration with custom target URL
|
||||
curl -X POST "http://localhost:8000/setup/migrate/192.168.1.100?target_url=https://my-server.com:8000"
|
||||
```
|
||||
|
||||
### Post-Migration Verification
|
||||
|
||||
After migration, verify the device is working correctly:
|
||||
|
||||
```bash
|
||||
# Check device status
|
||||
curl http://localhost:8000/setup/devices
|
||||
|
||||
# Test preset functionality
|
||||
curl "http://192.168.1.100:8090/presets"
|
||||
|
||||
# Monitor device events (if needed)
|
||||
curl "http://localhost:8000/events/192.168.1.100"
|
||||
```
|
||||
|
||||
## API Reference
|
||||
|
||||
### Discovery & Setup
|
||||
- `GET /setup/devices`: List all discovered Bose devices.
|
||||
- `POST /setup/discover`: Trigger a new network scan.
|
||||
- `GET /setup/info/{deviceIP}`: Get detailed info for a specific device.
|
||||
- `POST /setup/migrate/{deviceIP}`: Configure a device to use this service as its backend.
|
||||
|
||||
### BMX (Bose Music eXperience)
|
||||
- `GET /bmx/registry/v1/services`: Service registry for the device.
|
||||
- `GET /bmx/tunein/v1/playback/station/{stationID}`: TuneIn playback bridge.
|
||||
#### `GET /setup/devices`
|
||||
Lists all discovered SoundTouch devices with their current status.
|
||||
|
||||
### Marge (Account & Device Management)
|
||||
- `GET /marge/streaming/sourceproviders`: List of available music services.
|
||||
- `GET /marge/accounts/{account}/full`: Mock account information.
|
||||
- `GET /marge/updates/soundtouch`: Mock software update endpoint.
|
||||
**Response:**
|
||||
```json
|
||||
[
|
||||
{
|
||||
"device_id": "08DF1F0BA325",
|
||||
"name": "Living Room Speaker",
|
||||
"ip_address": "192.168.1.100",
|
||||
"product_code": "SoundTouch 20",
|
||||
"firmware_version": "19.0.5",
|
||||
"migrated": true,
|
||||
"last_seen": "2024-01-15T10:30:00Z"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
### Proxy
|
||||
- `GET /proxy/{targetURL}`: Proxy requests through the service with logging.
|
||||
#### `POST /setup/discover`
|
||||
Triggers immediate network device discovery.
|
||||
|
||||
#### `GET /setup/info/{deviceIP}`
|
||||
Gets detailed device information and configuration.
|
||||
|
||||
#### `GET /setup/migration-summary/{deviceIP}`
|
||||
Analyzes device configuration and provides migration preview.
|
||||
|
||||
**Response:**
|
||||
```json
|
||||
{
|
||||
"device_name": "Living Room Speaker",
|
||||
"device_model": "SoundTouch 20",
|
||||
"firmware_version": "19.0.5",
|
||||
"ssh_success": true,
|
||||
"current_config": "<?xml version=\"1.0\"?>...",
|
||||
"planned_config": "<?xml version=\"1.0\"?>...",
|
||||
"remote_services_enabled": false,
|
||||
"migration_required": true
|
||||
}
|
||||
```
|
||||
|
||||
#### `POST /setup/migrate/{deviceIP}`
|
||||
Migrates device to use local services.
|
||||
|
||||
**Query Parameters:**
|
||||
- `target_url`: Custom service URL (optional)
|
||||
- `proxy_url`: Proxy URL for fallback (optional)
|
||||
- `marge`: Set to "original" to proxy Marge requests (optional)
|
||||
- `stats`: Set to "original" to proxy stats requests (optional)
|
||||
- `sw_update`: Set to "original" to proxy update requests (optional)
|
||||
- `bmx`: Set to "original" to proxy BMX requests (optional)
|
||||
|
||||
### BMX Services (Bose Media eXchange)
|
||||
|
||||
#### `GET /bmx/registry/v1/services`
|
||||
Returns available media services for device registration.
|
||||
|
||||
#### `GET /bmx/tunein/v1/playbook/station/{stationID}`
|
||||
Provides TuneIn station playback information.
|
||||
|
||||
#### `GET /bmx/tunein/v1/podcast/{podcastID}`
|
||||
Returns podcast episode information and playback URLs.
|
||||
|
||||
### Marge Services (Account & Device Management)
|
||||
|
||||
#### `GET /marge/streaming/sourceproviders`
|
||||
Lists available music service providers.
|
||||
|
||||
#### `GET /marge/accounts/{account}/devices/any/presets`
|
||||
Returns user presets for synchronization.
|
||||
|
||||
#### `GET /marge/accounts/{account}/devices/any/recents`
|
||||
Returns recent playback items.
|
||||
|
||||
#### `PUT /marge/accounts/{account}/devices/{device}/presets/{slot}`
|
||||
Updates a specific preset slot.
|
||||
|
||||
#### `POST /marge/streaming/support/addrecent`
|
||||
Adds item to recent playback history.
|
||||
|
||||
#### `GET /marge/updates/soundtouch`
|
||||
Returns software update configuration (disabled by default).
|
||||
|
||||
### Proxy Services
|
||||
|
||||
#### `GET /proxy/{encodedURL}`
|
||||
Proxies requests to external services with logging.
|
||||
|
||||
**Example:**
|
||||
```bash
|
||||
# Proxy request to Bose services
|
||||
curl "http://localhost:8000/proxy/aHR0cHM6Ly9hcGkuc291bmR0b3VjaC5ib3NlLmNvbS8="
|
||||
```
|
||||
|
||||
### Health & Monitoring
|
||||
|
||||
#### `GET /health`
|
||||
Returns service health status.
|
||||
|
||||
#### `GET /events/{deviceID}`
|
||||
WebSocket endpoint for real-time device events.
|
||||
|
||||
#### `GET /stats/usage`
|
||||
Returns usage statistics.
|
||||
|
||||
#### `GET /stats/errors`
|
||||
Returns error statistics.
|
||||
|
||||
## Web Interface
|
||||
|
||||
Access the management interface at `http://localhost:8000/`. The interface allows you to view discovered devices and manage their settings.
|
||||
### Overview
|
||||
|
||||
The web management interface provides a comprehensive dashboard for managing your SoundTouch devices:
|
||||
|
||||
**URL:** `http://localhost:8000/`
|
||||
|
||||
### Features
|
||||
|
||||
#### Device Dashboard
|
||||
- **Device Discovery**: Real-time view of discovered devices
|
||||
- **Migration Status**: Visual indicators of migration state
|
||||
- **Device Health**: Connectivity and service status monitoring
|
||||
- **Quick Actions**: One-click migration and configuration
|
||||
|
||||
#### Device Management
|
||||
- **Configuration Viewer**: Inspect current and planned device configs
|
||||
- **Migration Wizard**: Step-by-step device migration process
|
||||
- **Backup Management**: View and restore configuration backups
|
||||
- **Service Testing**: Test connectivity to local services
|
||||
|
||||
#### Monitoring & Debugging
|
||||
- **Traffic Logs**: Real-time proxy request/response logging
|
||||
- **Event Streaming**: Live device event monitoring
|
||||
- **Statistics Dashboard**: Usage and error analytics
|
||||
- **Debug Tools**: Device communication testing utilities
|
||||
|
||||
### Usage Tips
|
||||
|
||||
1. **First Time Setup**: The interface will guide you through initial device discovery
|
||||
2. **Migration Monitoring**: Watch migration progress in real-time with detailed status updates
|
||||
3. **Troubleshooting**: Use the debug tools to diagnose device connectivity issues
|
||||
4. **Log Analysis**: Enable detailed logging for development and troubleshooting
|
||||
|
||||
## Persistent Data
|
||||
|
||||
By default, the service creates a `data/` directory in the current working directory. This directory contains:
|
||||
- `default/devices/`: Configuration and state for each discovered device.
|
||||
- `usage_stats.json`: Logged device usage statistics.
|
||||
- `error_stats.json`: Logged device errors.
|
||||
### Data Directory Structure
|
||||
|
||||
By default, the service creates a `data/` directory in the current working directory:
|
||||
|
||||
```
|
||||
data/
|
||||
├── accounts/
|
||||
│ └── default/
|
||||
│ ├── devices/
|
||||
│ │ ├── {DEVICE_ID}/
|
||||
│ │ │ ├── DeviceInfo.xml
|
||||
│ │ │ └── config_backup_*.xml
|
||||
│ │ └── ...
|
||||
│ ├── Sources.xml
|
||||
│ ├── Presets.xml
|
||||
│ └── Recents.xml
|
||||
├── stats/
|
||||
│ ├── usage/
|
||||
│ │ └── *.json
|
||||
│ └── error/
|
||||
│ └── *.json
|
||||
└── events/
|
||||
└── device_events_*.log
|
||||
```
|
||||
|
||||
### Data Components
|
||||
|
||||
#### Device Data (`accounts/default/devices/{DEVICE_ID}/`)
|
||||
- **DeviceInfo.xml**: Device metadata and capabilities
|
||||
- **config_backup_*.xml**: Configuration backups before migration
|
||||
- **presets.xml**: Device-specific preset configurations
|
||||
|
||||
#### Account Data (`accounts/default/`)
|
||||
- **Sources.xml**: Configured music service providers
|
||||
- **Presets.xml**: Cross-device preset synchronization
|
||||
- **Recents.xml**: Recent playback history
|
||||
|
||||
#### Statistics (`stats/`)
|
||||
- **usage/**: Device usage analytics and patterns
|
||||
- **error/**: Error logs and diagnostic information
|
||||
|
||||
#### Events (`events/`)
|
||||
- **device_events_*.log**: Device event history and debugging logs
|
||||
|
||||
### Data Management
|
||||
|
||||
#### Backup Strategy
|
||||
```bash
|
||||
# Manual backup
|
||||
cp -r data/ backup-$(date +%Y%m%d)/
|
||||
|
||||
# Automated backup (cron example)
|
||||
0 2 * * * cp -r /path/to/data/ /backup/soundtouch-$(date +\%Y\%m\%d)/
|
||||
```
|
||||
|
||||
#### Data Migration
|
||||
```bash
|
||||
# Moving to new server
|
||||
tar czf soundtouch-data.tar.gz data/
|
||||
# Transfer to new server
|
||||
tar xzf soundtouch-data.tar.gz
|
||||
```
|
||||
|
||||
#### Cleanup
|
||||
```bash
|
||||
# Clean old event logs (older than 30 days)
|
||||
find data/events/ -name "*.log" -mtime +30 -delete
|
||||
|
||||
# Clean old statistics (older than 90 days)
|
||||
find data/stats/ -name "*.json" -mtime +90 -delete
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Common Issues
|
||||
|
||||
#### Device Not Discovered
|
||||
```bash
|
||||
# Check network connectivity
|
||||
ping 192.168.1.100
|
||||
|
||||
# Trigger manual discovery
|
||||
curl -X POST http://localhost:8000/setup/discover
|
||||
|
||||
# Check device accessibility
|
||||
curl http://192.168.1.100:8090/info
|
||||
```
|
||||
|
||||
#### Migration Failures
|
||||
```bash
|
||||
# Check SSH connectivity
|
||||
ssh-keyscan 192.168.1.100
|
||||
|
||||
# Get migration summary
|
||||
curl http://localhost:8000/setup/migration-summary/192.168.1.100
|
||||
|
||||
# Verify device configuration
|
||||
curl http://192.168.1.100:8090/info
|
||||
```
|
||||
|
||||
#### Service Connectivity Issues
|
||||
```bash
|
||||
# Test local service endpoints
|
||||
curl http://localhost:8000/health
|
||||
curl http://localhost:8000/bmx/registry/v1/services
|
||||
curl http://localhost:8000/marge/streaming/sourceproviders
|
||||
```
|
||||
|
||||
### Debug Mode
|
||||
|
||||
Enable debug logging for detailed troubleshooting:
|
||||
|
||||
```bash
|
||||
LOG_PROXY_BODY=true REDACT_PROXY_LOGS=false soundtouch-service
|
||||
```
|
||||
|
||||
### Log Analysis
|
||||
|
||||
```bash
|
||||
# Monitor service logs
|
||||
tail -f /var/log/soundtouch-service.log
|
||||
|
||||
# Analyze proxy traffic
|
||||
grep "PROXY" /var/log/soundtouch-service.log
|
||||
|
||||
# Check device events
|
||||
ls -la data/events/
|
||||
```
|
||||
|
||||
## Credits & Inspiration
|
||||
|
||||
This service implementation is based on and inspired by several excellent community projects:
|
||||
|
||||
### SoundCork
|
||||
- **Project**: [SoundCork](https://github.com/deborahgu/soundcork)
|
||||
- **Authors**: Deborah Gu and contributors
|
||||
- **Contribution**: The architecture and service emulation approach in this Go implementation is heavily based on SoundCork's pioneering Python implementation. SoundCork provided the foundation for understanding Bose's service architecture and migration strategies.
|
||||
|
||||
### ÜberBöse API
|
||||
- **Project**: [ÜberBöse API](https://github.com/julius-d/ueberboese-api)
|
||||
- **Author**: Julius D.
|
||||
- **Contribution**: Advanced API endpoint discovery and implementation details that helped make this service more complete and robust.
|
||||
|
||||
We are grateful to these projects for paving the way and providing the research foundation that made this comprehensive service implementation possible.
|
||||
|
||||
## Advanced Usage
|
||||
|
||||
### Custom Service Integration
|
||||
|
||||
```go
|
||||
// Example: Custom BMX service handler
|
||||
package main
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"github.com/go-chi/chi/v5"
|
||||
)
|
||||
|
||||
func customBMXHandler(w http.ResponseWriter, r *http.Request) {
|
||||
// Custom BMX service logic
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.Write([]byte(`{"custom": "service"}`))
|
||||
}
|
||||
|
||||
func main() {
|
||||
r := chi.NewRouter()
|
||||
r.Get("/bmx/custom/endpoint", customBMXHandler)
|
||||
http.ListenAndServe(":8000", r)
|
||||
}
|
||||
```
|
||||
|
||||
### Integration with Home Assistant
|
||||
|
||||
```yaml
|
||||
# configuration.yaml
|
||||
soundtouch:
|
||||
- host: 192.168.1.100
|
||||
port: 8090
|
||||
name: "Living Room Speaker"
|
||||
|
||||
rest:
|
||||
- resource: "http://localhost:8000/setup/devices"
|
||||
scan_interval: 60
|
||||
sensor:
|
||||
- name: "SoundTouch Devices"
|
||||
value_template: "{{ value_json | length }}"
|
||||
```
|
||||
|
||||
### Monitoring & Alerting
|
||||
|
||||
```bash
|
||||
# Health check script
|
||||
#!/bin/bash
|
||||
response=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8000/health)
|
||||
if [ $response != "200" ]; then
|
||||
echo "SoundTouch service is down!" | mail -s "Alert" admin@example.com
|
||||
fi
|
||||
```
|
||||
|
||||
## Security Considerations
|
||||
|
||||
- **Network Security**: The service binds to all interfaces by default. Consider using `BIND_ADDR=127.0.0.1` for localhost-only access.
|
||||
- **SSH Access**: Migration requires SSH access to devices. Ensure your network security policies allow this.
|
||||
- **Proxy Logging**: Disable `REDACT_PROXY_LOGS` only in development environments.
|
||||
- **Data Protection**: The data directory contains device configurations and usage patterns. Secure appropriately.
|
||||
|
||||
## Performance Tuning
|
||||
|
||||
### Resource Usage
|
||||
- **Memory**: ~50MB baseline + ~5MB per discovered device
|
||||
- **CPU**: Minimal during steady state, ~10% during discovery/migration
|
||||
- **Disk**: ~1MB per device configuration + logs
|
||||
|
||||
### Scaling Considerations
|
||||
```bash
|
||||
# For many devices, increase discovery interval
|
||||
DISCOVERY_INTERVAL=10m soundtouch-service
|
||||
|
||||
# For high-traffic environments, consider reverse proxy
|
||||
nginx -> soundtouch-service instances
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user