Legrand Nuvo multi-room audio support

Yeah I may revisit the config flow for the zone import at some point, as there’s no way to choose which ones you want included or edit after install.

Workarounds for now:

  • Pre-disable any zones/sources you’re sure you won’t ever use in HA before installing the integration as it ignores these. Either use the Nuvo Configurator software or the nuvo-serial python lib commands to disable.

  • Let it import everything then disable them at the Home Assistant entity level.

  • If you manually configure lovelace UI, import everything and only add cards for entities you want to see in the UI.

Serial port and source list names can be changed after install by choosing Configure from the integration.

Installed ok on my Pi and VM, very quick response to commands. I used the player options you suggest but had to add my own buttons for play, prev and next. Am I missing something?
I’d be interested in what other players people have configured…

How did you get a specific file to play in your doorbell setup? I was wondering how I could select music, is it possible to send commands to navigate to favourites, e.g. 1-5?
Sending a message to a zone might be useful too.
Good stuff so far, very pleased, great job @sprocket-9

These are on my list. I am new to HA and impressed by the community and how easy it has been to bring together different hardware stacks over IP or serial. I now have my lighting (Rako), music (Nuvo) and alarm and sensors (Texecom) all controllable through HA integrations plus some shelly stuff. In all cases the entities have been added automatically by the integration which is so much better than writing yaml scripts. I find Node Red works for me to build automations.

I am also trying to get text to speech working through the Nuvo speakers. I have a Nuvo MPS4 as a source but have really stopped using it as a primary one. I now use the DAB tuner plus Volumio running a RPi. The Nuvo keypads are fine for swapping sources but not practical for browsing through a large music library. The Nuvo app works but is horrible compared to the Volumio front end. Volumio also comes in directly to HA as a music player. So far I can’t make the TTS work through Volumio but haven’t had the time to debug.

The play/prev/next services which simulate the keypad presses were added late on and the the media player component representing a nuvo zone currently doesn’t have support for these services enabled, which is why the buttons are missing in the card.

Having the button on the zone player are only really useful for nuvonet sources - I don’t have any myself and use separate HA media player cards for my supported sources, each with their own media control buttons.

However I’ll enable support in the next HACS release - those that don’t want the buttons visible can use the mini media player configuration options to hide them, or alternatively, the buttons will cause automation triggers to fire when a non nuvonet source is selected and could be used to write automations to call the media control services of whatever HA supported source is selected for a zone - if anyone is feeling adventurous :wink:

My doorbell automation:
Connect the audio out from the HA machine soundcard to nuvo source 6
Create an automation triggering on the doorbell ring
Call the nuvo_serial.page_on service
Play the mp3 using the HA VLC integration
Add a delay matching the mp3 duration
Call nuvo_serial.page_off service

If you don’t want to dedicate source 6 to this purpose you could do an automation like:

Use nuvo_serial.snapshot service to snapshot zones you want to include
Switch to desired nuvo source (HA supported)
Call service to play the mp3
Call nuvo_serial.restore service for each zone

1 Like

Agreed on your HA assessment, I wasn’t expecting so much when I looked into first time but it’s very impressive. Which integration do you use for your Texecom sensors?

I use texecom2mqtt to integrate the alarm panel and sensors. I had to upgrade my alarm panel from Premier to Premier Elite to get it working - I already had a ComIP for programming. I have quite a few PIRs and alarm contacts on doors/windows so it’s good to be able to use these in other automations. What I like about HA is that it makes it easy to combine a rako PIR in the porch with a texecom alarm contact on the front door to determine whether to switch on the hall lights.

I have started to have a play with the Nuvo page and snapshot. For the TTS I had a spare Chromecast audio so plugged this into input 6 on the Nuvo.

I’m using a tweaked version of GitHub - davidMbrooke/texecom-connect: Python software to monitor a Texecom Premier Elite alarm panel using the Texecom Connect protocol added in v4. but it took a bit of massaging and manually adding sensors to get something working. texecom2mqtt looks pretty comprehensive I’ll need to try it out.

I’ve been excited to get the Home Assistant integration working with my Nuvo Essentia G. Unfortunately when I go to set it up, I cannot get it to connect to the port I specify (/dev/ttyUSB0 which I believe is correct). I realized my model number is slightly different as it’s NV-E6GM. Could this be the issue or is there something else I may be missing? Any help would be appreciated. Thanks.

I didn’t try David’s code which also looks promising. I went straight to texecom2mqtt which did a good job of making the setup easy via the add-on route. It found the panel and all the attached sensors without any manual intervention. So far I have only used the alarm sensors to trigger other things but the panel status, power settings etc. all seem present and correct. I haven’t any real need to arm/disarm as I tap in-and-out using the prox fobs.

