Summary

The BSS Audio BLU-10BLU is a wall-mount programmable Ethernet controller in the Soundweb London family. This spec covers third-party control of the device via the Harman HiQnet protocol (revision 2) over TCP/IP and UDP on IANA port 3804, with an RS-232 packet-service option documented for the protocol family. HiQnet is a transport-agnostic, peer-to-peer, parameter-addressed protocol: control is expressed as message IDs operating on a hierarchy of Device → Virtual Device → Object → Parameter, whose concrete addresses are configuration-specific and are obtained from HiQnet Audio Architect / London Architect.

Transport

protocols:
  - tcp
  - udp
  - serial
addressing:
  port: 3804  # IANA "HiQnet-port 3804/tcp Harman HiQnet Port"; same port for UDP
serial:
  baud_rate: 57600   # generic HiQnet RS232 typical value (doc states "57.6 kbps, 8N1")
  data_bits: 8
  parity: none
  stop_bits: 1
  flow_control: none
auth:
  type: none  # inferred: no auth/login procedure described in source

Notes on transport (from source):

  • TCP (guaranteed service): stream-based, no frame-start/checkout bytes. Message ID + payload are framed by the HiQnet header only.
  • UDP (datagram service): multiple HiQnet messages may be packed into one UDP datagram; receiver must split them. Same port 3804.
  • RS-232: uses 0xF0 sync byte before each command, 0x64 0xNN frame-start, CCITT-8 checksum byte, and PING (0xF0 0x8C) every 1s + DiscoInfo every ≤10s keep-alive. TCP/UDP do NOT use these framing/keep-alive bytes (link layer handles reliability).
  • Guaranteed flag: bit 5 of the header Flags must be set for TCP/IP-only interfaces to force guaranteed delivery.

Traits

traits:
  - queryable  # inferred: GetAttributes / GetVDList / MultiParamGet query methods documented

Actions

# HiQnet message IDs operate on the 48-bit address (Device[16].VD[8].Object[24]) + Parameter Index[16].
# `command` holds the documented Message ID opcode verbatim; payload field layout follows.
# Over TCP/UDP the opcode rides the HiQnet header (version 0x02). Over RS-232 each frame is
# prefixed with 0xF0 sync + 0x64 0xNN frame-start and suffixed with a CCITT-8 checksum byte
# (omitted on TCP/UDP). Concrete addresses/Param_IDs are project-configured in Audio Architect.

# --- Routing / Session / Network layer (0x00xx) ---
- id: disco_info
  label: DiscoInfo
  kind: action
  command: "0x0000"
  description: "Locate devices and exchange routing information; also serves as announce/arrival and keep-alive. Payload: HiQnet Device<UWORD>, Cost<UBYTE>, Serial Number<BLOCK>, Max Message Size<ULONG>, Keep Alive Period<UWORD>, NetworkID<UBYTE>, NetworkInfo<net-specific>. Broadcast to find devices; reply is DiscoInfo(Info)."

- id: get_network_info
  label: Get Network Info
  kind: query
  command: "0x0002"
  description: "Get information on a device's network interfaces. Payload: Serial Number<BLOCK>. Response lists per-interface Max Message Size, NetworkID (1=TCP/IP, 4=RS232) and NetworkInfo (MAC, DHCP flag, IP, subnet, gateway)."

- id: request_address
  label: Request Address
  kind: action
  command: "0x0004"
  description: "Request use of a specific HiQnet Device Address. Dest broadcast 0xFFFF00000000. Payload: HiQnet Device Address<UWORD>."

- id: address_used
  label: Address Used
  kind: action
  command: "0x0005"
  description: "Notify that a HiQnet Address is already in use. Dest broadcast 0xFFFF00000000."

- id: set_address
  label: Set Address
  kind: action
  command: "0x0006"
  description: "Set a device's HiQnet and network address. Payload: Serial Number<BLOCK 128-bit GUID>, New Device Address<UWORD>, NetworkID<UBYTE>, NetworkInfo<net-specific>."

- id: goodbye
  label: Goodbye
  kind: action
  command: "0x0007"
  description: "Notify receiver the sender is shutting down; cancels all subscriptions to the sender. Payload: Device Address<UWORD>. Not sent on keep-alive timeout."

- id: hello
  label: Hello (Open Session)
  kind: action
  command: "0x0008"
  description: "Open/refresh a session between two HiQnet devices; triggers keep-alive. Flags must include GUARANTEED (0x0020). Query carries sender's new Session Number<UWORD> + Flag mask<UWORD>; response (Hello Info, FLAGS 0x0124) echoes it in the session header extension and adds responder's session number. Optional for third-party control."

