Documentation for controlling and preserving Bose SoundTouch devices
This document provides a detailed analysis of the AWS IoT configuration system used by Bose SoundTouch devices, based on firmware backup analysis from ST10 and ST20 models.
The IoT configuration is stored in XML format at:
/mnt/nv/BoseApp-Persistence/1/IoT.xml<?xml version="1.0" encoding="UTF-8" ?>
<Configuration clientID="uuid1"
iotEndpoint="a2bhvr9c4wn4ya.iot.us-east-1.amazonaws.com"
deployment="PROD" />
<?xml version="1.0" encoding="UTF-8" ?>
<Configuration clientID="uuid2"
iotEndpoint="a2bhvr9c4wn4ya.iot.us-east-1.amazonaws.com"
deployment="PROD" />
clientID (UUID format)PROD)Location: /opt/Bose/IoT
The IoT binary manages the following certificate files:
| File | Location | Purpose |
|---|---|---|
iot-cert.pem.crt |
/mnt/nv/IoTCerts/ |
Device client certificate |
iot-private.pem.key |
/mnt/nv/IoTCerts/ |
Device private key |
rootCA.crt |
/var/lib/iot/ |
AWS IoT Root CA certificate |
https://voice.api.bose.io/alexa/certificate/mnt/nv/IoTCerts/amqmidtcohfms.iot.us-east-1.amazonaws.coma2bhvr9c4wn4ya.iot.us-east-1.amazonaws.comThe system uses AWS IoT Device Shadows for state management:
$aws/things/{thing_name}/shadow/update
$aws/things/{thing_name}/shadow/update/accepted
$aws/things/{thing_name}/shadow/update/rejected
$aws/things/{thing_name}/shadow/delete
{
"state": {
"desired": {},
"reported": {
"deviceState": "CONNECTED|DISCONNECTED",
"powerState": "ON|OFF",
"zoneState": "...",
"groupState": "..."
}
},
"version": 0,
"clientToken": "...",
"timestamp": 0
}
CONNECTED/DISCONNECTED)The IoT service is managed by the Shepherd daemon system:
Configuration: /opt/Bose/etc/Shepherd-noncore.xml
<ShepherdConfig>
<daemon name="STSCertified"/>
<daemon name="IoT"/>
<daemon name="TPDA">
<arg>-c</arg>
<arg>/opt/Bose/etc/Voice.xml</arg>
</daemon>
</ShepherdConfig>
The SoundTouch init script (/etc/init.d/SoundTouch) ensures proper directory structure:
mkdir -p /mnt/nv/BoseLog /mnt/nv/IoTCerts /mnt/nv/BoseApp-Persistence/1
mkdir -m 700 -p /mnt/nv/BoseApp-Persistence/1/Keys
From runtime analysis (/var/run/shepherd/pids):
/opt/Bose/IoT)
/opt/Bose/BoseApp)
/etc/init.d/SoundTouch)
/opt/Bose/etc/Shepherd-noncore.xml)
/mnt/nv/IoTCerts/ for valid certificatesThe IoT binary provides extensive logging for:
With access to the device’s private key and certificate, it’s technically possible to subscribe to MQTT events:
# Subscribe to device shadow events
mosquitto_sub -h a2bhvr9c4wn4ya.iot.us-east-1.amazonaws.com \
-p 8883 --cafile /var/lib/iot/rootCA.crt \
--cert /mnt/nv/IoTCerts/iot-cert.pem.crt \
--key /mnt/nv/IoTCerts/iot-private.pem.key \
-t '$aws/things/_uuid_/shadow/#'
Device certificates are bound to specific policies that typically restrict:
$aws/things/{clientID}/shadow/*){
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:Connect",
"Resource": "arn:aws:iot:us-east-1:*:client/${iot:ClientId}"
},
{
"Effect": "Allow",
"Action": ["iot:Publish", "iot:Subscribe", "iot:Receive"],
"Resource": [
"arn:aws:iot:us-east-1:*:topic/$aws/things/${iot:ClientId}/shadow/*",
"arn:aws:iot:us-east-1:*:topicfilter/$aws/things/${iot:ClientId}/shadow/*"
]
}
]
}
A less intrusive method to analyze MQTT communication patterns:
# Capture encrypted MQTT traffic from the actual device
tcpdump -i eth0 -s0 -w soundtouch_iot.pcap host a2bhvr9c4wn4ya.iot.us-east-1.amazonaws.com
# Monitor connection patterns
tcpdump -i eth0 -n "host a2bhvr9c4wn4ya.iot.us-east-1.amazonaws.com and port 8883"
For development and testing, create a local MQTT broker that mimics AWS IoT behavior:
# Install and configure Mosquitto
sudo apt-get install mosquitto mosquitto-clients
# Create test shadow topics
mosquitto_pub -h localhost -t '$aws/things/test-device/shadow/update' \
-m '{"state":{"reported":{"deviceState":"CONNECTED"}}}'
If monitoring is successful, typical shadow messages include:
// Power state change
{
"state": {
"reported": {
"powerState": "ON",
"deviceState": "CONNECTED",
"timestamp": 1703875200
}
}
}
// Volume adjustment
{
"state": {
"reported": {
"volume": 25,
"muted": false
}
}
}
// Zone configuration
{
"state": {
"reported": {
"zoneState": "master",
"groupMembers": ["device1", "device2"]
}
}
}
The Bose SoundTouch IoT configuration system is a sophisticated implementation using AWS IoT Core for real-time device management. The system provides:
This architecture enables seamless remote control, monitoring, and coordination of SoundTouch devices across multiple platforms and services.