I find MQTT (mosquitto) to be completely stable and now have shelly and Ikea devices hooked up through this route. As someone learning I also like that I can see what’s happening in terms of messages from within HA or via the MQTT explorer client.

Hi Ed,

I haven’t tried with the Essentia but got the Grand Concerto working fine. They both use the same protocol and I have always viewed then as interchangeable. I do have an Essentia around so could always give it a try.

A couple of thoughts which you have probably already got past:

  1. Can you configure the Essentia via the serial port and Serial->USB cable you are using for the HA integration? Can we confirm that the cable works?

  2. Have you confirmed the USB port reference - I found myself double-checking the port ID via SSH as I wasn’t sure about the sequence on my HA box. I have the shell addon within HA and then used the command dmesg (I don’t have lusb available):

dmesg | grep tty
...and at the end I get confirmation of the two USB devices I have
usb 1-1.3: pl2303 converter now attached to ttyUSB0
usb 1-1.4: ch341-uart converter now attached to ttyUSB1

USB0 is the Nuvo cable. I have a zigbee stick on USB1.

Kind regards,

Tom

When you’ve correctly identified your serial port device, also check device permissions following the steps I gave here:

If you have multiple usb tty devices it’s also a good idea to add an alias for the nuvo device to ensure the device names don’t get changed around on reboot.

If it’s still not working at this stage:

Congratulations on being the the first person to try this out on an Essentia G :slight_smile:

While the docs say it’s protocol compatible with the GC there may well be a few oddities that need ironed out.

Did HA display an error message when trying to connect?

To give me an idea what’s going on under the hood add this in configuration.yaml:

logger:
  logs:
    nuvo_serial: debug

The log will be long so better paste it in a pastebin rather than here.

Hi Tom,

Thanks so much for your reply. I was able to configure the Essentia G via the USB to serial cable and the configurator app, so I think all is good there. I ran the dmesg command you suggested and it returned this at the end:

usb 1-1.1: p12303 converter now attached to ttyUSB0

I then used this as the port when setting up the integration:

/dev/ttyUSB0

Unfortunately this didn’t work for me, but I will try posting my log below and double checking permissions as sprocket-9 suggested.

Thank you,

Ed

Thanks for taking the time to look at my issue. I’ve tried looking into the suggestions that you offered, including the serial port permissions. In my case the homeassistant process is owned by root. I also made sure that the dialout group is showing when I run ‘groups root’.

I did notice a basic error message after HA tried to connect to the Nuvo:

7:23:12 PM (Error) nuvo_serial (custom integration)

When I select it, this is revealed:

This error originated from a custom integration.

Logger: custom_components.nuvo_serial.config_flow
Source: custom_components/nuvo_serial/config_flow.py:111
Integration: nuvo_serial (documentation, issues)
First occurred: 7:23:12 PM (1 occurrences)
Last logged: 7:23:12 PM

