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).
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
-
System → Devices → Add Device. Choose the AudioControl Maestro driver.
-
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. -
System → Zones → Add Zone. Create one zone with Address
1for the main theater. If you use the second output, create a second zone with Address2. 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 placementThe 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 optionally2) zone rows yourself. -
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, andmute_stateattributes.
Using the Maestro as an AV Zone
To drive the theater from an AV touchpanel:
- AV → AV Zones → create (or bind) an AV Zone. In the
Bind to existing zone picker choose the
1zone you created above. - Set the AV Zone's Volume Device to the Maestro device. Its volume slider and mute button then drive Zone 1 of the processor.
- 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.
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
| Attribute | Type | Description |
|---|---|---|
ip | string | LAN IP of the Maestro processor. |
port | int | IP-control TCP port configured on the Maestro. No default — match the unit's setup menu. |
Device — optional
| Attribute | Type | Default | Description |
|---|---|---|---|
monitor_interval | int (ms) | 30000 | How 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.
| Attribute | Type | Values |
|---|---|---|
power_state | string | on / off |
volume | int | Current Zone 1 volume, decimal 0–63 |
mute_state | string | on / off |
input | string | Current source name (see the source map below), or the raw hex code if unrecognized |
zone_2_power_state | string | on / off |
zone_2_volume | int | Zone 2 volume, 0–63 |
zone_2_mute_state | string | on / off |
zone_2_input | string | Zone 2 source name |
Zone
- Address required: yes.
- Address format:
1for the main theater,2for 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
| Command | Args | Notes |
|---|---|---|
power_on / power_off | — | Toggle-style front-panel power on/off. |
power_standby | — | Put the processor into standby. |
discrete_on / discrete_off | — | Discrete (absolute) power on / off. |
Volume & mute
| Command | Args | Notes |
|---|---|---|
volume | zone_number, volume | Set an absolute level. volume is a decimal 0–63 — the driver converts it to the processor's hex encoding for you. Values above 63 are outside the processor's range. |
volume_up / volume_down | — | Step Zone 1 up/down one increment. Safest for touchpanel binding because they need no scaled value. |
mute_on / mute_off | — | Zone 1 mute. |
mute_toggle | — | Native mute toggle (Zone 1) — GEM sends it directly, no state emulation. |
Status queries
| Command | Args | Notes |
|---|---|---|
get_power | zone_number | Refreshes power_state. |
get_volume | zone_number | Refreshes volume. |
get_mute | zone_number | Refreshes mute_state. |
get_source | zone_number | Refreshes input (decoded via the source map). |
get_direct_mode | — | Query 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.
| Command | Notes |
|---|---|
cd bd av sat stb game aux net bt fm arc pvr tuner uhd | Select the corresponding front-panel input. |
multi_channel | Select the multi-channel analog input. |
The processor reports its current source with these codes (used to fill the
input attribute):
| Code | Source | Code | Source |
|---|---|---|---|
00 | follow_zone_1 | 0B | fm |
01 | cd | 0C | dab_europe |
02 | bd | 0E | net |
03 | av | 0F | usb |
04 | sat | 10 | stb |
05 | pvr | 11 | game |
08 | aux | 1D | uhd |
09 | display_arc |
Audio / video routing
| Command | Args | Notes |
|---|---|---|
set_audio_input | zone_number, audio_source | Choose the audio source type: analog, digital, hdmi (or request to query). |
set_video_output | output | Route HDMI output: hdmi_1, hdmi_2, hdmi_1_2 (both), or request. |
hdmi_out_1 / hdmi_out_2 / hdmi_out_1_2 | — | Discrete HDMI-output selection. |
set_osd | zone_number, status | On-screen display: on, off, or request. |
Surround / listening modes
| Command | Notes |
|---|---|
stereo / 5_7_stereo | Two-channel / all-channel stereo. |
auto_matic | Auto surround selection. |
dolby_surround / dolby_digital_ex | Dolby modes. |
dolby_volume_toggle | Toggle Dolby Volume. |
dts_neo6_cinema / dts_neo6_music | DTS Neo:6 cinema / music. |
dts_neuralx / dts_virtualx | DTS Neural:X / Virtual:X. |
Menu navigation & display
| Command | Notes |
|---|---|
up down left right select menu home | On-screen menu navigation. |
display_off | Turn the front-panel display off. |
display_brightness_toggle | Cycle front-panel brightness. |
cycle_output_resolution | Step the HDMI output resolution. |
cycle_vfd_info | Cycle the front-panel info readout. |
zone_toggle | Toggle the second-output zone on/off. |
IR passthrough
| Command | Args | Notes |
|---|---|---|
ir_command | zone_number, system_code, command | Emit a raw IR system/command code pair through the processor. |
Known quirks
- Every frame is hex ending in
0D. Volume is encoded00–3Fon the wire; in GEM you enter and read it as decimal0–63. - 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
inputrather than a friendly name.
Troubleshooting
| Symptom | Check |
|---|---|
| Connects but no state ever updates | The TCP Port almost certainly doesn't match the IP-control port on the Maestro's front-panel setup menu. |
| Volume reads look wrong | Volume is decimal 0–63. Make sure nothing else is sending raw values to the same port, and keep any bound slider within 0–63. |
| Zone 2 never refreshes | The 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 point | Values above 63 are out of range — use volume_up / volume_down, or cap the level at 63. |