TapHome

Bluesound

Packet Parser → HTTP
Submitted by
Last updated: 08. 2026

This device supports mDNS

Instead of using an IP address, you can reach the device at:

{MODEL}-{MAC4}.local

Replace {MAC} with your device's MAC address (uppercase, no colons).

TapHome supports mDNS — using a hostname is more reliable than a static IP.

Bluesound

Bluesound is a multiroom audio range built on BluOS, Lenbrook’s streaming platform for lossless audio up to 24-bit/192 kHz. Every BluOS player serves the BluOS Custom Integration API on the local network: plain HTTP GET requests on TCP port 11000, UTF-8 XML responses, no authentication and no cloud account. TapHome talks to the player directly over the LAN.

The template is not model-specific — it carries no model or producer binding and speaks only the HTTP API, so it applies to the whole current lineup (NODE, NODE X, NODE NANO, NODE ICON, POWERNODE, POWERNODE EDGE, PULSE, PULSE M, PULSE MINI, PULSE FLEX, PULSE CINEMA, PULSE CINEMA MINI, PULSE SOUNDBAR, VAULT and HUB) as well as earlier generations. Because BluOS is also shipped by NAD Electronics, DALI, PSB Speakers, Monitor Audio, Roksan, Cyrus and Peachtree, players from those brands serve the same API and respond to the same requests.

Network connection

There is no wiring to do. A BluOS player joins the home network over Ethernet or Wi-Fi through the BluOS Controller app’s setup wizard, and TapHome reaches it over HTTP afterwards. The only requirement is that the TapHome control unit and the player sit on the same LAN segment, with port 11000 open between them.

Port 11000 applies to every BluOS player with one documented exception: the NAD CI580 houses four streamer nodes in a single chassis on ports 11000 / 11010 / 11020 / 11030. The template addresses port 11000 only, so on a CI580 it controls node 1.

Configuration

Finding the player IP address

The address is shown in the Diagnostics screen of the BluOS Controller app:

  • Android / iOSPlayers tab → select the player → Home tab → Settings → under Help & Support tap Diagnostics.
  • Windows / macOSPlayer Drawer → select the player → left Navigation DrawerHelp → Diagnostics.

The same screen lists the addresses of the other players on the network under Other Players. Without the app, opening http://<player_ip>:11000/SyncStatus in a browser returns the player’s id (address and port) together with its mac attribute.

Keeping the address stable

The template addresses the player by IP, so a changed DHCP lease silently stops the integration. Lenbrook explicitly recommends a router-side DHCP reservation over a static address configured on the player:

  1. Open the router’s admin panel and find the DHCP / LAN reservation settings.
  2. Enter the player’s MAC address — the /SyncStatus response carries it, so it can be read over HTTP without the app.
  3. Assign the address the player should keep, and save.
  4. Reboot the player so it renews its lease, then verify it picked up the reserved address.
Template import

The template has a single import parameter, IpAddress (placeholder 192.168.0.1). Enter the player’s address; port 11000 and the request format are already part of the template.

Required post-import setup — Group With Player

The Group With Player switch ships with its IP variable set to the literal placeholder 192.168.x.x. This is not a working default — until it is replaced, the read script looks for 192.168.x.x among the player’s secondary players, never finds it, and the switch reads permanently off.

After importing the template, open the Group With Player device in the TapHome app and set IP to the address of the player that should be attached as the group secondary. Use the Diagnostics screen described above (Other Players lists exactly these addresses) or read /SyncStatus on any player on the network.

Every other device in the template works as soon as IpAddress is filled in. Group With Player is the one device that needs a second value after import — leave 192.168.x.x in place and the switch will appear broken rather than report an error.

Device capabilities

Transport control

Five push buttons drive playback:

  • Play — starts the current audio source. It resumes a paused player, but a stopped player does not restart from it.
  • Pause — sends a toggle, so the same button pauses a playing player and resumes a paused one. If an alarm with a timeout is playing, pausing also cancels that timeout.
  • Stop — stops playback. Unlike Pause, a stopped player cannot be resumed with Play. Stopping also cancels a running alarm timeout.
  • Next Track — skips forward in the play queue and wraps to the first track at the end of the queue, whatever the repeat setting is.
  • Previous Track — restarts the current track if it has been playing longer than four seconds, otherwise steps back to the previous track.

These buttons act on the play queue. When the player is streaming a radio station or playing a physical input, the queue is not the audio source and skip / back are unavailable — the API handles that case through a separate endpoint that the template does not use.

