View on GitHub

ESPHome Razer Nommo Pro Speaker Controller

ESPHome-based BLE protocol control for Razer Nommo Pro speakers by dark_skeleton // d-rez. Powered by ESPHome and ESP Web Tools.

Picture of speakers

About

Razer Nommo Pro are decent speakers and come with a phone app to control them in pretty much every aspect. Unfortunately if you’re using them as a TV speaker and the control pod is far away, it’s quite inconvenient to have to get up and turn them on, or find your phone and launch the app.

No more! With some work and effort I was able to sniff and decrypt (well… technically reverse-engineer) the Bluetooth protocol used by Razer which allows for pretty much full control of the device. With the power of ESP32 (sorry ESP8266 lovers, as mentioned the speakers use BT), ESPHome and Home Assistant, you can now control your Razer Nommo Pro speakers via WiFi and even integrate them with other things for automatic power-on together with a TV, changing EQ depending on whether Plex is playing, etc, maybe making sure volume after 10pm isn’t set to over 50% etc.

Supported features:

HASS overview

Installation

Download the project yaml config file from the repository. Edit required (#CHANGE ME)values, compile and flash as usual. Best to flash via serial connection.

Important

Adding as a Media Player to Home Assistant

You can link together certain controls for a more unified look/feel of the controller. Adding the speaker like that will also let you use them with the Google Assistant integration to control certain features of your speaker, specifically on/off and volume. Source selection is supposed to be supported as well, but I wasn’t able to get it to work myself.

Once you have connected with HASS via the API, add contents of the following file to your configuration.yaml. Don’t forget to replace rz_spk_ctl device_name if you changed it in the esphome yaml.

Preview HASS Media Player yaml here

Note that certain features (like bass level, connection status, EQ bands and some more) aren’t able to be exposed to media_player component, but can be added separately in the Lovelace card group/stack, however this should add a nice logic to those entities.

Making it even nicer

Lovelace overview Lovelace EQ Selection Lovelace Source Selection New in v1.1: Equalizer display

To make it look like above, you’ll need a few more things:

  1. Install the mini-media-player hass custom component
  2. Install bar-card hass custom component
  3. Create a new Lovelace card with the following (or similar) code, adjust as needed

Preview Lovelace yaml here

Want more?

With Home Assistant you can continue creating different automations, volume changes, power sync with other devices and more using HASS Automations or Node Red.

It’s all cool and nice but I’m only here for Razer’s BLE protocol deets

You can access my findings regarding the protocol used here. I tried to keep it as informative (for both you and the future me) but it might not be explained in the best way. In this case - oh well, bad luck.

Notes

The speaker can only connect to one device at a time, so if you want to use your phone app you’ll have to make sure to disconnect using the _nommo_enable_control switch.