Legrand Nuvo multi-room audio support

Hello @bmccrary and @sprocket-9
Although my Nuvo is detected as NV-I8G in nuvo_simple on the front of the amp the model printed is NV-18GM.
(Discontinued - Concerto Whole Home Audio System)

I used the same serial port (usb-to-rs232) that I has in nuvo_simple since it seemed to at least get feedback/communication.
(/dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller_EOBIb132J02-if00-port0)
However when trying in nuvo-serial I get an error “Failed to Connect” in the web GUI.

In debug messages I see the following when trying to establish connection:

2025-01-05 10:20:16.446 ERROR (MainThread) [homeassistant] Error doing job: Task was destroyed but it is pending! (<Task pending name='StreamingReader' coro=<AsyncConnection._streaming_reader() done, defined at /usr/local/lib/python3.13/site-packages/nuvo_serial/connection.py:614> wait_for=<Future pending cb=[Task.task_wakeup()]> cb=[AsyncConnection._streaming_task_done_cb()]>)
2025-01-05 10:20:20.851 ERROR (MainThread) [custom_components.nuvo_serial.config_flow] 
Traceback (most recent call last):
  File "/usr/local/lib/python3.13/asyncio/tasks.py", line 507, in wait_for
    return await fut
           ^^^^^^^^^
  File "/usr/local/lib/python3.13/site-packages/nuvo_serial/connection.py", line 676, in _message_response_reader
    message = await self._read_message_from_buffer()
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/site-packages/nuvo_serial/connection.py", line 719, in _read_message_from_buffer
    message = await self._reader.readuntil(self._eol)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/asyncio/streams.py", line 677, in readuntil
    await self._wait_for_data('readuntil')
  File "/usr/local/lib/python3.13/asyncio/streams.py", line 539, in _wait_for_data
    await self._waiter