Volume

Volume is a dimmer. It reads the player’s level (0–100) and scales it to the 0.0–1.0 dimmer range; writing a level sends the value back as a whole percentage. Switching the dimmer off sends a mute command rather than volume 0, so the player’s own level is preserved and unmuting restores it.

Both writes carry tell_slaves=1, which corresponds to the group volume slider in the BluOS Controller app: when the player is a group primary, every player in the group moves together rather than the addressed player alone.

The player’s usable volume range is configured in the BluOS Controller app under Settings → Player → Audio and is typically −80…0 dB. All levels are clamped into that range, so a TapHome dimmer at 100 % does not necessarily mean 0 dB. Players with a fixed line-level output report no usable volume at all, and the dimmer then shows a nonsensical level rather than an error.

The volume dimmer polls the player every 2.5 seconds, while the BluOS API asks integrations that do not use long polling to send at most one request every 30 seconds. On a single player this is a handful of small requests per minute, but it adds up across a house full of players — keep it in mind on constrained Wi-Fi, and prefer wired players where the network is busy.

Shuffle and repeat

Shuffle switches queue shuffling on and off. Shuffling rebuilds the queue; the original order is restored when it is switched off again.

Repeat is a three-state switch — No repeat, Repeat one and Repeat all. TapHome orders these slots the opposite way to the API, and the template applies the same remap on read and on write, so both directions stay consistent.

Both devices read their state from a value the module caches on its own 30-second status poll rather than issuing requests of their own. That keeps the network traffic down, at the cost of up to 30 seconds before a change made in the BluOS app shows up in TapHome.

Presets

Preset recalls a preset saved on the player — a radio station, a playlist or an input. Presets can only be created and deleted in the BluOS Controller app; the API can just load them.

The device is write-only: it sends the preset command but never reads back which preset is playing, so the switch does not reflect the player’s actual state.

Use preset slots 1–9. Slot 0 sends preset id 64 rather than 0, which looks like a leftover placeholder rather than a real preset. Preset ids also do not have to be sequential — a player can hold presets 1, 2, 3, 5, 7 and 8 — so check in the BluOS Controller app which ids actually exist before wiring a slot into a scene.

Multiroom grouping

Group With Player attaches a second BluOS player to this one. The player TapHome addresses becomes the primary: it selects the music source and distributes its audio, while the player named by the IP variable joins as a secondary. Switching the device off removes that player from the group again. The state is read back from the player’s list of attached secondaries, so grouping done from the BluOS app is reflected in TapHome.

Two consequences follow from how BluOS grouping works:

  • Only external inputs connected to the primary player reach the rest of the group. If TV audio from an optical or HDMI input should play everywhere, TapHome must address the player carrying that input.
  • The BluOS Controller app manages at most eight groups of eight players, or four groups of sixteen. One TapHome switch handles one primary–secondary pair, so a three-player group needs a second switch.

The grouping requests use a parameter spelling that mixes the API’s singular and plural forms. It works in practice because port 11000 is the documented default, but it is worth knowing if a group command ever behaves unexpectedly.

Sample buttons — demonstrations, not player features

The template ships with two buttons named Sample - Jungle and Sample - Shutdown. They are demonstrations of URL streaming, not capabilities of the player: each one stops playback, clears the play queue and plays a single audio file from a URL stored in the device’s variable.

They are meant to be edited or deleted. The Jungle sample points at a third-party sample host outside TapHome’s control and will break whenever that site changes. The Shutdown sample points at a TapHome-hosted MP3 and is a usable pattern for a doorbell or announcement sound if the URL is replaced with one of your own — note that the address has to be percent-encoded, because it is passed straight through to the player.

Troubleshooting

The player does not respond
  1. Open http://<player_ip>:11000/SyncStatus in a browser — an XML response means the player is reachable and the API is live.
  2. If it does not respond, check the address in the BluOS Controller app’s Diagnostics screen; a DHCP renewal may have moved it. Set up the DHCP reservation described above so it stops happening.
  3. Try the player’s mDNS hostname instead of the IP address.
  4. Confirm the TapHome control unit and the player are on the same network / VLAN and that nothing blocks port 11000 between them.
The grouping switch never turns on

The IP variable on Group With Player is still the placeholder 192.168.x.x, or it holds an address that is not a BluOS player. Set it to the secondary player’s real address — see the post-import setup above.

A preset does nothing