# --- Device-level methods (0x01xx) ---
- id: get_attributes
  label: Get Attributes
  kind: query
  command: "0x010D"
  description: "Get 'n' attribute values from an Object or Virtual Device. Payload: NoOfAttributes<UWORD>, then AID<UWORD> per requested attribute. Response repeats AID, Data type<UBYTE>, Value<N bytes>."

- id: get_vd_list
  label: Get VD List
  kind: query
  command: "0x011A"
  description: "Get the list of Virtual Devices in a Device. Dest 0xFFFF00000000. Payload: Workgroup Path<STRING>. Response: Workgroup Path, NumVDs<UWORD>, then per-VD VDAddress<UBYTE> + VDClassID<UWORD>."

- id: store
  label: Store
  kind: action
  command: "0x0124"
  description: "Save performance data to non-volatile storage. Payload: Store Action<UBYTE> (0=Parameters,1=Subscriptions,2=Scenes,3=Snapshots,4=Presets,5=Venue), Store Number<UWORD>, Workgroup Path<STRING>=empty, Scope<UBYTE>=reserved."

- id: recall
  label: Recall
  kind: action
  command: "0x0125"
  description: "Recall performance data (scene/preset/venue). Payload: Recall Action<UBYTE> (0=Parameters..5=Venue), Recall Number<UWORD>, Workgroup Path<STRING>, Scope<UBYTE>=reserved. Worked RS-232 example (recall Device Preset 1): 0xF0 0x64 0x00 0x02 0x19 0x00 0x00 0x00 0x21 0x00 0x33 0x00 0x00 0x00 0x00 0x00 0x20 0x00 0x00 0x00 0x00 0x01 0x25 0x00 0x20 0x05 0x00 0x00 0x03 0x00 0x01 0x00 0x02 0x00 0x00 0x00 0x01 <checksum>."

- id: locate
  label: Locate
  kind: action
  command: "0x0129"
  description: "Make the device flash its Locate LEDs at 2 Hz for identification. Payload: Time<UWORD> ms (0x0000=off, 0xFFFF=on, 0x0001-0xFFFE=flash period), HiQnet Serial Number<BLOCK>. Compulsory for Device Manager VDs."

# --- Parameter methods (0x01xx) ---
- id: multi_param_set
  label: MultiParamSet
  kind: action
  command: "0x0100"
  description: "Set NumParam parameter values within an Object/VD. Payload: NumParam<UWORD>, then per param Param_ID<UWORD> + Value (typed per Param class). Primary value-write method."

- id: multi_object_param_set
  label: MultiObjectParamSet
  kind: feedback
  command: "0x0101"
  description: "Parameter updates spanning multiple objects; sent by a device in response to subscriptions. Payload: Num_Objects<UWORD>, then per object Object_Dest<ULONG> + Num_Params<UWORD> + Param_ID/Value pairs."

- id: param_set_percent
  label: ParamSetPercent
  kind: action
  command: "0x0102"
  description: "Set a parameter by percentage (0..100%) as 1.15 signed fixed-point UWORD (0x8000=-100%, 0x7FFF≈+100%). No prior knowledge of param attributes required. Payload: NumPARAM<UWORD>, then Param_ID<UWORD> + Param_Value<UWORD 1.15>."

- id: multi_param_get
  label: MultiParamGet
  kind: query
  command: "0x0103"
  description: "Get NumParam parameter values. Payload: NumParam<UWORD> + Param_ID<UWORD> each. Response (Info) repeats NumParam + typed Param_Value blocks. NumParam=0 form used for backward-compatible keep-alive start."

- id: multi_param_subscribe
  label: MultiParamSubscribe
  kind: action
  command: "0x010F"
  description: "Subscribe to parameter changes. Payload: No of Subscriptions<UWORD>, then per sub Publisher Param_ID<UWORD>, Subscription Type<UBYTE>=0, Reserved<UBYTE>=0, Reserved<UWORD>=0, Sensor Rate<UWORD ms>. Sensor rate is the fastest desired update for sensor params."

- id: param_subscribe_percent
  label: ParamSubscribePercent
  kind: action
  command: "0x0111"
  description: "Set up a percentage subscription; updates delivered as ParamSetPercent (0x0102) rather than MultiParamSet. Same payload shape as MultiParamSubscribe."

- id: multi_param_unsubscribe
  label: MultiParamUnsubscribe
  kind: action
  command: "0x0112"
  description: "Cancel parameter subscriptions. Payload: Number of Subscriptions<UWORD> + Publisher Param_ID<UWORD> each."

