Skip to main content

Nuvo Grand Concerto / Essentia G

Multi-zone audio amplifier driver for the Nuvo (Legrand) family of installer-grade amps: the Grand Concerto (16 zones), the original Concerto (12 zones), and the smaller Essentia G (6 zones). The driver speaks Nuvo's published ASCII integrator protocol over a TCP socket — typically against a serial-over-IP gateway sitting in front of the amplifier's 9-pin port.

Prerequisites

  • A Nuvo amplifier: Grand Concerto (NV-I8G / NV-I8GMS), Concerto (NV-I8), or Essentia G (NV-E6G).
  • A serial-over-IP gateway wired to the amp's "Integrator" or "RS-232" DB-9 port. Anything that supports transparent TCP server mode works — Brainboxes ES-313 / ES-279, Global Cache GC-100, USR-IOT USR-TCP232 / USR-N510, Moxa NPort 5110, etc.
  • The gateway configured for 57600 baud, 8 data bits, no parity, 1 stop bit, no flow control, in transparent TCP server mode.
  • The gateway's TCP port reachable on the LAN from the GEM controller.

The Nuvo amps themselves do not have an Ethernet jack — even the units that ship with a "Concierge IP" accessory expose the same ASCII protocol on TCP, so this driver covers both retrofits (USB-Serial gateway) and the factory IP modules.

Setup

  1. Verify the gateway is talking to the amp. From a workstation, telnet <gateway-ip> <port> and send *Z01STATUS followed by carriage-return. You should see a line starting with #Z01PWR… come back within a second or two. If nothing comes back, the gateway's serial parameters are wrong or the RX/TX pair is reversed.
  2. Add a GEM device. In /admin/devices, create a new device of driver type nuvo_concerto and set:
    • ip — the gateway IP
    • port — the gateway TCP port (5006 is the driver default; Brainboxes typically uses 9001, GC-100 uses 4999, USR-IOT uses 8234)
    • max_zones — 16 for Grand Concerto, 12 for Concerto, 6 for Essentia G
  3. Enable the device. The driver will open the TCP socket, query every zone's status once, then keep state in sync via a 60-second polling loop. The amplifier also emits unsolicited status lines on user changes (front-panel keypad, app, IR), which the driver picks up immediately.
  4. Create one GEM zone per amplifier zone. zone.address is the Nuvo zone number as a plain integer — 1 through your amp's max. Once the zone exists, the driver will start writing state, volume, source, and mute_state attributes onto it.
  5. (Optional) Create AV sources. If you want named source switching in the UI (e.g. "Sonos", "Apple TV", "Tuner") rather than raw indices 1-6, create an AV source row for each input you have wired and key it to the absolute source number.

Attribute reference

Device

AttributeRequiredDefaultDescription
ipyesGateway IP address
portyes5006Gateway TCP port
max_zonesno16Upper bound for get_zones discovery
status_intervalno60000Backstop poll interval in ms
command_throttleno120Minimum gap between outbound commands in ms — do not drop below 100

Zone

AttributeRequiredDescription
addressyesNuvo zone number 1-16 as a plain integer

The driver writes state (on/off), volume (0-100), source (1-6), and mute_state (on/off) onto each GEM zone as it sees status arrive.

Zone address format

A single integer matching the physical Nuvo zone number on the amplifier:

1 2 3 … 16

Pad and Z-prefix are added internally — write 5 in the admin UI, not Z05.

Commands implemented

  • on / off — per-zone power
  • all_off — every zone on the amp
  • set_volume — GEM 0-100 scale; the driver inverts and scales to the native 0-79 wire format
  • volume_up / volume_down
  • mute_on / mute_off / mute_toggle
  • set_source — absolute source index 1-6
  • get_zone_status — force a status read on one zone
  • get_zones — poll every zone up to max_zones and return the discovered list

Known limitations

  • Native Nuvo volume is inverted (0 = loudest, 79 = mute). The driver hides this — GEM's volume attribute is always 0-100 with 100 = loudest, scaled on both the way in and the way out. If you ever see raw 0-79 values it means a UI consumer is bypassing the conversion.
  • Source switching is by index, not label. The Nuvo amp has no software way to label its source inputs; the on-amp labels are silkscreen only. Name your AV sources in GEM to whatever's wired to that input.
  • No EQ exposure yet. Bass, treble, balance, and DND/group commands are part of the protocol but not surfaced in getCommands() for this release.
  • No scene/group support yet. Nuvo supports linking zones into groups via *ZxxGRPx; that surface is not yet wired through this driver.

Troubleshooting

SymptomCheck
No response from ampTelnet to the gateway and send *Z01STATUS\r manually. No reply → gateway is not at 57600 8N1 or the TX/RX pair is reversed.
Power state updates but volume doesn'tThe status line is being truncated. Try raising command_throttle to 150-200ms — a too-fast gateway buffer can fragment the response.
Live updates lag by 60sUnsolicited status from the amp isn't reaching the gateway. Confirm response_terminator is \r (driver default) — some gateways inject CRLF and the parser depends on the bare CR framing.
Wrong volume scale in the sliderA control is reading the raw Nuvo 0-79 value instead of the GEM volume attribute. Always read volume (0-100) off the zone, never the wire value.
Commands accepted but the amp ignores some zonesConfirm max_zones matches the physical amp. Sending *Z14ON to an Essentia G (which only has 6 zones) is silently ignored.