Either the slot has no preset behind it on this player, or slot 0 was used. Open the BluOS Controller app, check which preset ids the player actually holds, and map the TapHome slots to those ids. Presets have to be created in the app first — the template cannot create them.

Next / Previous do nothing

The player is not playing from its queue. Radio streams and physical inputs are not queue-based, and skip / back do not apply to them. Start playback from a playlist, an album or the queue and the buttons work again.

Changes made in the BluOS app show up late

Shuffle and repeat are read from the module’s cached status, which refreshes every 30 seconds. Volume is polled more often. Transport buttons and Preset are write-only and never reflect external changes at all.

The player is muted but TapHome shows a level

Muting is written when the volume dimmer is switched off, but the mute state is never read back. A player muted from the BluOS Controller app or its remote keeps showing its previous dimmer level in TapHome. Toggle the dimmer off and on to bring the two back in sync.

Available devices

Bluesound Module
Custom Variables

Bluesound

Read (module)
var response := SENDHTTPREQUEST("/Status");
shuffle := PARSEXML(response.Content, "//shuffle");
repeat := PARSEXML(response.Content, "//repeat");
Next Track Push Button

Skips to the next track in the play queue, wrapping to the first track at the end of the queue regardless of the repeat setting

button push

Next Track

Write button state
SENDHTTPREQUEST("/Skip");
Volume Dimmer

Player volume — switching the dimmer off mutes the player instead of setting the level to zero, and the change is applied to every player in the group

numeric Unit: % dimmer

Volume

Read level
var response := SENDHTTPREQUEST("/Volume");
PARSEXML(response.Content, "//volume") / 100;
Write level
if St
	SENDHTTPREQUEST("/Volume?level=" + round(Le*100) + "&tell_slaves=1");
else
	SENDHTTPREQUEST("/Volume?mute=1&tell_slaves=1");
end
Shuffle Switch

Shuffle state of the play queue — the state is read from the module's cached /Status value while the write goes out over HTTP

boolean switch
Values / States: ${shuffle} · ${noShuffle}

Shuffle

Read switch state
shuffle
Write switch state
var response := SENDHTTPREQUEST("/Shuffle?state=" + St);
shuffle := PARSEXML(response.Content, "//playlist/@shuffle");
Repeat Multi-value Switch

Repeat mode — No repeat, Repeat one track, or Repeat the whole play queue

enum multi-value
Values / States: No repeat · Repeat one · Repeat all

Repeat

Read switch state
switch(repeat,0,2,1,1,0)
Write switch state
var tmp := switch(Mu,0,2,1,1,0);
var response := SENDHTTPREQUEST("/Repeat?state=" + switch(Mu,0,2,1,1,0));
repeat := PARSEXML(response.Content, "//playlist/@repeat");
Pause Push Button

Toggles between paused and playing — pressing the button again resumes playback

button push

Pause

Write button state
SENDHTTPREQUEST("/Pause?toggle=1");
Previous Track Push Button

Restarts the current track if it has been playing for more than four seconds, otherwise steps back to the previous track in the queue

button push

Previous Track

Write button state
SENDHTTPREQUEST("/Back");
Play Push Button

Starts playback of the current audio source — resumes a paused player, but not a stopped one

button push

Play

Write button state
SENDHTTPREQUEST("/Play");
Preset Multi-value Switch

Loads a preset saved on the player — radio stations, playlists and inputs, created only in the BluOS Controller app. Write-only, so the switch does not show which preset is playing

enum multi-value

Preset

Write switch state
SENDHTTPREQUEST("/Preset?id=" + Mu);
Sample - Jungle Push Button

Demonstration of URL streaming, not a player feature — stops playback, clears the play queue and plays one audio file from the configured URL

button push
Variable: encodedURLURL-encoded address of the audio stream this button plays. The shipped default points at a third-party sample host and should be replaced

Sample - Jungle

Write button state
SENDHTTPREQUEST("/Stop");
SENDHTTPREQUEST("/Clear");
SENDHTTPREQUEST("/Play?url=" + encodedURL);
Sample - Shutdown Push Button

Second demonstration of URL streaming — stops playback, clears the play queue and plays one audio file from the configured URL

button push
Variable: encodedURLURL-encoded address of the audio stream this button plays

Sample - Shutdown

Write button state
SENDHTTPREQUEST("/Stop");
SENDHTTPREQUEST("/Clear");
SENDHTTPREQUEST("/Play?url=" + encodedURL);
Group With Player Switch