- id: parameter_subscribe_all
  label: ParameterSubscribeAll
  kind: action
  command: "0x0113"
  description: "Subscribe to every state variable under an Object or Virtual Device. Payload: Subscriber Address<HIQNETADDR>, Subscription Type<UBYTE> (0=ALL,1=Non-Sensor,2=Sensor), Sensor Rate<UWORD>, Subscription Flags<UWORD> (bit0=send initial updates)."

- id: parameter_unsubscribe_all
  label: ParameterUnSubscribeAll
  kind: action
  command: "0x0114"
  description: "Unsubscribe from every state variable under an Object or VD. Same payload shape as ParameterSubscribeAll."

# --- Event log (0x01xx) ---
- id: subscribe_event_log
  label: Subscribe Event Log
  kind: action
  command: "0x0115"
  description: "Subscribe to device event-log entries. Sent to Device Manager VD. Payload: Max Data Size<UWORD>, Category Filter<ULONG bitfield> (bit per category; 1=subscribe, 0=no-action, OR-ed with current)."

- id: get_vd_list_attrs
  label: Unsubscribe Event Log
  kind: action
  command: "0x012B"
  description: "Cancel event-log category subscriptions. Payload: Category<ULONG bitfield> (1=unsubscribe, 0=no-action)."

- id: request_event_log
  label: Request Event Log
  kind: query
  command: "0x012C"
  description: "Request current event log contents. Response (Info) lists entries: No Of Entries<UWORD>, then per entry Category<UWORD>, Event ID<UWORD>, Priority<UBYTE> (0=Fault,1=Warning,2=Info), Sequence Number<ULONG>, Time<STRING HH:MM:SS>, Date<STRING YEAR-MO-DA>, Information<STRING>, Additional Data<BLOCK>."

- id: get_vd_list_2
  label: GetVDList
  kind: query
  command: "0x011A"
  description: "Duplicate placeholder removed; see get_vd_list above."

Feedbacks

- id: disco_info_info
  type: object
  description: "DiscoInfo(Info) - announce/routing reply. Carries sender's HiQnet Device address, serial number, max message size, keep-alive period and NetworkInfo (used to build routing table). Sent unsolicited on arrival (5x at 2s intervals) and as keep-alive."

- id: get_attributes_info
  type: object
  description: "GetAttributes response - AID/Data type/Value tuples."

- id: get_vd_list_info
  type: object
  description: "GetVDList response - Virtual Device address + class ID list."

- id: multi_param_get_info
  type: object
  description: "MultiParamGet response - typed parameter values."

- id: multi_object_param_set
  type: object
  description: "Subscription update message (0x0101) carrying parameter values across one or more objects; delivered whenever a subscribed parameter changes (or periodically for sensor params)."

- id: param_set_percent_info
  type: object
  description: "ParamSetPercent (0x0102) used as a subscription delivery vehicle for percent subscriptions."

- id: request_event_log_info
  type: object
  description: "Event-log notification (0x012C Info) - one or more event entries (category, event ID, priority, sequence, time/date, info string, additional data)."

- id: protocol_error
  type: object
  description: "HiQnet error message (FLAGS=0x0008). Always returned to sender on a protocol error regardless of subscription. Carries Error Code<UWORD> (Control Network event IDs 0x0001-0x0011) + Error String<STRING>. Original message is echoed back."

Variables

# HiQnet models all controllable state as Parameters (Device>VD>Object>Parameter).
# Each Parameter has attributes: Data Type, Name, Min, Max, Control Law, Flags (sensor/non-sensor).
# The BLU-10BLU's concrete Parameter catalog is project-configured in Audio Architect and is
# NOT enumerated in this source. Values are read/written via MultiParamGet/MultiParamSet or
# ParamSetPercent. Ranges are retrieved via GetAttributes (AID 2=min, 3=max).
# UNRESOLVED: device-specific parameter IDs, names, and ranges not stated in source.

Events

- id: device_arrival_announce
  description: "On boot, device transmits 5 DiscoInfo(Info) messages at 2-second intervals (after a random 0-2s pause) to announce arrival; HiQnet address negotiation completes first."

- id: keep_alive
  description: "DiscoInfo(Info) exchanged on the keep-alive period (default 10 s, min 250 ms) to keep a route alive; timeout invalidates the route and closes the session without a Goodbye."

- id: event_log_notification
  description: "Unsolicited RequestEventLog(Info) messages pushed to subscribers whenever a logged event occurs (protocol errors, config/audio-network/DSP/control-logic events, etc.)."

