Skip to main content

AV Zones

AV Zones represent audio and video listening/viewing areas that can play content from various sources. Each AV zone is linked to a regular zone and extended with AV-specific configuration like source assignments, on/off macros, and volume control.

Licensing

AV Zones, AV Sources, Channels, and Multiview are part of the AV System module. Creating any of them requires the module in your license; the nav items are locked otherwise. Trials and development builds unlock it, and existing AV zones keep working if a license later changes. See License.

Overview

AV Zones bridge standard zone control with AV-specific features:

  • Source assignment: choose which audio/video sources are available in each zone
  • Macro integration: run power-on/off and source-routing sequences automatically
  • Volume control: optional dedicated volume device per zone
  • Matrix routing: drive a matrix switcher from source macros using dynamic address placeholders
  • Multi-room audio: coordinated control and saved listening scenes across rooms

Viewing AV Zones

The main grid displays all configured AV zones with the following columns:

  • Zone ID - The parent zone this AV zone extends
  • On Macro - Macro executed when zone turns on
  • Off Macro - Macro executed when zone turns off
  • Address - Matrix output number or routing identifier
  • Volume Device - Separate volume control device (if applicable)
  • Enabled - Whether AV features are active
  • Sort Index - Display order

Grid Actions

  • Add - Create a new AV zone
  • Edit - Modify an existing AV zone
  • Delete - Remove AV zone (keeps parent zone)
  • Sort - Reorder AV zones
  • Reload - Refresh the grid data

The grid doesn't show an ID column, but it still accepts an ?filter_id=<id> deep link — the form Diagnostics and reference lists on other pages use to jump to one AV zone. The row is found wherever it falls in the table, and the editor opens automatically when the filter matches a single record. Use the toolbar's Clear button to return to the full list.

Quick Actions

  • View AV Sources icon - Opens the zone's sources in a modal over the grid (see Managing AV Sources below)

Creating an AV Zone

To create a new AV zone:

  1. Click Add in the grid toolbar
  2. The AV Zone editor opens (titled New AV Zone)
  3. Configure the settings below
  4. Click Create AV Zone (the button reads Update AV Zone when editing an existing one)

The editor is laid out in five sections — Basic Configuration, Macro Configuration, Device Configuration, Source Configuration, and Zone Settings — described below.

Basic Configuration

AV Type

Required. Choose Audio (ceiling speakers, soundbar, multi-room audio) or Video (display, projector, matrix output). The type also filters which global sources can appear in this zone — an audio zone only offers audio global sources, and vice-versa.

Zone Name

Every AV zone extends one underlying zone in the AV subsystem. Choose how that zone is provided:

  • New zone (default): the field is a text box — type a name and GEM creates a new zone in the AV subsystem and links it when you save.
  • Bind to existing zone: check Bind to existing zone and the field becomes a searchable picker. The picker lists only zones already in the AV subsystem, not every zone in System → Zones. Use this when you pre-created the AV zone there, or are re-pointing this AV zone at a different backing zone.

Macro Configuration

The On and Off macros drive what physically happens when the zone powers on and off. Routing a source to the zone is handled by the source's macros (see Source Configuration and How routing works); the zone macros handle whole-zone power/defaults. The optional After Global Source Macro is a zone-level hook into the source sequence — see below and Receiver zones fed from a matrix.

On Macro

  • Pick an existing macro from the searchable dropdown, or click the + icon to create one on the spot. The + prompts for a name (defaulting to <zone>_on) and creates a new, empty macro filed under the av subsystem — you then add its steps (turn on the receiver, select an input, set a default volume) in the Macros editor. The steps icon next to the On Macro label opens the selected macro's steps inline, and once a macro is selected, an open-in-editor icon inside the picker opens its full editor in a modal.
  • Runs when the zone turns on (and, because GEM re-runs zone macros on source changes, also when switching sources within an already-on zone).
Skipping warm-up on source switches

Because the on macro also re-runs when you switch sources in an already-on zone, a fixed equipment warm-up delay would re-fire on every source change. GEM maintains a system-managed already_on boolean attribute on the zone for exactly this case: it is set after each on/source dispatch (true for any active source, false on power-off), so a macro reads the pre-dispatch value. Gate the warm-up step with an If Attribute (or If Expression) step on already_on == true → skip next step — a cold start (missing or false) warms up, while switches and re-runs skip the delay. The latch self-heals on the next dispatch.

Off Macro

  • Same controls as On Macro. Runs when the zone turns off (source set to off). Typical steps: mute audio, power down the receiver/display.

