Ever since voice satellites were introduced to Home Assistant, people wanted to use good microphones and speakers for this purpose, but not many were really available.
In a valiant attempt to free a Google Nest Mini (2nd generation) from its privacy ignoring overlords, Justin Alvey created Onju Voice, a drop-in replacement PCB for the Mini, with an ESP32-S3 at its heart, capable of some pretty funky stuff.
The purpose of this ESPHome config is to be able to use such a modded Nest Mini as a voice satellite in Home Assistant. Here's a small demo:
The PCB is NOT my work and has its own license. This repository only refers to the ESPHome config that makes the board a HA-compatible voice satellite.
The config is distributed under the MIT License. See LICENSE
for more information.
The notification sounds used are under CC BY 4.0 ATTRIBUTION license.
- wake word (including microWakeWord in an experimental phase), push to talk, on-demand and continuous conversation support
- response playback
- audio media player
- service exposed in HA to start and stop the voice assistant from another device/trigger
- visual feedback of the wake word listening/audio recording/success/error status via the Mini's onboard top LEDs
- uses all 3 of the original Mini's touch controls as volume controls and a means of manually starting the assistant and setting the volume
- uses the original Mini's microphone mute button to prevent the wake word engine from starting unintendedly
- automatic continuous touch control calibration
- Home Assistant 2024.7.0 or newer
- A voice assistant configured in HA with STT and TTS in a language of your choice
- ESPHome 2024.7.3 or newer
- you have to be able to retrofit an Onju Voice PCB inside a 2nd generation Google Nest Mini.
- ESPHome currently can't use the I2S bus for both listening and playing simultaneously. As such, if you want to stream audio (like a TTS notification) to the Onju, you need to stop wake word listening first
- the version for
microWakeWord
is in BETA and probably full of bugs (please report them if you find any)
Here is a video explaining how to perform the PCB "transplant". You can find some instructions for disassembly here.
To flash the Onju Voice for the first time, you have to do so BEFORE YOU PUT EVERYTHING BACK TOGETHER in the Google Nest Mini housing. Otherwise, you lose access to the USB port.
So, before connecting the board for the first time, hold down the BOOT switch on it and connect a USB cable to your computer. Use the ESPHome web installer to flash according to the config below.
Double check Wifi connection details, API encryption key and device name/friendly name to make sure you use your own.
After the device has been added to ESPHome, if auto discovery is turned on, the device should appear in Home Assistant automatically. Otherwise, check out this guide.
Although the online MP3 files should work, downloading them implies some lag. It's far better to have them locally available.
- Create a folder named
sounds
in yourconfig
folder underwww
. You now have aconfig/www/sounds
folder. - Upload notification sounds in the folder (MP3 prefferable, to avoid encoding issues), e.g.
error.mp3
- Replace the URL in the
substitutions:
section with your own URLs (e.g.http://homeassistant.local:8123/local/sounds/error.mp3
). If your HA instance is available athttp://homeassistant.local:8123/
, then whatever you upload to thewww
folder is available athttp://homeassistant.local:8123/local/
- obviously, a huge thanks to Justin Alvey (@justLV) for the excellent Onju Voice project
- many thanks to Mike Hansen (@synesthesiam) for the relentless work he's put into Year of the Voice at Home Assistant
- thanks to @kahrendt for microWakeWord
- thanks to @gnumpi for migrating the ESPHome
media_player
component to ESP-IDF - thanks to Klaas Schoute for helping with a creating a microsite for the automatic installation of this config (still experimental)
- thanks to the ESPHome Discord server members for both creating the most time saving piece of software ever and for helping out with some kinks with the config - in particular @jesserockz, @ssieb, @Hawwa, @BigBobba
- thanks to UNIVERSFIELD for the notification sounds (licensed CC BY 4.0 ATTRIBUTION, slightly shortened and converted to mono)
If you'd like to thank me for creating and maintaining this config, you can