Voice satellite comparison: HA Voice PE vs. FutureProofHomes Satellite1 vs. Seeed reSpeaker XVF3800

In my previous post (Integration tuned for running Assist on a local LLM in 8 GB VRAM) I described my fully local-LLM Assist setup and mentioned that the Seeed reSpeaker gave me the best speech recognition of the three satellites I tried. Here is the full comparison.

My setup (and why it matters for this comparison)

  • Satellites are mic-only. All three devices are set to silent. Replies play on my Google Cast speakers via my Mic to MediaPlayer integration.
  • STT is the same for all three: Home Assistant Cloud. So the only variable is the microphone front end: mics, audio processing, wake word.
  • Command processing: my AI Plugin integration with a local LLM on an RTX 3060 Ti. Not relevant to recognition quality, but it’s the rest of the chain.

Important caveat: because audio plays on external speakers, none of the devices gets an echo-cancellation reference signal. This comparison is about wake word and speech pickup, not about talking over the device’s own playback.

The devices

HA Voice Preview Edition FPH Satellite1 Seeed reSpeaker XVF3800 + XIAO ESP32-S3
Audio chip XMOS XU316 XMOS XU316 XMOS XVF3800
Microphones 2-mic array 4-mic circular array 4-mic circular array
Price (before VAT) 60$ 70$ 65$

How I tested

  • Distances at ~5m
  • Background noise: TV, music playing, other conversations
  • Same wake word, same speaker (me), same commands on all devices

Why I think the reSpeaker comes out ahead

My interpretation, not a lab measurement: the XVF3800 does beamforming, noise suppression and automatic gain control on the chip across four mics, so the ESP32 receives an already cleaned-up voice signal.

What the others do well

  • Voice PE: polished out of the box, easiest setup
  • Satellite1: great DIY project for creating your own smart speaker, 3D-printing files available

Limitations

One home, one voice. I’d treat this as one data point, not a verdict.

I’d love to hear from others: does the reSpeaker also come out ahead in your rooms, and has anyone compared them with the onboard speaker and echo cancellation active?

I did a lot of testing with the VPE vs reSpeaker. I did not buy a Satellite 1 because their firmware was 2 mic only (at the time, if not still?) and figured it was a lot like VPE.

To me the reSpeaker is almost TOO sensitive, though that’s jumping ahead.

There are different dimensions to doing this kind of test:

  • What kind of ambient noise do you have - quiet, loud, and in between
  • If ambient is loud(ish) where are you in relation between noise and speaker
  • Do you have multiple satellites

I found in a quiet environment the VPE and reSpeaker are both quite fine, they are very sensitive, and can hear the wake word from a long distance. Is the reSpeaker better? Yes. I think without doubt, but both are almost too good because…

If you have multiple satellites, in a quiet environment, you will continually get the wrong satellite answering. I have 7 satellites scattered around a 2700 sq ft house, in places I had a google mini before. Almost without exception in a quiet environment 2-4 of them hear the wake word, and that’s at the very lowest sensitivity setting.

HA’s reconciliation of multiple satellites is based entirely on arrival time; if they were wired and powerful that would be fine (speed of sound), but wifi variability as well as esp32 being a bit of a wimp means you stand a very good chance the wrong one answers.

Now… in a not-so-quiet ambient environment the reSpeaker works well if you are between the noise and speaker, especially if off at an angle – the beam forming helps a lot. If you are directly between it’s not as good. And you stand a far higher probability that only the nearby reSpeaker will respond. However, I find I frequently have to move even a bit closer to the reSpeaker for it to get the STT aspect right – especially if the TV is speaking, and if so it mixes dialog from the TV with mine. The best solution I have found is to have the reSpeaker mute any nearby TV’s on wakeword end. That works fairly well.

The reSpeaker, with a $15 speaker and a 3d case actually has great sound quality (considering). The VPE is pretty awful, tinny and sounds like it’s in a box. Perfectly usable, but annoying. I think adding a 3" (+/-) driver with a good air-tight case is well worth the effort. I also initially used a google mini as the output speaker, that works well, but this is better. I’ve now retired all my google speakers except two Max and two Home (not mini) which I still use for music.

The best results I got was with the reSpeaker (as USB) with linux on a wired raspberry pi. But that’s expensive and awkward (I don’t have wires everywhere). It’s quicker to respond, and fast enough essentially every time the right one answers. I also did not go that way because it’s unclear how well supported that will be by OHF.

At present I am using reSpeaker’s (with formatBCE’s code) in the most frequented parts of the house, keeping the VPE’s for the less used. They work quite well. The main annoyance is they need better arbitration of “nearest”.

Linwood

Thanks for your write-up, especially the part about multiple satellites. I hadn’t thought much about arbitration by arrival time yet.

You’re right about the Satellite1. The board has 4 mics, but the XMOS firmware still only uses 2 of them. 4-mic support is an open issue on their GitHub and there’s no release date yet. That probably explains a good part of why the reSpeaker came out ahead for me.

I’ve actually also built a speaker myself with a Satellite1, and it could just as well take a reSpeaker. Still, I’ve stuck with the Google speakers for output so far. I like their sleek design better than a 3D-printed case, the sound is pretty good for the price, and I wouldn’t want to give up casting to multiple rooms. Long term I may have to replace them, but for now I thought this was a good chance to show they can still be used with most of the privacy concern removed, since they only play the replies and never listen.