Traceback (most recent call last):
File “/config/custom_components/nuvo_serial/config_flow.py”, line 111, in async_step_init
self._nuvo = await get_nuvo_async(
File “/usr/local/lib/python3.8/site-packages/nuvo_serial/init.py”, line 33, in get_nuvo_async
await nuvo.connect()
File “/usr/local/lib/python3.8/site-packages/nuvo_serial/grand_concerto_essentia_g.py”, line 163, in connect
self._setup_subscribers()
File “/usr/local/lib/python3.8/site-packages/nuvo_serial/grand_concerto_essentia_g.py”, line 255, in _setup_subscribers
for msg_type in MSG_CLASS_TRACK[self._model]:
KeyError: ‘Essentia_G’

I went ahead and updated configuration.yaml, though the log that was generated was sadly too large for pastebin. I placed it on Dropbox, hoping that might work for you:

https://www.dropbox.com/s/ns6igjaofbcc1ix/Nuvo%20log%2001.txt?dl=0

Thank you for taking the time to work with me on this, I appreciate it.

Ed

Hi Ed,

Ohhh yeah I spotted this problem with the missing Essentia_G key a while ago and completely forgot about the bug fixes I made. The fixes are in the nuvo-serial library that the integration uses but it’s not in a pypi installable release yet as I’m working on some other things before doing one, so you’ll need to grab the changes from the git repository for now.

Probably easier for you to just to copy the new files over the top of the installed ones:

cd /usr/local/lib/python3.8/site-packages/nuvo_serial/
wget https://raw.githubusercontent.com/sprocket-9/nuvo-serial/main/nuvo_serial/grand_concerto_essentia_g.py -O grand_concerto_essentia_g.py
wget https://raw.githubusercontent.com/sprocket-9/nuvo-serial/main/nuvo_serial/connection.py -O connection.py
wget https://raw.githubusercontent.com/sprocket-9/nuvo-serial/main/nuvo_serial/const.py -O const.py
wget https://raw.githubusercontent.com/sprocket-9/nuvo-serial/main/nuvo_serial/message.py -O message.py

There’s probably more little fixes like this to do, so if you encounter problems send the log over again. It looks like DEBUG level logging is on for everything in HA which is why the log is so huge, try changing the default log level:

logger:
  default: info
  logs:
    nuvo_serial: debug

Thanks for the additional help. I was able to copy across the new files - the good news is, it seems like it is actually trying to do something now when I add the integration. I see the window area flashing, before it fails to connect again.

Thanks for the tip on the log file piece, I made those changes and was able to get it into Pastebin this time (hopefully I did this right):

Thanks again for your continued help.

Ed

I take it back - I tried again a few hours later and now when I add the integration it appears to be working correctly! I can now see my sources and zones listed. I’m new to the Nuvo system and HA but am really looking forward to playing with this setup. Thanks for creating this integration and working with me to help resolve the issues I was having, I really appreciate it!

Ed

Ed great to hear you got it up and running!

While trying to work out why it wasn’t working for you I came across this in the docs:

A special exception to this rule is made for an Essentia E6G system that is in STANDBY mode. STANDBY mode is entered when an ALL OFF command is issued from a Control Pad (key press or IR control), or when the ALLOFF command is issued to the RS232 port (see paragraph 6.4). The Essentia E6G system is Energy-Star compliant, meaning that the entire system has to consume less than one watt when in this STANDBY mode. For this reason, the Main Processor Unit and all the Control Pads go into a very low-power sleep state. The first character received on the E6G system’s RS232 port in STANDBY mode
will “wake up” the processor, but a pause of 5 milliseconds is required between this “wake-up” character, and the actual command character sequence (beginning with the ASCII “
” character) to the RS232 port.

There is currently nothing in the code to handle this special standby mode for the Essentia, so from what’s it’s saying I think the first command sent when the system is in standby will fail, but it will cause the system to wake up and subsequent commands will work as normal. Do you experience this?

Hi there

Appreciate your work on this. I also wanted to try your custom component for myself. I am having trouble getting it running though.

Like the user above my model is the Essentia G (NV-E6GM)

USB to serial connecting attatched to /dev/ttyUSB2. I know the cable works becuase I am currently using homebridge to control my amp.

When trying to switch to this i enter the port and model but it keeps saying failed to connect.

This error originated from a custom integration.

Logger: custom_components.nuvo_serial.config_flow
Source: custom_components/nuvo_serial/config_flow.py:111
Integration: Nuvo multi-zone amplifier (serial) (documentation, issues)
First occurred: 5:39:28 PM (1 occurrences)
Last logged: 5:39:28 PM

Traceback (most recent call last):
File “/config/custom_components/nuvo_serial/config_flow.py”, line 111, in async_step_init
self._nuvo = await get_nuvo_async(
File “/usr/local/lib/python3.8/site-packages/nuvo_serial/init.py”, line 33, in get_nuvo_async
await nuvo.connect()
File “/usr/local/lib/python3.8/site-packages/nuvo_serial/grand_concerto_essentia_g.py”, line 163, in connect
self._setup_subscribers()
File “/usr/local/lib/python3.8/site-packages/nuvo_serial/grand_concerto_essentia_g.py”, line 255, in _setup_subscribers
for msg_type in MSG_CLASS_TRACK[self._model]:
KeyError: ‘Essentia_G’

Any suggestions on what I can try?

Hi Ank,

This is the same error Ed encountered. The fix is to follow the steps in this post Legrand Nuvo multi-room audio support - #75 by sprocket-9

So I followed the steps.
Used terminal to cd into the nuvo_serial directory.
Ran wget to get the 4 updated files. I can see them in the nuvo serial folder. Restarted server for good measure.
Trying to add the integration now gives me the error “config flow could not be loaded”

Logger: homeassistant.config_entries
Source: config_entries.py:671
First occurred: 2:18:38 PM (1 occurrences)
Last logged: 2:18:38 PM

Error occurred loading configuration flow for integration nuvo_serial: cannot import name ‘DOMAIN’ from ‘custom_components.nuvo_serial.const’ (/config/custom_components/nuvo_serial/const.py)

I also tried uninstalling the add on from hacs and repeating the whole process from scratch but I still get the error. I’m unable to get to the port selection and model window.

Im really itching to get this working :slight_smile: Any more advice?