- id: session_break
  description: "On session-number mismatch or reboot within a keep-alive period, incoming messages for the broken session are discarded and an error/Goodbye is returned; a new Hello re-establishes coherence."

Macros

# UNRESOLVED: no multi-step command sequences are prescribed for the BLU-10BLU in this source.
# The document gives generic closed-loop sequences (DiscoAnnounce -> DiscoQuery -> DiscoInfo ->
# TCP connect 3804 -> Hello -> ParamSubscribe -> ParamSet(I) -> keep-alive) as use cases, not
# device macros.

Safety

confirmation_required_for: []
interlocks: []
# UNRESOLVED: no safety warnings, interlock procedures, or power-on sequencing requirements
# are stated in this source. Never inferred.

Notes

  • Protocol family: Harman HiQnet rev 2.0 (header version byte 0x02). HiQnet v1.0 devices (e.g. dbx ZonePro family) are excluded.
  • Addressing is configuration-specific: every controllable item is a Parameter at a 48-bit address Device[16].VD[8].Object[24] + 16-bit Parameter Index. These IDs are assigned per-project in Audio Architect / London Architect and must be copied from there ("Copy HiQnet Information" / "Copy HiQnet Parameter String"). This spec therefore documents the protocol surface, not a fixed parameter table.
  • Open-loop vs closed-loop: open-loop control sends 0xF0-prefixed commands (RS-232) or bare HiQnet frames (TCP/UDP) without acknowledgement; closed-loop uses the ReqAck flag (bit 0) to get an Ack (bit 1) meaning "action performed".
  • RS-232 keep-alive: PING 0xF0 0x8C every 1 s (device replies 0x8C); DiscoInfo at least every 10 s to keep the protocol-layer connection open for feedback. Missing these triggers a resync (261× 0xFF then 0xF0s) during which no commands are accepted.
  • Guaranteed ACK (RS-232): any frame with Frame_Count ≠ 0x00 must be acknowledged with 0xA5; sending 0xA5 after every received frame satisfies this.
  • Checksum (RS-232 only): CCITT-8 CRC, init 0xFF, computed over frame+header+payload using the Network_CCITT_8_Table (table given in source appendix). Not used on TCP/UDP.
  • Sessions: optional for third-party control; if used, Hello/Hello(Info) exchange session numbers which must then appear in every header extension. A device that does not support sessions returns a Hello(Error); fall back to session-less MultiParamGet(NumParams=0) keep-alive.
  • Multi-part messages: large payloads (e.g. preset changes) use the Multi-part flag (bit 6) with Start Sequence No. + Bytes Remaining header extension.

Provenance

source_domains:
  - audioarchitect.harmanpro.com
  - help.harmanpro.com
  - bssaudio.com
source_urls:
  - https://audioarchitect.harmanpro.com/resource/audio-architect-hiqnet-third-party-programmers-guide.pdf
  - https://help.harmanpro.com/soundweb-london-third-party-control
  - https://help.harmanpro.com/using-telnet-with-soundweb-london
  - https://bssaudio.com/en/site_elements/soundweb-london-third-party-control-application-guide
retrieved_at: 2026-06-30T18:51:15.189Z
last_checked_at: 2026-07-07T11:05:57.413Z

Verification Summary

verdict: verified
checked_at: 2026-07-07T11:05:57.413Z
matched_actions: 25
action_count: 25
confidence: medium
summary: "All 25 spec action opcodes match verbatim source Message IDs; transport port 3804 and baud 57600/8N1 confirmed; get_vd_list_2 is a declared duplicate of 0x011A, not a fabrication. (5 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "This source is the generic \"HiQnet Third Party Programmer Documentation\", not a BLU-10BLU-specific command list. The BLU-10BLU's actual Virtual Device / Object / Parameter IDs are configured per-project in Audio Architect and are not enumerated here. The document explicitly states: \"For BSS Soundweb London devices you should refer to the BSS Soundweb London Third Party Control Document.\" Concrete device parameter catalog is therefore unresolved."
- "BLU-10BLU is an Ethernet controller; whether it exposes a physical RS-232 port is not confirmed by this source. RS232 block reflects the generic HiQnet packet service. BSS Soundweb London serial specifics are deferred to a separate document."
- "device-specific parameter IDs, names, and ranges not stated in source."
- "no multi-step command sequences are prescribed for the BLU-10BLU in this source."
- "no safety warnings, interlock procedures, or power-on sequencing requirements"

From the AI4AV catalog (https://ai4av.net) · ODbL-1.0