After Global Source Macro (optional)

  • Same controls as the other two. Runs after the incoming source's On Macro every time a global source turns on in this zone, with the same dynamic context (source, addresses, devices) available as placeholders. Sources local to this zone skip it — a local source's own On Macro already targets this zone's equipment.
  • Its purpose: give the zone the last word after generic, matrix-oriented source macros have run. The canonical use is a receiver zone fed from a matrix output — the source macro routes the matrix, then this macro switches the receiver back to its matrix-feed input (see Receiver zones fed from a matrix). Leave it empty for ordinary matrix-only zones.

Device Configuration

Address

The matrix output number (or routing identifier) for this zone — the destination a source gets routed to. GEM makes this address available to routing macros so one macro can serve many zones (see How routing works).

Simple address — type a single output number (e.g. 1, 2, 3). GEM applies that one value to the zone's video-routing, video-endpoint, audio-routing, and audio-endpoint slots, so a routing command can reference any of them and still resolve.

Advanced addressing — check the Advanced addressing box to reveal four separate fields for systems that switch audio and video independently (separate audio and video matrices, or an HDBaseT matrix with a separate audio path):

  • Video Routing — video matrix output number
  • Video Endpoint — video endpoint identifier
  • Audio Routing — audio matrix output number
  • Audio Endpoint — audio endpoint identifier

GEM stores the four values as a single pipe-delimited string with the keys vr (video routing), ve (video endpoint), ar (audio routing), and ae (audio endpoint), e.g. vr=1|ar=3|ve=1|ae=3. The order of the keys isn't significant — GEM reads each by its prefix — and re-opening the zone repopulates the four fields from it. Leave Advanced addressing off if one number routes both audio and video.

Volume Device

Optional device for independent volume control. Select from the device dropdown.

  • Leave blank if the source device or the zone's own device controls volume.
  • Set it if a separate receiver, amplifier, or zone processor handles volume — GEM then sends volume/mute commands to this device for the zone.

Command Dispatch

