Skip to main content

AudioControl Maestro

The audiocontrol_maestro driver controls AudioControl Maestro home-theater processors/receivers over TCP. It drives the main theater (Zone 1) and the secondary output (Zone 2): power, volume, mute, source selection, surround modes, HDMI output routing, and on-screen menu navigation. Control uses the Maestro's binary IP-control protocol — space-separated hex frames, each ending in a carriage return (0D).

note

This is a different product from the AudioControl Multi-Zone Amplifier (audiocontrol, telnet on port 23), which is a whole-house matrix amp that auto-creates a GEM zone per output. The Maestro is a two-zone home-theater processor; you create its zones by hand.

Prerequisites

  • Maestro on the same LAN as GEM, reachable at a static IP or DHCP reservation.
  • IP control enabled on the processor's front-panel setup menu, and the IP-control TCP port it is configured for. There is no fixed default — read the port off the unit's setup menu (it is often a high port such as 14999).

Setup

  1. System → DevicesAdd Device. Choose the AudioControl Maestro driver.

  2. Fill in Processor IP and TCP Port. The port must match the IP-control port shown on the Maestro's setup menu — this is the most common reason a Maestro connects but never reports state. Optionally set Status Poll Interval (ms) (default 30000). Save and enable.

  3. System → ZonesAdd Zone. Create one zone with Address 1 for the main theater. If you use the second output, create a second zone with Address 2. The New Zone editor pre-selects the AV subsystem for this driver — leave it there so the zones surface in the AV routing screens.

    Subsystem placement

    The driver hints the AV subsystem, which is one of the subsystems GEM ships with, so the zone editor pre-selects AV automatically. Membership in AV is what makes these zones available in AV → AV Zones when you bind an AV Zone to an existing zone.

    The processor does not announce its zones — GEM never auto-creates them. Create the 1 (and optionally 2) zone rows yourself.

  4. On connect the driver begins polling Zone 1 power → volume → mute once per Status Poll Interval, spacing the three queries about a second apart so it doesn't flood the processor. The reported values land on the device as the power_state, volume, and mute_state attributes.

Using the Maestro as an AV Zone

To drive the theater from an AV touchpanel:

  1. AV → AV Zones → create (or bind) an AV Zone. In the Bind to existing zone picker choose the 1 zone you created above.
  2. Set the AV Zone's Volume Device to the Maestro device. Its volume slider and mute button then drive Zone 1 of the processor.
  3. Source selection from the touchpanel is done through the AV Zone's source on/off macros — put the matching source-select command (bd, sat, stb, cd, …) in each source's On Macro. There is no numeric routing command on this processor; you switch inputs with the named source buttons below.
Zone 2 is manual

The AV Zone Volume Device path always targets Zone 1 — it never passes a zone number, and the driver defaults every command to Zone 1. To control the second output's power/volume/mute, run the command directly (from a macro or the Commands page) with the zone_number argument set to 2. Likewise, the automatic status poll only refreshes Zone 1; poll Zone 2 explicitly with get_power / get_volume / get_mute and zone_number 2 if you need its feedback.

Attributes

Device — required

AttributeTypeDescription
ipstringLAN IP of the Maestro processor.
portintIP-control TCP port configured on the Maestro. No default — match the unit's setup menu.

Device — optional

AttributeTypeDefaultDescription
monitor_intervalint (ms)30000How often to poll Zone 1 power / volume / mute.

Reflected device attributes

The driver writes live state onto the device (not onto the zone rows). Zone 2 values use a zone_2_ prefix.

AttributeTypeValues
power_statestringon / off
volumeintCurrent Zone 1 volume, decimal 063
mute_statestringon / off
inputstringCurrent source name (see the source map below), or the raw hex code if unrecognized
zone_2_power_statestringon / off
zone_2_volumeintZone 2 volume, 063
zone_2_mute_statestringon / off
zone_2_inputstringZone 2 source name

Zone

  • Address required: yes.
  • Address format: 1 for the main theater, 2 for the second output.

Commands

