Skip to main content

Yamaha YNCA Receiver

GEM driver for Yamaha AV receivers that speak the YNCA (Yamaha Network Control Architecture) TCP protocol on port 50000. Covers the RX-V, RX-A (Aventage), and many CX / NX preamp models from roughly 2011 through 2019. Supports up to four named zones (MAIN, ZONE2, ZONE3, ZONE4) with per-zone power, volume, mute, and input.

For newer Yamaha receivers (RX-V6A, RX-A2A, RX-V4A and later) that ship MusicCast only and no longer expose YNCA, use the yamaha_musiccast driver instead.

Prerequisites

  • A Yamaha receiver with YNCA-compatible firmware. Most RX-V / Aventage models from model year 2011 onwards expose YNCA on port 50000. If a telnet <receiver_ip> 50000 connects and stays open, you're good.
  • Network Standby enabled. Setup → Network → Network Standby = On. Without this, the receiver's Ethernet stack drops the moment it goes into standby and the driver loses control after the first power_off.
  • A static IP or DHCP reservation for the receiver. YNCA does not handle IP changes gracefully.
  • No competing TCP session. The receiver accepts only one TCP client at a time — close the Yamaha AV Controller / MusicCast Controller apps on phones and tablets before troubleshooting.

Setup steps

Open Devices

  1. Enable Network Standby on the receiver. Menu → Setup → Network → Network Standby → On.
  2. Pin the receiver's IP. Either set a static IP from the receiver menu or create a DHCP reservation on the router.
  3. Add the device in GEM. Go to System → Devices → Add Device, pick driver yamaha_ynca, and enter the receiver IP. Leave Port on 50000.
  4. Verify protocol. Open the device's Script Console and run:
    await gem.command({device: <device_id>, action: 'get_status', args: {address: 'MAIN'}})
    You should see PWR / VOL / MUTE / INP responses come back within a second or two.
  5. Wire up zones. This driver does not create zones automatically — add one GEM zone per receiver zone you want to control. Set the zone's Subsystem to AV (the AV subsystem ships with every install and is pre-selected for this driver) and set Address to the literal subunit name: MAIN, ZONE2, ZONE3, or ZONE4. State only flows to a zone once it is bound to this device and carries one of those addresses. Most receivers physically only have MAIN + ZONE2; consult the model spec before configuring ZONE3 / ZONE4.
  6. Optional — expose inputs as AV sources. Create AV Sources keyed to the receiver's input codes (HDMI1, NET RADIO, etc.) so the UI can switch inputs by name, and bind an AV Zone to the receiver zone if you want on-screen volume and source selection.

Attributes

Device — required

NameTypeDescription
ipstringLAN IP or hostname of the receiver.

Device — optional

NameTypeDefaultDescription
portint50000YNCA TCP port. Almost always the factory default.
status_intervalint (ms)30000How often to re-query PWR / VOL / MUTE / INP on every configured zone (MAIN is always polled, even if no MAIN zone exists). YNCA also pushes unsolicited updates on user changes, so this is a backstop.
command_throttleint (ms)100Minimum gap between outbound commands. Older firmware drops commands stacked tighter than ~100 ms.
min_volume_dbfloat-80.5Lower bound used when mapping GEM 0-100 volume to YNCA dB.
max_volume_dbfloat+16.5Upper bound used when mapping GEM 0-100 volume to YNCA dB. Lower this on shared installs where guests can run a control UI.

Zone — address

FieldDescription
addressSubunit name as a literal string. Accepts MAIN, ZONE2, ZONE3, ZONE4 (with or without underscore / space). Plain integers 1-4 are also accepted as aliases.

Commands

NameArgsDescription
onaddressPower on (PWR=On).
offaddressPower off / standby (PWR=Standby).
power_on / power_offaddressAliases.
set_volumeaddress, levelSet volume on the GEM 0-100 scale; linearly mapped to YNCA dB.
set_volume_dbaddress, dbSet absolute YNCA dB (-80.5 to +16.5, 0.5 dB steps).
volume_up / volume_downaddressStep by 0.5 dB.
mute_on / mute_offaddressMute / unmute.
mute_toggleaddressToggle. The driver resolves it from the zone's last-known mute_state (sending MUTE=On / MUTE=Off) because YNCA has no native toggle.
set_inputaddress, inputSwitch input by YNCA input code (HDMI1, NET RADIO, SPOTIFY, etc.). The command runner and macro editor offer the common codes as a dropdown.
get_statusaddressQuery PWR / VOL / MUTE / INP for one zone.
get_zonesConnectivity probe. Sends a power query to MAIN / ZONE2 / ZONE3 / ZONE4 in turn and returns all four as candidates — it does not filter to the zones the receiver physically has (absent subunits answer @UNDEFINED on the wire, which the driver ignores). Configure GEM zones only for the subunits your model actually supports.

Common input codes

HDMI1HDMI7, AV1AV7, AUDIO1AUDIO5, AUX, PHONO, TUNER, USB, SERVER, NET RADIO, SPOTIFY, AIRPLAY, BLUETOOTH, MUSIC CAST LINK. The exact list depends on the model — set_input to an unsupported code returns @RESTRICTED on the wire.

Zone state attributes

AttributeValues
stateon / off (mapped from PWR=On / PWR=Standby)
volume0-100, mapped from the YNCA dB report
mute_stateon / off
inputYNCA input code as a string

Known limitations

  • One TCP client. The receiver allows only one YNCA session. If Yamaha's own app is open on a phone, the GEM driver is silently kicked.
  • Volume mapping is linear in dB. YNCA's perceptual response is not linear — small changes near the top of the scale are loud, small changes near the bottom are subtle. Most installs prefer a lower max_volume_db so that the GEM 0-100 slider reaches a comfortable max well before clipping.
  • Power, volume, mute, and input only. DSP / surround modes (SOUNDPRG, STRAIGHT, PUREDIRECT), tuner / NetRadio metadata (@TUN:FREQ=…, @NETRADIO:META=…), and HDMI control / video routing are not exposed as GEM commands or zone attributes, even though the YNCA protocol carries them.

Troubleshooting

  • Connection refused on port 50000. Confirm Network Standby is enabled and that no other Yamaha controller app is connected. On newer-than-2020 receivers YNCA may simply not be exposed — switch to the yamaha_musiccast driver.
  • Commands send but state never updates. response_terminator defaults to \r\n. If the receiver is wired through a serial-over-IP gateway that strips the LF, set response_terminator to \r on the device row.
  • @RESTRICTED on every command. Either the receiver is powered off and the addressed zone is asleep (PWR=On will wake it), or the input/value sent is not supported on the model. Check the receiver's "Network" menu in the OSD to confirm YNCA is enabled.
  • @UNDEFINED after probing ZONE3 / ZONE4. Normal — the receiver responds @UNDEFINED to commands targeting subunits it doesn't have. Only configure zones for subunits the receiver physically supports.
  • Volume slider scale wrong. Check min_volume_db / max_volume_db on the device. The driver maps 0-100 linearly into that range; if your install caps the receiver below +16.5 dB physically, lower max_volume_db so the slider tracks reality.
  • Zones — create one zone per receiver subunit (address MAIN / ZONE2 / …).
  • Subsystems — receiver zones belong under the AV subsystem.
  • AV Zones and AV Sources — expose the receiver in AV routing and switch inputs by name.
  • Commands — test power / volume / mute / input from the command runner.
  • yamaha_musiccast — for newer MusicCast-only receivers that no longer expose YNCA.