Documentation for controlling and preserving Bose SoundTouch devices
| File/Location | Purpose | Notes |
|---|---|---|
/mnt/nv/BoseApp-Persistence/1/IoT.xml |
Main IoT configuration | Contains clientID, endpoint, deployment |
/opt/Bose/IoT |
IoT service binary | ARM executable, AWS IoT SDK |
/mnt/nv/IoTCerts/ |
Certificate storage | Device certs and private keys |
/etc/init.d/SoundTouch |
System startup script | Creates directory structure |
/opt/Bose/etc/Shepherd-noncore.xml |
Service configuration | Defines IoT daemon startup |
<Configuration
clientID="[UUID]"
iotEndpoint="[AWS_IOT_ENDPOINT]"
deployment="PROD" />
clientID="577ecfcc-2db3-4989-92c9-76d7704f9fb3"clientID="eb1a6d8f-0bb1-4aa7-9113-ea673fcef96e"a2bhvr9c4wn4ya.iot.us-east-1.amazonaws.com (XML)amqmidtcohfms.iot.us-east-1.amazonaws.com (hardcoded)Application Layer: AWS IoT Device Shadows (JSON)
Presentation Layer: RapidJSON parsing/serialization
Session Layer: MQTT v3.1.1
Transport Layer: TLS v1.2
Network Layer: TCP/IP
| 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 |
$aws/things/{clientID}/shadow/update
$aws/things/{clientID}/shadow/update/accepted
$aws/things/{clientID}/shadow/update/rejected
$aws/things/{clientID}/shadow/delete
{
"state": {
"reported": {
"deviceState": "CONNECTED",
"powerState": "ON",
"zoneState": "...",
"groupState": "..."
}
}
}
{
"state": {
"reported": {
"deviceState": "DISCONNECTED"
}
}
}
https://voice.api.bose.io/alexa/certificate/mnt/nv/IoTCerts/mkdir -p /mnt/nv/BoseLog /mnt/nv/IoTCerts /mnt/nv/BoseApp-Persistence/1
mkdir -m 700 -p /mnt/nv/BoseApp-Persistence/1/Keys
"Connection attempt %u to MQTT port at host %s""MQTT port not available. Retrying in %u seconds""Device connected with MQTT""got shadow response: accepted. Payload: %s""Failed to register device and get certificate, retrying""MQTT port is open""Successfully connected to MQTT server""Disconnecting from IoT server""UpdateShadow called when network is not ready"/mnt/nv/IoTCerts/# Subscribe to device shadow events (own device only)
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/577ecfcc-2db3-4989-92c9-76d7704f9fb3/shadow/#'
# Network traffic capture (less intrusive)
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"
// Power state change
{"state":{"reported":{"powerState":"ON","deviceState":"CONNECTED"}}}
// Volume adjustment
{"state":{"reported":{"volume":25,"muted":false}}}
// Zone configuration
{"state":{"reported":{"zoneState":"master","groupMembers":["device1"]}}}