A command sent at an AV zone routes by its verb:

  • Volume family (volume, set_volume, mute_on, mute_off, mute_toggle, volume_up, volume_down) — goes to the volume device (or the zone's own device when none is set), with the output address resolved from the zone/AV-zone addressing above. Note the verbs are mute_on/mute_offmute/unmute are not volume-family commands.
  • source — resolves an AV source by id and runs its routing macros. The value must be an AV source id, not a raw device input code; to select a device input directly, send the device's own input command (e.g. set_input) with the output address.
  • A command that names a device_id — goes straight to that device.
  • Any other verb (zone_on, zone_off, ...) — dispatches to the zone's own device, exactly as it would for a zone with no AV configuration.

When the zone has an av_group, each of the above fans out to every zone in the group.

Source Configuration

Local Sources

A device multi-selector. Each device you add becomes a local AV source for this zone (one source row per device), created when you save. Removing a device prompts to delete that source from the zone.

Two checkboxes below control whether GEM also creates routing macros for newly added sources:

  • Create source on macros (on by default) — for each newly added source, GEM creates an empty starter "on" macro (named <zone>_<device>_on, filed under the av subsystem) that you then fill with the routing/power steps in Macros.
  • Create source off macros (off by default) — same, for the "off" macro.

When a checkbox is off, a macro picker appears next to it; the macro you choose there is assigned as the on (or off) macro for every source you add in this save. These options only affect newly added sources — existing sources keep their macros.

Hidden Global Sources

Global sources (sources with no specific zone) normally appear in every AV zone. Use this multi-selector to hide specific global sources from this zone — the list is filtered to the zone's AV Type. The selection is stored on the zone as the hidden_global_sources attribute.

Zone Settings

  • Enabled — toggle AV functionality for this zone on or off.
  • Local Sources Only — when on, the zone shows only its locally-assigned sources; when off, both local and global sources appear.
  • Sort Index — display order in AV interfaces (lower numbers first).

Volume limits

Set max_volume on the zone (on the zone's Attributes tab) to cap how loud anyone can drive the room. This is the setting for a zone whose amplifier will happily destroy its speakers, or a commercial space where the ceiling is a house rule rather than a hardware limit.

AttributeTypeMeaning
min_volumeintegerVolume floor, 0-100. Defaults to 1 — silence is reached with mute, not by sliding to the bottom
max_volumeintegerVolume ceiling, 0-100. Defaults to 100

Every absolute volume slider is restricted to that range: the volume overlay (raised by the up/down buttons), the room card used by By Room, By Source and the sidebar, and the Multi-Zone Audio widget. A value already above the ceiling — set by a macro, an API call, or the amplifier's own front panel — is pulled back into range the next time a user touches a slider.

Unlike min_level / max_level on a dimmer, this is a cap, not a scale. The number stays the real volume — what the amp reads, what a macro sets, what an integrator means by "set it to 40" — and only the slider's travel is restricted. Nothing is remapped, so a ceiling can be raised or lowered later without changing what any stored volume means.

A pair that is inverted, unreadable, or leaves the slider with nowhere to travel is ignored rather than obeyed, so a mistyped value can never lock someone out of their own volume control.

note

The discrete volume up / down buttons step the amplifier directly and are not bounded by this setting — they are relative commands the device applies to its own current level. The cap covers the absolute sliders. For a hard limit that also applies to macros, discrete steps and the API, the enforcement has to live in the driver; rti_ad8x_http is the one that does this today, via device-level volume_min / volume_max.

Earlier releases named these attributes volume_min and volume_max. Those rows are still read, so a zone configured before the rename keeps its cap with nothing to do; max_volume wins if a zone somehow carries both. Use the new names on new work.

Volume control mode

volume_control on the zone decides how the AV surfaces drive the room's volume. Leave it unset and the zone behaves as discrete.

ValueVolume up / down buttonsAbsolute slider
discrete (default when unset)Step the amplifier one command per pressShown; the level is sent once, on release
discrete_rampingSame discrete stepsShown; the level is streamed while the finger is still moving, once every volume_ramp_speed ms
rampHold to ramp — the command repeats every volume_ramp_speed ms for as long as the button is heldReplaced by the hold-to-ramp buttons

Pick ramp for an amplifier that has no absolute volume command at all, only relative up/down — there is nothing for a slider to send. Pick discrete_ramping when the amplifier does take an absolute level and you want the room to follow the finger instead of jumping on release.

note

ramping is the older spelling of ramp. Zones already set to it keep working — every surface reads both — but use ramp on new work.

Smooth volume ramping

A zone set to discrete_ramping sends the level as the user drags, rather than only on release. How often is volume_ramp_speed (ms, default 300). Lower it and the fade tracks the finger; the limit is what the amplifier will accept, which is the device's command_throttle (ms between outgoing commands — 50 on an AudioControl, 200 by default).

Sending faster than the device drains used to be dangerous. TCP drivers queue outgoing commands and release one per command_throttle, so a drag that outran that built a backlog, and the amplifier kept stepping through it after the user let go — a runaway ramp that overshot wherever they stopped.

Absolute volume commands now coalesce: a new one for the same output replaces the pending one instead of queueing behind it. Queue depth per output stays at one and the newest level always wins, so an intermediate value on the way to the destination is dropped rather than played back late. Nothing else changes — relative volume_up / volume_down steps and every other command still queue strictly in order, because each of those accumulates and dropping one changes the result.

To tune a room:

  1. Confirm the amplifier's command_throttle reflects what the hardware really accepts. This is the floor — commands cannot leave faster than this.
  2. Lower volume_ramp_speed on the zone toward it. At or slightly above command_throttle is the smoothest useful setting.
  3. Drag the slider quickly and let go. The level should land where you released it and stop. If it keeps travelling, the driver builds its own wire frames and hasn't opted into coalescing — see Devices.

There is no benefit to setting volume_ramp_speed below command_throttle: the extra commands are coalesced away before they reach the wire. It costs nothing, but it buys nothing either.

Managing AV Sources

Click the View AV Sources icon on any AV zone row to open that zone's sources in a modal. This shows a grid of all sources assigned to the zone where you can add, edit, delete, sort, and reload sources — the AV Zones grid stays underneath, so closing the modal drops you right back where you were.

See AV Sources for details on source configuration.

Common Workflows

Creating Single-Room Audio Zone

For a room with ceiling speakers:

  1. Click Add on the AV Zones grid
  2. Set AV Type: Audio
  3. Enter a zone name: living_room_audio (leave Bind to existing zone unchecked to create the backing zone)
  4. On Macro: click + to create an empty living_room_audio_on macro, then add its power/input steps later
  5. Off Macro: click + to create the matching off macro
  6. Set Address: 1 (output on audio matrix)
  7. Set Volume Device: audio_matrix (if it handles volume)
  8. Add local sources: Sonos, Spotify, Radio (leave Create source on macros checked to get starter routing macros)
  9. Turn Enabled on
  10. Click Create AV Zone

Creating Home Theater Zone

For a dedicated theater room:

  1. Click Add on the AV Zones grid
  2. Set AV Type: Video
  3. Enter a zone name: theater_video
  4. Create (+) or select an On Macro — turn on the projector, receiver, set defaults
  5. Create (+) or select an Off Macro — mute, power off
  6. Set Address: 1 (projector output on matrix)
  7. Set Volume Device: theater_receiver
  8. Add local sources: Blu-ray, Apple TV, Game Console
  9. Turn Enabled on
  10. Click Create AV Zone

Creating Multi-Room Audio

For whole-home audio with shared matrix:

  1. Create an AV zone for each room:

    living_room_audio - Address: 1
    kitchen_audio - Address: 2
    bedroom_audio - Address: 3
    patio_audio - Address: 4
  2. All zones connect to the same audio matrix

  3. Assign sources per zone (can be same or different):

    • Shared sources: Sonos, Spotify
    • Room-specific: Bedroom might exclude party sources
  4. Users select source per room independently

The end-user AV view

The Audio / Video controls page offers two ways to look at the same rooms, switchable from buttons in the bottom bar (the choice is remembered per panel):

  • By Source (default) — a source list on the left; selecting a source shows every room that can play it as a live card. Rooms already playing the selected source highlight blue; rooms playing a different source show amber with the other source's name, keep a working volume slider, and offer an explicit "Play … here" action so nobody steals a room by accident. The "other source" colour is a theme token, so a theme may use its own — appeal uses system purple in place of amber. Whatever the hue, it always contrasts with the blue of an already-playing room.
  • By Room — a room list on the left; selecting a room shows its power/mute/volume card and the sources it can play. Tapping a source starts it in that room and opens the source's control page. Sites with a single AV zone get this view full-width automatically.

The page opens on By Source — pick what you want to listen to or watch, then send it to rooms. Once a panel switches views the choice is remembered there and wins over the default.

In both views a source tile reports where that source is playing system-wide — "Playing here", "Playing in the Kitchen", "Playing in 3 rooms" — not just within the rooms this panel's UI can see. A room outside the UI is counted but never named: the server returns hidden-room counts only, with no zone ids or labels, so the tile can say 3 rooms without disclosing which. A hidden room is counted only when its AV type matches the source's, so an audio zone left pointing at a video device does not inflate the video tab. Counts for visible rooms update live from the zone subscription; the hidden count is refreshed when an AV page loads and shortly after local source activity suggests the system moved (an all-off or a whole-house macro, for instance).

The sidebar (menu button, top right) is the whole-house controller: every active room appears as a card with its now-playing source, transport buttons, mute, power and volume; a Start a room section below lists the rooms that are off with a one-tap source picker; and All Vol+/− / All Off act on every active room at once.

The bottom media bar always targets one room for its volume and transport buttons — the room named on the blue chip under the now-playing text. Tap the chip to re-target the bar at any other active room; the room list that opens also ends with a View All entry that closes the list and jumps to the full Audio / Video controls page, matching what the current room is playing (/controls/video when the active zone is on a video source, /controls/audio otherwise). When only one room is playing there is nothing to re-target, so the chip loses its caret and goes straight to that controls page instead of opening a one-item list. Tapping the now-playing thumbnail opens the active source's own control page — the same convention as tapping a source's icon elsewhere — in every layout; with nothing playing it opens the Audio / Video page. If the targeted room carries a multiview_source attribute, that tap opens the multiview page instead of the source's own.

On a phone the bar has room for the now-playing block and one control group, so the official prodigy and appeal themes swap the transports out for the room's own controls — volume and zone off. The transports are one tap away on the source page; volume and off have nowhere else to live. This is keyed off the device rather than the orientation, so it holds in landscape too, and it is a theme decision: a theme that does not act on it keeps the transports.

A phone also drops the now-playing block's second text line — the artist, which on a phone is usually just the source name the title line above already carries, and which crowded out the room chip. Every theme gets this; on a tablet or panel the line stays.

On phone layouts that dock a compact media strip above the tab bar (nav_layout: rail — see the theme contract), the strip's room chip is the same control and opens the same picker, so the two surfaces never disagree about which room is targeted. The chip has the strip's second line to itself — it used to sit behind an artist · prefix that repeated the title above it — and tapping the strip's artwork or title opens the active source the same way the bar's thumbnail does, multiview rooms included.

All three surfaces are driven by one live subscription to the zones' source / volume / mute_state attributes, so they update in real time and never disagree.

Floor plan map

An AV zone is an ordinary zone in the av subsystem, so it places itself on a floor plan from the room it is assigned to — the same derivation every other subsystem's map uses, with no per-zone placement work. A Map button appears in the bottom bar of both views once a plan resolves for the panel's UI; on a site with no blueprint, or no room assignments, it simply never appears. See Site Spaces → End-user floor plan maps for how the geometry is derived and how pins name themselves.

The plan means something different in each view, matching what that view is for:

  • By Room — the plan is a way of finding a room. Tapping a pin selects that room and opens its sources, exactly as tapping its tile does. A lit pin is a room playing something, and its halo blooms with the room's volume. The button is hidden on a single-room site, where there is nothing to find.
  • By Source — the plan is a way of targeting rooms. Having picked a source, tap the rooms to send it to and press Play Here; Off stops the selected rooms. Selecting several rooms at once is the point — "put this on downstairs" is one gesture on a plan and a card-by-card trudge in a list. A lit pin means the same thing it does in By Room — the room is on — so a room already playing something else reads as occupied before you send a source into it, rather than looking free until Play Here takes it over. Which source a lit room is playing is a question for its card, which names it. The pins are restricted to the rooms that source can actually reach (local rooms and hidden global sources are filtered out, the same as the card list).

Only zones of the page's own AV type are pinned, so a Video page never shows the audio rooms even though both live in the av subsystem. The plan header says which — First Floor Audio, First Floor Video — rather than naming the av subsystem, since the floor name alone says where you are but not what you are looking at, and the same plan draws the audio rooms on one page and the video rooms on another.

Saving a listening scene

From the sidebar's Scenes button, users can save the current multi-room state — which source each active zone is playing and at what volume — as a named scene, then recall it with one tap later. Each scene is stored as an av_scene_* macro under the av subsystem and runs like any other macro, so it also shows up in the Macros grid. Scenes are created and managed entirely from the sidebar; there is no separate admin page for them.

How routing works

GEM does not have a hidden "matrix engine" that switches inputs on its own. Routing happens through macros, and the address fields just supply the numbers those macros plug in. The flow when a user selects a source in a zone:

  1. The user picks a source (e.g. "Apple TV") in the zone UI.
  2. GEM records it as the zone's current source.
  3. GEM runs the outgoing source's Off Macro (if the source changed), then the incoming source's On Macro, then the zone's After Global Source Macro (if configured and the incoming source is a global one). If the zone is turning on or off, the zone's On/Off Macro runs too.
  4. Whatever route command you placed in those macros fires — switching the matrix, selecting a receiver input, recalling a DSP preset, etc.

To make routing automatic, put your matrix (or receiver/DSP) route command in the source's On Macro and use a dynamic value placeholder in the command's argument so one macro serves every source/zone instead of hard-coding numbers:

  • [@av_source.address] — the selected source's matrix input address
  • [@av_zone.address] — this zone's matrix output address (the Address field above)
  • [@zone.address] — the underlying zone's address
  • [@device.address] — the source device's address
  • [@device.id] — the source device's ID

These are the same placeholders offered in the Commands argument editor, and they resolve at run time to whichever source and zone triggered the macro. Checking Create source on macros when you add Local Sources gives you the starter macros to drop these route commands into. See AV Sources → Writing routing macros for the full pattern.

Separate audio and video matrices

When you use Advanced addressing (above) on both the zone and the source, GEM exposes each piece separately to the routing macro, so one macro can issue two routes:

Zone: living_room
Video Routing: 1 (video matrix output)
Audio Routing: 3 (audio matrix output)

Source: apple_tv
Video Routing: 2 (video matrix input)
Audio Routing: 4 (audio matrix input)

Macro result: route video input 2 → output 1, audio input 4 → output 3

Author the macro with one route step for the video matrix and one for the audio matrix, each referencing the appropriate input/output address.

Receiver zones fed from a matrix

A common hybrid topology: most zones are switched and amplified by a matrix amp, while a few rooms have their own surround receiver driven by a line-level feed from one of the matrix outputs. Source selection in those rooms needs two switches — the matrix routes the source to the feed output (the generic source macro already does this), and the receiver must be sitting on the input that carries that feed.

Historically that meant a script step inside every source macro asking "is this a receiver zone?". The zone's After Global Source Macro replaces that: only receiver zones configure it, so the question never needs asking and the source macros stay pure matrix routing.

Setup for each receiver zone:

  1. Use Advanced addressing on the zone: put the matrix output feeding the receiver in Audio Routing (ar=) and the receiver input that carries the feed in Audio Endpoint (ae=), e.g. ar=4|ae=CD.
  2. Set the zone's Volume Device to the receiver.
  3. Create one shared macro (e.g. receiver_matrix_input) with a single Send Command step: the receiver's input-select command targeting device [volume_device_id] with input [audio_output_endpoint_address].
  4. Select that macro as the After Global Source Macro on every receiver zone.

Because the device and input resolve from the zone's context at run time, all receiver zones share the one macro — the same placeholder pattern as the generic matrix routing macros.

Sources plugged directly into the receiver (a local Blu-ray on HDMI 1, say) are defined as zone-local sources whose On Macro selects their own input; the After Global Source Macro is deliberately skipped for them. Switching from such a local source back to any matrix source restores the feed input automatically.

Physical Power Reconciliation

GEM's AV state is optimistic: pressing off sets the zone's source attribute to 0 and runs the off macro. If the off command is lost in transit (network blip, device briefly unreachable), GEM shows the zone off while the amp keeps playing — and the off controls disappear from the UI because GEM believes there is nothing to turn off.

For amps whose driver polls physical state (AudioControl Director, RTI AD-8/AD-8x, AVPro AC-MAX, and any driver that writes the zone power_state attribute), GEM detects and self-heals this automatically:

  1. When power_state reports on while source is 0, a debounce timer starts (default 30 seconds — long enough for a normal power-off ramp plus a couple of poll cycles).
  2. If the divergence is still present when the timer fires, GEM adopts the physical state: source is restored — mapped from the amp's reported input when possible, otherwise the source that was playing before the off. On/source macros are suppressed for this write (the zone is already on; re-running warmup or routing would be wrong).
  3. The zone now shows on in the UI, so the off controls return and a normal off can be dispatched.
  4. If no source can be resolved, GEM raises the AV Zone Power Divergence alarm instead — select any source in GEM and turn the zone off, or power it down at the amp.

The reverse direction (physically off while GEM shows on) is deliberately not reconciled: that state is benign — the off controls are visible and pressing off simply converges the states.

Shared amp outputs (audio breakaway). When a video zone and an audio zone share one amp output (the same ar= routing address on the same volume device), the amp's poll writes that output's power and input onto both zones. The off half reading physically on while its sibling plays is expected, not a divergence — so reconciliation is skipped whenever another zone on the same volume device shares the audio routing address and is logically on. Without this, watching TV would adopt the video source into the paired audio zone, which would then show as playing (with the video source) indefinitely after the TV turned off.

Zone attributes:

AttributeDefaultPurpose
power_reconciletrueSet false to disable reconciliation for a zone that intentionally diverges
power_reconcile_seconds30Debounce window before a divergence is confirmed and reconciled

Troubleshooting

Source Not Appearing in Zone

Check:

  1. Source Assignment: Source is assigned to the AV zone (local sources) or is a global source
  2. Hidden Sources: Source is not in the Hidden Global Sources list
  3. Local Sources Only: If enabled, only locally-assigned sources appear
  4. Source Enabled: The source itself is enabled (AV Sources page)
  5. Zone Enabled: The AV zone is enabled

Matrix Not Routing

Remember routing is done by the source's On Macro, not automatically (see How routing works).

Check:

  1. Address configured: the zone has its Address (matrix output) set, and the source has its address (matrix input) set
  2. Route step present: the source's On Macro actually contains the matrix route command
  3. Placeholders, not hard-coded numbers: the route command uses [@av_source.address] / [@av_zone.address] so it resolves to the right input/output
  4. Matrix online: the matrix switcher device is connected
  5. Advanced addressing: if using separate audio/video matrices, verify all four address fields on both zone and source

On Macro Not Executing

Check:

  1. Macro enabled: the on macro is enabled (Automation → Macros)
  2. Macro assigned: the on macro is selected in the AV zone's On Macro field
  3. Macro steps valid: all macro steps are correctly configured
  4. Logs: check system logs for macro execution errors

Volume Not Working

Check:

  1. Volume Device: Correct device assigned in Volume Device field
  2. Device Online: Volume device is connected
  3. Commands: Device supports volume commands in its command set
  • AV Sources - Managing AV source library
  • Zones - Creating parent zones
  • Macros - Creating on/off macros
  • Devices - Configuring matrix switchers and AV equipment
  • Channels - TV channel integration