Skip to main content

Bose SoundTouch

The Bose SoundTouch driver controls SoundTouch speakers and soundbars (10/20/30, SoundTouch 300, Wave SoundTouch IV) through the local HTTP+XML API on port 8090. One GEM device represents one speaker.

Status

Transport (play/pause/stop/skip), volume and mute, presets 1-6, source switching (AUX/Bluetooth), and live now-playing polling are wired. The passthrough style command and group/zone (multi-room) management are not implemented in this driver — for whole-home grouping use the SoundTouch app or wire each speaker as its own GEM device.

Prerequisites

  • SoundTouch speaker on the LAN with current firmware and the SoundTouch mobile app paired.
  • Static IP or DHCP reservation on the speaker — GEM does not auto-discover SoundTouch units.
  • TCP 8090 reachable from the GEM host to the speaker.

Setup

  1. Pair the speaker in the Bose SoundTouch mobile app and configure presets 1-6.
  2. Reserve the speaker's IP in DHCP.
  3. In System > Devices, create a device with driver bose_soundtouch. Set the ip attribute. Port defaults to 8090.
  4. Verify connectivity from the Script Console:
    await gem.command({device: <device_id>, action: 'get_info'});
    The response will include the speaker's name and MAC.
  5. The driver polls /now_playing and /volume every status_interval ms; track, artist, source, volume, mute, and play state attributes update automatically.

Attribute reference

Device attributes

AttributeTypeRequiredDescription
ipstringyesLAN IP of the speaker.
portintnoHTTP port. Default 8090. Some early units use 8091.
status_intervalintnoPoll interval in milliseconds. Default 5000.

The driver reflects the following attributes onto the device as state changes:

AttributeTypeSource
volumeint/volume actualvolume (0-100).
mute_statestringon / off.
play_statestringPLAY_STATE, PAUSE_STATE, STOP_STATE, BUFFERING_STATE, etc.
sourcestringSTANDBY, INTERNET_RADIO, BLUETOOTH, AUX, etc.
trackstringNow-playing track title (when present).
artiststringNow-playing artist (when present).

Zone address format

This driver does not use zones — each speaker is its own device.

Commands

CommandArgsNotes
play / pause / stop / play_pauseTransport keys.
next_track / previous_track
power_toggleSoundTouch only exposes a single POWER toggle key — there is no on/off pair.
volumelevel (0-100)Sets absolute volume.
volume_up / volume_down / mute_toggle
play_presetpreset (1-6)Triggers the preset configured in the SoundTouch app.
set_sourcesource (AUX_INPUT, BLUETOOTH)Switches inputs.
send_keykeySends any raw SoundTouch key press.
get_now_playing / get_volume / get_info / get_presets / get_sourcesRead endpoints.

Known limitations

  • Multi-room grouping (zones) is not supported by this driver. The Bose Zone API is documented but commercial install patterns are usually one-speaker-per-room, so we kept the surface focused.
  • The SoundTouch API does not expose per-track album art beyond a URL field; only track and artist text are mirrored as attributes.
  • Source switching is key-based, not name-based — there is no "set input HDMI-2" call. Use play_preset for source-tied presets.

Troubleshooting

SymptomCheck
No response on port 8090Verify firmware is current and the SoundTouch app can control the speaker. Try port 8091 on early units.
Volume changes but state does not appear in GEMReduce status_interval to 2000ms while debugging.
Presets do nothingOpen the SoundTouch app and assign presets 1-6 first; the driver triggers PRESET_N keys but does not assign them.
401 / 403 from /infoSome firmware locks down API access until the speaker has been paired in the SoundTouch mobile app. Run pairing in the app first.