Skip to main content

Yamaha MusicCast (YXC)

Local LAN integration with Yamaha AV receivers and MusicCast streaming amplifiers via the Yamaha Extended Control (YXC) HTTP API. The driver enumerates the receiver's available zones and inputs, polls each configured zone for power / volume / mute / input changes, and exposes per-zone power, volume, mute, input-routing, and basic transport commands.

Compatible with most current-generation Yamaha gear:

  • RX-V / Aventage AV receivers (RX-V4A, RX-V6A, RX-A2A, RX-A4A, RX-A6A, RX-A8A, …)
  • WXA-50 / WXC-50 / WXA-50 streaming amplifiers
  • MusicCast 20 / MusicCast 50 / MusicCast 200 wireless speakers (single zone)
  • MusicCast Sub 100 / Bar 40 / Bar 400 sound bars

Prerequisites

  • Receiver / amp on the same LAN as GEM, with a static IP or DHCP reservation.
  • Network Standby enabled in the receiver setup (Setup → Network → Network Standby → On). Without this the receiver disappears from the LAN when powered off and the driver will mark it disconnected.
  • (Optional) The MusicCast mobile app paired with the device, if you want to route to authenticated streaming inputs (Spotify, TIDAL, etc.).

Setup steps

  1. Create a device in GEM with driver yamaha_musiccast.
  2. Set the ip attribute to the receiver IP. Leave port at the default 80.
  3. Save. On connect the driver:
    • calls GET /YamahaExtendedControl/v1/system/getDeviceInfo to verify reachability and log the model name
    • calls GET /YamahaExtendedControl/v1/system/getFeatures to cache the supported zones and inputs
    • starts polling each configured GEM zone's getStatus endpoint on status_interval (default 5s)
  4. Run the get_features command on the device to print the zone names and input ids supported by this specific model. Volume scale (max_volume) is also returned per zone.
  5. For each receiver zone you want to control, create a GEM zone with address set to one of: main, zone2, zone3, zone4 (only the zones your model supports).
  6. Use set_input with input ids from get_features (e.g. hdmi1, tuner, spotify, net_radio, bluetooth) to route sources.

Attributes

Device — required

AttributeTypeDescription
ipstringLAN IP of the Yamaha receiver / MusicCast device.

Device — optional

AttributeTypeDefaultDescription
portint80YXC HTTP port. Almost always 80.
status_intervalint (ms)5000Polling cadence per zone. Lower values feel snappier but increase LAN chatter.

Zone

  • Address required: yes.
  • Address format: main, zone2, zone3, or zone4. Run get_features to see which zones this model exposes.

The driver writes the following attributes onto each polled zone as state changes are observed:

AttributeTypeSource
statestringon when the receiver zone power is on, off when in standby.
volumeintegerRaw YXC volume value (model-specific scale).
mutebooleanMute state.
inputstringActive input id.

Commands

System

CommandArgsDescription
get_device_infoModel name, firmware version, system id.
get_featuresAvailable zones, inputs, sound programs, max volume per zone. Run this first when adding a new receiver.
get_statusaddressFull zone status payload.

Zone power & volume

CommandArgsDescription
onaddressPower the zone on.
offaddressPut the zone in standby.
toggleaddressToggle zone power.
set_volumeaddress, levelSet raw volume. Range is model-specific — check getFeatures.zone[].max_volume.
volume_upaddress, step?Step volume up (default step 1).
volume_downaddress, step?Step volume down (default step 1).
muteaddressMute zone.
unmuteaddressUnmute zone.

Source routing & DSP

CommandArgsDescription
set_inputaddress, inputSwitch the zone input. Use ids from get_features (e.g. hdmi1, tuner, spotify, net_radio).
set_sound_programaddress, programSwitch DSP / sound program (e.g. straight, stereo, surround_decoder).

Streaming transport (netusb)

CommandDescription
playResume playback.
pausePause playback.
stopStop playback.
next_trackSkip to next track.
previous_trackGo to previous track.

Transport commands act on the device's current MusicCast playback session and apply across whichever zone is consuming netusb.

Known limitations

  • YXC events — YXC supports server-push event notifications via UDP unicast to a registered listener. This driver currently uses HTTP polling only. Event subscription is a future enhancement (would lower latency and LAN chatter).
  • MusicCast room / link grouping — The driver does not yet wrap dist/setServerInfo / dist/setClientInfo for whole-house link audio. You can still trigger groups from the MusicCast app.
  • Authenticated streaming inputsset_input can route to spotify, net_radio, etc., but the driver cannot sign the receiver into those services. Pair the MusicCast app first.
  • Tuner presets — Not exposed yet. Use set_input to switch to tuner then control via the front panel or remote.

Troubleshooting

SymptomCheck
Receiver unreachable when offEnable Network Standby in Setup → Network.
set_volume rejected or clamped silentlyRun get_features and read zone[].max_volume. RX-V models commonly cap at 161; streaming amps at 60.
set_input failsRun get_features and use an input id from system.input_list[]. Names are model-specific (hdmi1 vs av1).
Zone stuck in off after powering on from front panelCheck that GEM zone address matches the receiver zone exactly (main, zone2, …). The driver only polls zones with addresses it recognizes.
Frequent log noise about HTTP errorsIncrease status_interval if the receiver / network is slow. Default 5s is comfortable on wired LAN.