For now I only have one reSpeaker, but two more are on the way. Once they’re set up I’ll report back on how the multi-satellite “wrong one answers” problem looks here, and whether the TV-muting trick helps.

When you say the VPE sounds tinny, do you mean its built-in speaker, or an external speaker connected to the VPE’s 3.5 mm output?
When you used a Google Mini as the output speaker for the reSpeaker, how did you connect it? Did you send the audio to the Mini as a Cast media player from HA, or did you run a physical connection somehow (the Mini has no line-in)?

I also went down the Music Assistant rathole finally, and so now can play music to any of the voice satellites (as well as the remaining google speakers). It’s not “cast” as in google cast, but it is playing audio to them. I do still have google cast for google TV (not sure if I will replace it, since all the replacements are similar in terms of ads/spyware/etc.).

It’s possible to rig those (or at least the VPE was) with muting from the satellite, but I found that HA can mute it just about as quickly from the state of the satellite and it’s a lot easier to do the automation there.

Built in speaker. I did not have any speakers (as in real, music speakers) to use, and any external speaker really needs a case to sound decent.

Here’s a demonstration I did: https://youtu.be/87Q7P37T3Ko

It’s been a while, but there are hooks in the esphome yaml for each stage, and I think I put it in on_tts_end and returned lambda into a HA media player. I don’t have the code any longer. That MAY have been an M5 Echo as I experimented with those as well early own without a speaker. Building a case for the reSpeaker was a much better solution.

The google mini’s are small, but really it’s more about counter space (or table or whatever), and a vertical case for the speaker and reSpeaker does not take up more usable space. My first iteration was quite a bit smaller than the one shown in that video with a smaller speaker (like 1.8" vs 2.5") and it’s surprising how much better just that small difference made.

By the way – the reSpeaker is designed for an associated speaker to be physically underneath it, to work with the mic’s noise cancellation when it is outputing audio. Not that it won’t work at all with other orientations, but that’s its design (or so I have read, I think in formatBCE’s thread).

Found the M5 code:

voice_assistant: 
  on_tts_end:
      - homeassistant.action:
          action: media_player.play_media
          data:
            entity_id: media_player.kitchen_mini  # <- Replace with your exact HA speaker entity
            media_content_type: music
            media_content_id: !lambda 'return x;'          # <- This passes the audio URL from HA to the speaker  

media_player:
  - id: !extend echo_media_player 
    volume_initial: 0 

I think I had something similar for the VPE and reSpeaker but not sure, those get progressively more complicated especially with all the light handling in them.

Your on_tts_end snippet is essentially what my Mic to MediaPlayer integration does, just on the HA side instead of in the device YAML. The satellite hands over the TTS URL, and the integration plays it on whichever media player is mapped to that satellite’s area, while the satellite itself stays silent. For me the advantage is that I can keep stock firmware on all three device types and don’t have to maintain that change in every YAML, especially the VPE and respeaker configs with all their light handling, as you said.

The downside is the one you hinted at with the speaker-under-the-respeaker design. With an external speaker, the XMOS chip never gets the playback as an echo reference. The satellite also re-arms its mic when its own (silent) playback ends, which can be a second or so before the Google speaker has finished talking. With follow-up listening on, the tail of the reply sometimes gets picked up as the next command. I handle that with echo filtering in my conversation agent rather than on the device, and it works, but it’s a workaround for something a speaker in the same case gets for free.

Anyway, I’m looking forward to Nabu Casa’s next development for the voice pipeline. I am hoping for a VPE with a 4-mic-array and a proper speaker with working noise cancelling. Let’s see what’s next…

I keep looking for a roadmap of where they are planning to go.

It’s concerning that while work is ongoing, the strategic view seems at beast not shared, more worrisome perhaps missing.

Another solution, that works very good and way superior to the VPE in regards to wake-word detection and beamforming / far-field processing is the rooted Echo Dot 3 with this solution:

Posted some thoughts here after the latest update fixed a problem with the audio / speech recording:

theres also these echo projects

working on doing these Tater style firmware as well

now we can have sats with screens, cameras and 7 mic arrays

I’ve read about the Amazon hacks and think that is the absolute best way to go, instead of doing workarounds, splitting up stt and tts. But I don’t have Amazon devices and Google devices are not rootable, as far as I know (sadly).
Also I think this hack doesn’t work on the newest generations, but maybe I am not up-to-date on this.
In any case, I might get myself an Echo Show 5 to try this, sounds like a cool HA addition!

any device connected to ha with mic

Or buy an all-in-one ESP32 board (mic, speaker, display); they work well, you can customize them, and they are cheaper.
cheap audio bord with 2 mics:

Thanks @Hruba for the hint, the waveshare ESP32 has a nice form factor and the price is really unbeatable. I just ordered one and am going to report back once I’ve tried it and compared it to the other modules. It is a 2-mic-array though, so I don’t expect it to beat the reSpeaker, but who knows.

it works well, if I leave the door open, the waveshare will pick up the wake word at a distance of about 8-10m. and one more thing, you can easily connect it with this integration