Russound MCA / RIO
GEM driver russound_rio controls Russound MCA-66, MCA-88, MCA-C5, and MBX-series multi-zone amplifiers using the RIO ASCII protocol over TCP port 9621.
What it does
- Per-zone power, volume, mute, and source select.
- Live state updates via the RIO
WATCHevent subscription mechanism, with a periodic poll as a fallback. - One driver instance per controller; chained controllers share the TCP socket but address as
2.x,3.x, etc.
Prerequisites
- MCA-series amplifier with RIO Ethernet enabled. RIO is the default protocol on the MCA-C5 and MBX series; legacy MCA-66 amplifiers may need a Russound USB-to-Ethernet bridge or a firmware update before RIO is available.
- TCP port 9621 reachable on the LAN.
- No other RIO client (MyRussound mobile app, third-party controller) holding the socket — most RIO firmware revisions allow only a single concurrent TCP client.
Setup steps
- Assign a static IP or DHCP reservation to the amplifier.
- In GEM, create a Device with driver
russound_rioand enter the amplifier's IP. Port 9621 is the default. - If you have multiple amplifiers chained on a single RNET bus, set
controller_idon each device row (1 for the first amp, 2/3/4/5/6 for downstream amps). For most installations there is just one amp and the default of 1 is correct. - Run the
get_zonescommand to enumerate available zones — the driver issues aGET C[x].Z[y].namefor each zone slot. - Create a GEM zone per amplifier zone. Set
zone.addresstocontroller.zone(e.g.,1.1for the first zone of the first controller,1.6for the sixth zone of an MCA-66,2.1for the first zone of a chained second amp).
Attribute reference
Device
| Name | Required | Description |
|---|---|---|
ip | yes | LAN IP or hostname of the amplifier. |
port | no | TCP port. Defaults to 9621. |
controller_id | no | Position in the RNET chain. Defaults to 1. |
status_interval | no | Resync poll interval (ms). Defaults to 60000. Live updates arrive via WATCH events; this is a fallback in case of dropped notifications. |
Zone
No required zone attributes. The zone address field encodes the controller and zone index.
Zone address format
<controller>.<zone> — e.g.:
1.1— first zone of the first controller1.6— sixth zone of an MCA-661.8— eighth zone of an MCA-882.1— first zone of a chained second controller
A bare zone number (e.g. 3) is also accepted and is interpreted as <controller_id>.3, but the explicit controller.zone form is preferred.
Commands
| Name | Args | Notes |
|---|---|---|
on / off | address | Power the zone on or off. |
set_volume | address, level | Volume 0-100. The driver scales to the RIO native 0-50 range internally. |
volume_up / volume_down | address | Single-step volume change. |
mute_on / mute_off / mute_toggle | address | Mute control. |
set_source | address, source | Source index 1-8 (matches the input wiring on the amp). |
get_zone_status | address | Refreshes power/volume/source/mute for a single zone. |
get_zones | — | Enumerate zones on the configured controller. |
Known limitations
- Source labels are not yet round-tripped —
set_sourcetakes the absolute index. A future enhancement could queryGET S[x].nameand surface the labels to the UI. - Audio metadata (current track, artist, etc.) reported by RIO sources is not yet captured.
- Zone groups (linked zones) are controllable individually but the group state itself is not modeled.
- Older MCA-66 firmware that pre-dates RIO 02.x does not support
WATCH; in that environment the driver falls back to polling only.
Troubleshooting
| Symptom | Check |
|---|---|
| Driver shows connected but commands fail. | Confirm no other RIO client is connected. RIO permits a single TCP client at a time on most firmware. |
| Volume slider goes to 50 instead of 100. | The driver scales 0-100 → 0-50. If a UI control is reading the raw amp value the conversion was bypassed; check that the volume attribute on the zone is being read, not currentVolume or similar. |
| Connect succeeds but no event updates arrive. | Verify the WATCH C[x].Z[y] ON subscription returned S (success) on connect — log line is visible in the device log. RIO firmware older than 02.x replies E and falls back to polling. |
| Second chained amp not responding. | Make sure each chained amp has its own GEM device row with the matching controller_id. Both rows can share the same ip. |