Attaches a second BluOS player as a group secondary — the player TapHome controls becomes the group primary and distributes its audio. Requires the other player's IP address to be filled in after import

boolean switch
Values / States: ON · OFF
Variable: IPIP address of the BluOS player to attach as the group secondary. The shipped value 192.168.x.x is a placeholder and must be replaced, otherwise the switch stays permanently off

Group With Player

Read switch state
var response := SENDHTTPREQUEST("/SyncStatus");
var slaves := PARSEXML(response.Content, "//SyncStatus/slave/@id");
indexof(slaves, IP) >= 0
Write switch state
if St
	SENDHTTPREQUEST("/AddSlave?slave=" + IP + "&ports=11000");
else
	SENDHTTPREQUEST("/RemoveSlave?slave=" + IP + "&ports=11000");
end
Stop Push Button

Stops playback — unlike Pause, a stopped player cannot be resumed with Play

button push

Stop

Write button state
SENDHTTPREQUEST("/Stop");
Connection: Packet Parser → HTTP • Hostname: {MODEL}-{MAC4}.local
Possible improvements (17)
  • Long Polling — Holds the connection open and returns only when something changes. Would cut request volume substantially and is the mechanism the documented 30 s polling ceiling exists to make unnecessary. The template uses plain repeated GETs on 2.5 s / 10 s / 30 s intervals.
  • Now Playing Metadata — Playback state, three-line track description, album art URL, track length and elapsed seconds. The module already fetches /Status every 30 s but only extracts shuffle and repeat from it, so this would cost no extra requests.
  • Mute State (read) — The volume dimmer writes /Volume?mute=1 when switched off but never reads mute back, so a player muted from the BluOS app still shows its old dimmer level in TapHome.
  • Doorbell Chime — Plays the player's configured chime at its configured chime volume without touching the play queue. The most obviously useful addition for a smart home — the Sample buttons approximate it far more crudely by clearing the queue.
  • Direct Input Selection — Switches the player to a physical input by type and index — spdif, analog, coax, bluetooth, arc, earc, phono, computer, aesebu, balanced, microphone. Requires BluOS firmware 4.2.0 or newer; older firmware uses /Play?inputIndex=. Natural fit for a multi-value switch.
  • Input Discovery — Lists the inputs actually present on the player, including inputs shared by a BluOS HUB elsewhere on the network. HUB input selection is only supported through this route plus /Play?url=.
  • List Presets — Returns the real preset ids, names and artwork. Would let the Preset device show what it is actually switching between instead of a fixed 0–9 list.
  • Next / Previous Preset — Steps through presets without knowing their ids — two push buttons would cover it and would not depend on the ids matching.
  • Relative Volume Step — Volume up / down by a dB step (typical value 2 dB). Cheaper than the dimmer for wall-button control and does not need the current level to be read first.
  • Absolute dB Volume — Sets volume on the dB scale instead of the 0–100 percentage, which is what the player's configured volume range is actually expressed in.
  • Play Queue Management — List the queue, delete or move a track, save the queue as a named playlist. The template only uses /Clear, and only inside the two demo buttons.
  • Content Browsing and Search — Navigate and search music services, local library, playlists and inputs. A large surface that does not map naturally onto TapHome device models, but it is the reason the template has no way to choose what plays beyond presets.
  • Radio Station Actions — Skip, back, love and ban on streaming radio stations that do not use the play queue. This is what Next Track and Previous Track would need to fall back to when /Status carries a <streamUrl>.
  • Player Identity and Group Name — MAC address (the value a router DHCP reservation needs), player name, model, brand and the current group name. The grouping switch already fetches /SyncStatus every 30 s, so these would be free service attributes.
  • Battery Level — Present only on players with a battery pack, such as PULSE FLEX with the BP100 — state of charge in percent plus a charging flag.
  • Bluetooth Mode — Manual, Automatic, Guest or Disabled. Useful for locking guest access to a player from a scene.
  • Soft Reboot — The only POST endpoint in the API — the PacketParser HTTP module issues GETs, so this would need a different mechanism.

Sources

Found a problem with this device template?

Tell us what's wrong, what's missing, or how the template should behave. We rely on your feedback to keep the catalog accurate.

Verified by TapHome

Want to use this in your TapHome Core?

Open this template in the Customer Portal to apply it to one of your homes, or to draft a refinement and submit it back to the catalog.

Open in portal