Anthem MRX / AVM
Anthem MRX 540 / 740 / 1140 AV receivers and AVM 70 / 90 AV processors, controlled
over IP. The driver speaks Anthem's ASCII control protocol — short text commands terminated by
a semicolon (;) on the unit's IP-control port (default 14999). It gives you power, two
kinds of volume control (percent and exact dB), input switching, listening / surround mode,
tone and balance, ARC room-correction profiles, on-screen messages, streaming "now playing"
metadata, and zone 2 routing on the multi-zone models.
Because the unit answers every query with its current state, GEM keeps the device's status in sync with the real hardware on a poll — so a volume change made on the front panel, an Anthem remote, or the Anthem app shows up in GEM within a poll cycle without you doing anything.
How GEM sees the unit
This driver represents one receiver's main zone as a single device — it does not create a
GEM control zone of its own, and it does not act as a matrix or controller. To get a room-level
volume slider, mute button, and source behavior, you bind the device to an AV zone (see
Linking to an AV zone below). Zone 2, where the model supports it, is
driven with a separate set of z2_* commands rather than a second GEM zone.
What's controlled
- Main-zone power on / off, plus live power-state read-back
- Volume two ways: a 0–100 percent value that drives the room slider, and an exact-dB value in 0.5 dB steps for precise calibration — each with up / down stepping
- Mute on / off / toggle (the receiver has a native toggle)
- Input selection by input number, plus input cycling
- Listening / surround mode by name (Stereo, AnthemLogic, Dolby Surround, DTS Neural:X, and more)
- Bass / treble tone and left / right balance
- ARC (Anthem Room Correction) — switch the active EQ and processing profile
- On-screen display: post a two-line message, show / hide the OSD, open / close the setup menu, and simulate front-panel / remote key presses
- Dolby dynamic-range and center-spread options
- 12 V trigger outputs 1–3
- Streaming "now playing" — track title, artist, album, and transport state from the built-in Networking Module, plus pause / stop
- Read-back of the incoming signal: video resolution, audio format, channel layout, bitrate, sample rate, and bit depth
- Zone 2 power, volume, mute, and input on the MRX 740 / 1140 and AVM 70 / 90
- Status polling (default every 30 s) that mirrors external changes back into GEM
Prerequisites
- An Anthem MRX or AVM on the LAN with IP control enabled (Setup → Network on the unit). Note the IP-control port — the factory default is 14999, but it is configurable on the unit.
- Recommended: enable Standby IP Control on the Anthem. Without it, the unit drops off the
network in standby and a single power-on command can be ignored — over RS-232 the power-on
has to be sent twice with a one-second gap. With Standby IP Control on, a single
power_onworks reliably. (GEM also asks the unit to turn this on for you on first connect — see the Enable Connected Standby on Connect option below.)
Setup
- On the Anthem, open Setup → Network and enable IP control. Note the port (default
14999). - Optionally enable Standby IP Control so the unit can be powered on remotely in one command.
- In GEM, open Devices, add a device, and choose the Anthem MRX / AVM
driver. Set the Device IP field. TCP Port defaults to
14999— leave it unless you changed the port on the unit. - Save. On connect, GEM asks the unit for its model, optionally turns on Connected Standby, then seeds power, volume, mute, input, listening mode, and the incoming-audio details. From then on it re-reads that state on every poll.
Linking to an AV zone
The receiver feeds volume and mute into an AV zone rather than appearing as its own controllable zone:
- Open AV Zones and edit (or create) the zone for the room the receiver serves.
- Set the Volume Device field to this Anthem device.
- Save. From then on, the zone's volume slider and mute button drive the receiver, and whenever the receiver reports a new volume or mute state, GEM mirrors it back onto the zone.
Selecting an input on the receiver is a device command, not a zone source change. The
Anthem's selected input is tracked separately from GEM's AV source routing — choosing a room's
source on a touchpanel does not change the receiver's input on its own unless you wire the
input command into that source's on-macro.
Volume: percent vs. dB
The Anthem exposes volume two different ways, and the difference matters when you calibrate a room:
-
volumesends a 0–100 percent value straight through to the receiver. The room slider uses this. Anthem's own percent curve is non-linear — the unit owns the mapping, and the driver passes your percent through unchanged:GEM percent Approx. level 0% −90 dB (effectively off) 4% −74 dB 11% −53 dB 20% −35 dB 30% −25 dB 100% +10 dB So a slider at 50% is not half-loudness — most of the usable listening range sits between roughly 11% and 40%.
-
volume_dbsets an exact dB value (andvolume_db_up/volume_db_downstep by 0.5 dB). Use this when you want repeatable, dB-accurate levels — for example a macro that always sets the theater to −20 dB.
If the on-screen volume reads as a percentage but you want dB, set Master Volume Scale to
dB on the unit (Setup → Preferences → Master Volume Scale), and drive levels with volume_db.
Attributes
Device — required
| Attribute | Type | Description |
|---|---|---|
ip | string | Receiver / processor LAN IP. |
Device — optional
| Attribute | Type | Default | Description |
|---|---|---|---|
port | int | 14999 | Anthem IP-control TCP port. Change only if you re-mapped it on the unit. |
status_interval | int | 30000 | Status poll interval, in milliseconds (minimum 5000). |
enable_connected_standby | boolean | true | On first connect, asks the unit to enable Connected Standby so power-on works in a single command. Turn this off if you rely on the lower-power, non-network standby instead. |
The driver also auto-populates state attributes on the device as the unit reports them — these are read-only status, not values you set by hand:
power_state, volume (percent), volume_db, mute_state, input, input_name,
listening_mode, audio_format, audio_channels, audio_bitrate, audio_sample_rate,
audio_bit_depth, video_resolution, balance, model, software_version,
hardware_version, serial_number, region, input_count, connected_standby,
arc_valid, arc_name, arc_date, and the streaming fields stream_title, stream_artist,
stream_album, stream_state, stream_service. The zone-2 equivalents appear with a z2_
prefix (z2_power_state, z2_volume, z2_mute_state, z2_input, …).
Commands
The exact protocol string each command sends is shown so you can match it against Anthem's control reference. Where a command takes a value, the argument name is the one you supply in a macro.
Power, volume, and mute (main zone)
| Command | Sends | Notes |
|---|---|---|
power_on | Z1POW1 | Main-zone power on. |
power_off | Z1POW0 | Main-zone power off. |
get_power | Z1POW? | Query power state. |
volume | Z1PVOL + value | Set percent (0–100). Drives the room slider; non-linear (see above). |
volume_up / volume_down | Z1PVUP / Z1PVDN | Step the percent volume up / down. |
volume_db | Z1VOL + value | Set exact dB. |
volume_db_up / volume_db_down | Z1VUP / Z1VDN | Step by 0.5 dB. |
get_volume / get_volume_db | Z1PVOL? / Z1VOL? | Query percent / dB volume. |
mute_on / mute_off | Z1MUT1 / Z1MUT0 | Mute / unmute. |
mute_toggle | Z1MUTt | Native toggle. |
get_mute | Z1MUT? | Query mute state. |
Input and listening mode
| Command | Sends | Notes |
|---|---|---|
input | Z1INP + value | Select input by number. |
get_input | Z1INP? | Query selected input. |
get_input_count | ICN? | How many inputs the unit exposes. |
listening_mode | Z1ALM + value | Set surround / listening mode by name (table below). |
listening_mode_up / listening_mode_down | Z1AUP / Z1ADN | Cycle modes. |
get_listening_mode | Z1ALM? | Query current mode. |
listening_mode accepts these names: none, anthemlogic_cinema, anthemlogic_music,
dolby_surround, dts_neural_x, dts_virtual_x, stereo, all_channel_stereo, mono,
all_channel_mono.
Tone and balance
| Command | Sends | Notes |
|---|---|---|
tone_bass / tone_treble | Z1TON0 / Z1TON1 + value | Set bass / treble level. |
tone_bass_up / tone_bass_down | Z1TUP0 / Z1TDN0 | Step bass. |
tone_treble_up / tone_treble_down | Z1TUP1 / Z1TDN1 | Step treble. |
balance | Z1BAL + value | Set left / right balance. |
balance_left / balance_right | Z1BLT / Z1BRT | Nudge balance one step. |
ARC room correction
| Command | Sends | Notes |
|---|---|---|
arc_mode_eq | Z1ARCMEN + value | Active ARC EQ profile: disabled, profile_1…profile_4. |
arc_mode_processing | Z1ARCPRC + value | ARC processing profile: disabled, profile_1…profile_4. |
arc_chirp_offset | Z1ARCCLO + value | Calibration chirp offset. |
arc_test_tone | Z1ARCCRP + value | Play the ARC test tone (channel bitmask). |
get_arc_valid / get_arc_date / get_arc_name | Z1ARCVAL? / Z1ARCUPL? / Z1ARCNAM? | Whether a measurement is loaded, its upload date, and its name. |
Surround features
| Command | Sends | Notes |
|---|---|---|
dolby_dynamic_range | Z1DYN + value | normal, reduced, or late_night. |
dolby_surround_center_spread | Z1DSCS + value | on / off. |
Signal read-back (status only)
get_video_resolution (Z1VIR?), get_audio_channels (Z1AIC?), get_audio_format
(Z1AIF?), get_audio_bitrate (Z1BRT?), get_audio_sample_rate (Z1SRT?),
get_audio_bit_depth (Z1BDP?), get_input_name (Z1AIN?), and get_input_rate_name
(Z1AIR?) read what's currently arriving at the selected input. These populate the matching
state attributes; they don't change anything.
On-screen display and front panel
| Command | Sends | Notes |
|---|---|---|
osd_message | Z1MSG + row + message | Post a message to a screen row. |
osd_show / osd_hide | Z1SHC1 / Z1SHC0 | Show / hide the on-screen display. |
setup_menu_open / setup_menu_close / setup_menu_toggle | Z1SMD1 / Z1SMD0 / Z1SMDt | Drive the setup menu. |
simulate_ir | Z1SIM + key | Simulate a front-panel / remote key press. |
12 V triggers
| Command | Sends | Notes |
|---|---|---|
trigger_on | R{n}SET1 | Assert trigger n (1, 2, or 3). |
trigger_off | R{n}SET0 | De-assert trigger n (1, 2, or 3). |
For the trigger commands to do anything, the corresponding 12 V trigger on the unit must be set to RS-232 / IP control mode in the Anthem's trigger setup. A trigger left on "source"/"voltage"-follow mode ignores them.
Streaming (Networking Module)
| Command | Sends | Notes |
|---|---|---|
get_stream_title / get_stream_artist / get_stream_album | NMTI? / NMAR? / NMAL? | Now-playing metadata. |
get_stream_state | NMTE? | stopped, transitioning, paused, or playing. |
streaming_pause / streaming_stop | NMPC / NMSC | Transport control for the built-in streamer. |
System and identity
| Command | Sends | Notes |
|---|---|---|
get_model / get_firmware / get_serial | IDM? / IDS? / GSN | Identity read-back. |
get_region / get_build_date / get_hardware / get_identity | IDR? / IDB? / IDH? / IDQ? | More identity fields. |
set_connected_standby / get_connected_standby | GCCSTBY + value / GCCSTBY? | enabled / disabled. |
load_user_settings / save_user_settings | CPYS10 / CPYS01 | Recall / store a user-settings snapshot. |
load_factory_defaults | LDFDS | Reset the unit to factory defaults. |
Zone 2 (MRX 740 / 1140, AVM 70 / 90 only)
z2_power_on / z2_power_off / z2_get_power, z2_mute_on / z2_mute_off /
z2_mute_toggle / z2_get_mute, z2_volume (percent) / z2_volume_db (dB) / z2_volume_up /
z2_volume_down / z2_get_volume, and z2_input / z2_get_input. These mirror the main-zone
commands onto the second zone. On single-zone models the unit answers them with a "zone off"
error and nothing happens.
Known limitations and quirks
- Percent volume is non-linear. The room slider follows Anthem's own percent curve (table
above), so 50% is not half-loud. Use
volume_dbwherever you need repeatable, dB-accurate levels. - Listening-mode numbers can shift between firmware revisions. Anthem's published table has
a duplicate entry, and the driver assumes
stereo= 6. If you script a specific mode by name and the unit lands on the wrong one, confirm the mapping on your firmware and adjust. - Most commands need the unit out of standby. While powered off (but networked), the unit only honors model and power queries and the power commands; other commands return a "zone off" error, which the driver tolerates and logs. Power the unit on first if a command seems to do nothing in standby.
- Some queries don't exist on every model. If the unit reports a command as unrecognized, the driver stops polling that one for the rest of the session rather than spamming the log — reload the device to re-test after a firmware update.
- Bulk setting changes trigger a re-read. After you load user settings or factory defaults, the unit announces a bulk change and the driver re-runs its full status sweep so GEM catches up.
Troubleshooting
| Symptom | Check |
|---|---|
| Power-on is sometimes ignored | Enable Standby IP Control on the unit (or leave Enable Connected Standby on Connect turned on). Without it, the unit leaves the network in standby and the first power-on can be dropped. |
| Volume slider shows %, the unit shows dB (or vice versa) | Set Master Volume Scale on the Anthem (Setup → Preferences → Master Volume Scale) to match, or drive levels with volume_db for exact dB. |
| No response at all | Confirm IP control is enabled on the unit and the TCP Port matches (default 14999). Make sure the IP is correct and reachable on the LAN. |
| A command is rejected | The Anthem replies with a short error code the driver logs: unrecognized command, value out of range, invalid syntax, or "zone off" (the unit is in standby, or it's a zone-2 command on a single-zone model). Power the unit on, check the value range, or confirm the model supports the feature. |
| Zone 2 commands do nothing | Zone 2 exists only on the MRX 740 / 1140 and AVM 70 / 90. On other models the unit answers with a "zone off" error. |
See also
- Denon Receiver, Marantz Receiver, Onkyo Receiver, Pioneer VSX / Elite Receiver — other residential AV receivers, each bound to an AV zone the same way.
- AV Zones — set this receiver as a zone's Volume Device.
- AV Sources — how room sources route, and where an input-switch macro would live.