Skip to main content

AudioControl Multi-Zone Amplifier

The audiocontrol driver controls AudioControl networked multi-zone matrix amplifiers (Director M-series, D2800, D4600). Telnet ASCII commands on port 23 drive the amp and poll zone status via SYSTEMstat?.

Prerequisites

  • Amplifier on the same LAN as GEM, with a static IP or DHCP reservation.
note

The /json/signalprocessing.json endpoint is only used once at connect for model detection — its body is too large for the device HTTP server to serve reliably on multi-zone amps (truncates around 24 KB), so all live zone state comes over telnet.

Setup

  1. System → Devices: add a device with driver audiocontrol. Set ip. Default port is 23.
  2. Save and enable. On connect the driver:
    • probes /json/signalprocessing.json for ampModel / ampName and writes them to model / amp_name. If the JSON endpoint is unreachable it falls back to SYSTEMstat? over telnet, parsing the AMPLIFIER NAME: line.
    • starts polling each output zone every sync_interval ms (default 5000) via SYSTEMstat?. Zone rows in the response auto-create GEM zones on first sight.
  3. Run the sync_zones command to auto-create GEM zones for each output. Wired zones get numeric addresses (1..N); Digital Out zones get letter addresses (a, b).
  4. Run sync_av_zones to create matching AV Zone rows for every output (so each shows up in the AV routing graph). Existing AV Zone rows are left alone.

Attributes

Device — required

AttributeTypeDescription
ipstringLAN IP of the amplifier.

Device — optional

AttributeTypeDefaultDescription
portint23Telnet port.
zone_countint8Number of output zones.
sync_intervalint (ms)5000Zone status poll cadence.

Reflected device attributes

AttributeSource
modelampModel from one-shot JSON probe, or AMPLIFIER NAME: from SYSTEMstat?.
amp_nameampName from the one-shot JSON probe (user-renamable).
global_temp, global_voltage, global_protection, thermal_protectionParsed from SYSTEMstat? lines.
active_zonesJSON list of the names of zones currently powered on, recomputed after each SYSTEMstat? poll settles (read-only at-a-glance summary of what the amp is driving).
last_errorLast poll error message.

Zone

  • Address required: yes.
  • Address format: numeric 1..N for wired zones, a / b for Digital Out zones.

The driver writes the following onto each polled zone:

AttributeTypeSource
power_statestringon / off
mute_statestringon / off
volumeint
inputintActive input source id
signal_sensestringon / off

Commands

Power & status

CommandArgsNotes
power_on / power_offWhole-amp power.
query_statusIssues SYSTEMstat?; populates global telemetry attributes.
query_voltage / query_temp / query_protect / query_shortSingle-value queries.
query_groups / query_amp_name
query_zone_on / query_zone_off / query_input / query_group_input
sync_zonesForce a zone status poll now and auto-create any missing GEM zones.
sync_av_zonesWalk every output zone and ensure a matching AV Zone row exists.
all_zones_on / all_zones_off
mute_all

Zone control

CommandArgsNotes
zone_on / zone_offaddressPer-zone power.
mute_on / mute_offaddress
set_bass / set_trebleaddress, level
bass_up / bass_down / treble_up / treble_downaddress
loudness_on / loudness_offaddress
zone_signalsense_on / zone_signalsense_offaddressPer-zone signal sense.
all_signalsense_on / all_signalsense_offGlobal.
get_volumeaddress
recall_eqaddress, preset (1-6)
query_zone_stat / query_zone_eq / query_zone_bass / query_zone_treble / query_zone_loudness / query_zone_input / query_zone_signalsense / query_zone_poweraddress
get_zone_inputaddressAlias of query_zone_input.

Source routing

CommandArgsNotes
set_sourceaddress, source_idM-series numbered local source (legacy).
set_source_localaddressD2800 / D4600: switch zone to its Local input.
set_source_bus_aaddressD2800 / D4600: switch zone to Bus A.
set_source_bus_baddressD2800 / D4600: switch zone to Bus B.
set_inputaddress, input (1-8)Route a matrix (analog) source channel pair (1-2 … 15-16) to a zone.
set_digital_inputaddress, input (a/b)Route Digital Input A or B to a zone.
set_dante_inputaddress, input (raw suffix)Route a Dante source by raw source suffix — e.g. V0CS3 (Dante input 3 via Dante Controller), V1CS2 (AudioControl Dante amp source), MX5 (matrix), DXa (digital). Appended after Z[n]source.
set_digital_outputaddress (a/b), input (MX1MX8, DXa, DXb, V0CSx, …)Route a source to Digital Output A or B by raw source suffix.
set_source_matrixaddress, source_id (1-8)M6800D / Director: route a matrix (analog) source channel pair (1-2 … 15-16) to a zone.
set_source_digitaladdress, digital_input (a/b)M6800D / Director: route Digital Input A or B to a zone.
set_source_danteaddress, dante_id, input_indexM6800D / Director: route a Dante source to a zone. dante_id 1-8 = AudioControl Dante amps (0 for non-AudioControl sources via Dante Controller); input_index 1-8 stereo pair from amp web UI. Digital inputs cannot be Dante-routed.
set_dxo_source_matrixoutput (a/b), source_id (1-8)M6800D / Director: route a matrix channel pair to Digital Output A or B.
set_dxo_source_danteoutput (a/b), dante_id, input_indexM6800D / Director: route a Dante source to Digital Output A or B.
query_dxo_inputoutput (a/b)Query the source currently routed to Digital Output A or B.

Lipsync (D4600 zones 5-8)

CommandArgsNotes
lipsync_up / lipsync_downaddressStep delay by 5 ms.
set_lipsyncaddress, steps (0-19)5 ms per step.

Groups

CommandArgsNotes
group_zoneaddress, group_idAdd zone to a group.
group_volumegroup_id, volumeSet every zone in a group to a volume.
group_mute / group_unmute / group_on / group_offgroup_id

Escape hatch

CommandArgsNotes
passthroughinputSend a raw telnet command to the amp. The string is transmitted verbatim. Useful for one-off diagnostics or commands not yet wrapped by the driver.

Known quirks

  • The amp does not push state changes — front-panel volume / source changes only appear after the next poll.
  • Digital Out zones use letter addresses (a, b); wired zones use numeric ids.
  • AV zones aren't auto-created on connect — run sync_av_zones once to populate them.
  • M-series uses numbered set_source; D2800 / D4600 use the Local / Bus A / Bus B variants.
  • Garbage commands echo back as xx<cmd>xx and are logged as warnings — useful for catching typos in custom macros.

Troubleshooting

SymptomCheck
Zone state diverges from front panelLower sync_interval or run sync_zones manually; the amp does not push events.
Model never populatedOne-shot JSON probe failed; check http://<ip>/json/signalprocessing.json in a browser, or watch logs for the telnet fallback.
sync_zones reports errorsConfirm the av subsystem exists in GEM — auto-created zones live under it. Also confirm telnet on port 23 is reachable.