Send these from the Commands page, a macro, or a control. Commands that take zone_number accept 1 (main) or 2 (second output) and default to 1 when omitted.

Power

CommandArgsNotes
power_on / power_offToggle-style front-panel power on/off.
power_standbyPut the processor into standby.
discrete_on / discrete_offDiscrete (absolute) power on / off.

Volume & mute

CommandArgsNotes
volumezone_number, volumeSet an absolute level. volume is a decimal 063 — the driver converts it to the processor's hex encoding for you. Values above 63 are outside the processor's range.
volume_up / volume_downStep Zone 1 up/down one increment. Safest for touchpanel binding because they need no scaled value.
mute_on / mute_offZone 1 mute.
mute_toggleNative mute toggle (Zone 1) — GEM sends it directly, no state emulation.

Status queries

CommandArgsNotes
get_powerzone_numberRefreshes power_state.
get_volumezone_numberRefreshes volume.
get_mutezone_numberRefreshes mute_state.
get_sourcezone_numberRefreshes input (decoded via the source map).
get_direct_modeQuery direct-mode state (Zone 1).

Source selection

There is no numeric route command. Pick a source with its named button; GEM reports the current source back through get_source / the input attribute.

CommandNotes
cd bd av sat stb game aux net bt fm arc pvr tuner uhdSelect the corresponding front-panel input.
multi_channelSelect the multi-channel analog input.

The processor reports its current source with these codes (used to fill the input attribute):

CodeSourceCodeSource
00follow_zone_10Bfm
01cd0Cdab_europe
02bd0Enet
03av0Fusb
04sat10stb
05pvr11game
08aux1Duhd
09display_arc

Audio / video routing

CommandArgsNotes
set_audio_inputzone_number, audio_sourceChoose the audio source type: analog, digital, hdmi (or request to query).
set_video_outputoutputRoute HDMI output: hdmi_1, hdmi_2, hdmi_1_2 (both), or request.
hdmi_out_1 / hdmi_out_2 / hdmi_out_1_2Discrete HDMI-output selection.
set_osdzone_number, statusOn-screen display: on, off, or request.

Surround / listening modes

CommandNotes
stereo / 5_7_stereoTwo-channel / all-channel stereo.
auto_maticAuto surround selection.
dolby_surround / dolby_digital_exDolby modes.
dolby_volume_toggleToggle Dolby Volume.
dts_neo6_cinema / dts_neo6_musicDTS Neo:6 cinema / music.
dts_neuralx / dts_virtualxDTS Neural:X / Virtual:X.
CommandNotes
up down left right select menu homeOn-screen menu navigation.
display_offTurn the front-panel display off.
display_brightness_toggleCycle front-panel brightness.
cycle_output_resolutionStep the HDMI output resolution.
cycle_vfd_infoCycle the front-panel info readout.
zone_toggleToggle the second-output zone on/off.

IR passthrough

CommandArgsNotes
ir_commandzone_number, system_code, commandEmit a raw IR system/command code pair through the processor.

Known quirks

  • Every frame is hex ending in 0D. Volume is encoded 003F on the wire; in GEM you enter and read it as decimal 063.
  • Automatic polling covers Zone 1 only. Front-panel or Zone-2 changes only reflect after you query them (see the Zone 2 note above).
  • No source-routing number. Sources are chosen with the named buttons (bd, sat, …), not a channel/input index.
  • Unrecognized source codes are reported as the raw hex value in input rather than a friendly name.

Troubleshooting

SymptomCheck
Connects but no state ever updatesThe TCP Port almost certainly doesn't match the IP-control port on the Maestro's front-panel setup menu.
Volume reads look wrongVolume is decimal 063. Make sure nothing else is sending raw values to the same port, and keep any bound slider within 063.
Zone 2 never refreshesThe auto-poll only reads Zone 1. Query Zone 2 with get_power / get_volume / get_mute and zone_number 2.
Volume slider on a touchpanel does nothing past a pointValues above 63 are out of range — use volume_up / volume_down, or cap the level at 63.