asyncio.exceptions.CancelledError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/lib/python3.13/site-packages/nuvo_serial/connection.py", line 504, in send_message
    response = await asyncio.wait_for(
               ^^^^^^^^^^^^^^^^^^^^^^^
        self._message_response_reader(message_types), self._timeout
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/local/lib/python3.13/asyncio/tasks.py", line 506, in wait_for
    async with timeouts.timeout(timeout):
               ~~~~~~~~~~~~~~~~^^^^^^^^^
  File "/usr/local/lib/python3.13/asyncio/timeouts.py", line 116, in __aexit__
    raise TimeoutError from exc_val
TimeoutError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/config/custom_components/nuvo_serial/config_flow.py", line 120, in async_step_init
    self._nuvo = await get_nuvo_async(
                 ^^^^^^^^^^^^^^^^^^^^^
    ...<3 lines>...
    )
    ^
  File "/usr/local/lib/python3.13/site-packages/nuvo_serial/__init__.py", line 35, in get_nuvo_async
    await nuvo.connect()
  File "/usr/local/lib/python3.13/site-packages/nuvo_serial/grand_concerto_essentia_g.py", line 710, in connect
    await self._state_tracker.get_initial_states()
  File "/usr/local/lib/python3.13/site-packages/nuvo_serial/grand_concerto_essentia_g.py", line 184, in get_initial_states
    await self._get_party_status()
  File "/usr/local/lib/python3.13/site-packages/nuvo_serial/connection.py", line 101, in wrapper
    return await coro(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/site-packages/nuvo_serial/grand_concerto_essentia_g.py", line 245, in _get_party_status
    return await self._nuvo._connection.send_message(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        _format_set_party_host(0, False), SYSTEM_PARTY
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/local/lib/python3.13/site-packages/nuvo_serial/connection.py", line 514, in send_message
    raise MessageResponseError(err_msg) from exc
nuvo_serial.exceptions.MessageResponseError: RESPONSEREADER: Timeout waiting for response to message: *Z0PARTY0

Hello… I have a Grand Concerto, and I am using something I have scoured through this long post to find out if anyone else is using… the HI 93A00-1 Serial Server. I am not using USB to RS232 (I couldn’t find anyone else using this combination, if you are out there, can you help me please???). I can not figure out how to write, or what the configuration is for the PORT information. My serial servers are set up as client and server (192.168.4.122 and 128), so I thought the proper way to represent the port was either http://192.168.4.122 (Or is it 128?): 50808 (50808 is the port number I have configured in the HAI serial servers… but NOTHING WILL WORK. I can’t connect to the NUVO. Yet, I can control the nuvo via the MQTT, and not this integration. What do I do? Do i just use the MQTT connection, or is there an advantage to get this to work with this integration? Thank you… I hope this isn’t too confusing… sorry if it is, I am a newb to all of this, especially HA. I REALLY appreciate all of you and all of your expertise and input! Thank you so much…

My best guess after taking a look at the manual would be to use TCP server mode, and use socket://192.168.4.122:50808 or whatever your server IP is.

Hey, the error message you included comes after successful connection and device mode check, so it does look like you have a Grand Concerto and hacs-nuvo-serial is the correct integration to use.

There’s often a few niggly issues when someone starts to use the integration for the first time due to some oddities in the stored config in the nuvo device. It’s best to use the Windows nuvo configuration software (available from that legrand link you included) to connect to your nuvo and load the included default configuration into the device for a clean slate then try the integration again.

If that doesn’t work I’ll need a full debug log to see what’s going on . Go the Settings → Devices and Services → Nuvo integration → Enable Debug logging and send the log.

The documentation can be found here GitHub - sprocket-9/hacs-nuvo-serial: Custom component to control a Nuvo Grand Concerto/Essentia G multi-zone amplifier via serial connection with socket://host:port the correct format to use.

As Brian says I’d go with TCP server mode using the IP address assigned to your Serial Server.

I’d also set this value to 0:

If you want to keep the connection between the 93A00-1 and your remote device always on, then set the value of Close Connection When Remote Idle to 0; otherwise, when the remote device is idle for the time specified, the 93A00-1 will terminate this connection.

Not sure what you mean by control over MQTT? If you have something else set up which talks to the nuvo, don’t be running both that and the integration at the same time as it will likely cause issues.

Hey @sprocket-9 that worked! I only actually used the Windows nuvo config software to download the current config and then just re-uploaded the exact same config and the integration worked.
Now on to the fun part of building my automations. :slight_smile:
Thanks!

@sprocket-9 Thank you for this integration. I just recently added a Concerto G. I am missing the Source option for my Zones. Any ideas?
2025-01-23 17_33_12-Settings – Home Assistant

@sprocket-9 NM. I found the setting once the zone is tuned on. Thanks again for this great integration!
2025-01-24 08_20_27-– Home Assistant

Does anyone know what the difference is between the NV-18GM and the NV-18GM-EX? They both appear to be main controllers.

Great! Good idea to try the config download/re-upload trick, need to remember that.

I’ve not came across this model number before. Have you seen an image of a device with this model number on it? Maybe it’s a Nuvo bundle SKU e.g the main Grand Concerto controller sold with other Nuvo components such as the NV-I8GX zone expander unit or nuvo source device.

I realize this is a very long and old thread but all searches for the NuVo P-series HA Integration leads here. That being said I am not able to code much BUT I did get a copy of the P-Series API kit. Most of the work in this thread focussed on other Legrand products it seems mostly b/c nobody had the API docs…until now.

I’ve been able to make some test calls with Postman and even a small Node Red flow, but if anyone smarter than me wants to devleop a full HA integaration to the P-series…I have the API docs I can share them with anyone that wants to work on it. While the P-Series is discontinued it’s still viable and working solid I just worry about the iOS app going away or not loading onto future iOS versions. Having something in HA would be an ideal fall back to create zone groups etc.

I have a P3100 which I’m trying to control without its official app, so far I had some success with non-standard UPnP commands.
Can you send me the API docs? I’ll see if I can integrate it with Home Assistant, though I have no idea how to manage the zone grouping like the official app does.

I have a P100 and might be able to help furthering the integration. Can you send me the API docs please?

Need help with Nuvo Assesntia, Speaker distribution for my home, recently ihherited this device, and would like to add to my HA, I’ve done some basic integration for my home with Home Assistant and really enjoying it, still not an expert, will eventually get there, in the mean time, I need some help getting my NUVO Assenstia speaker distribution to work with HA. I added the integration part, HA sees the Serial to USB connection but that’s as far as I got, I would like to know how you got the section that shows volume, source, etc. Any help would be greatly appreciated, Thanks in advance.