Rhasspy 2.5 to HA Voice Assist

As a current Rhasspy 2.5 user, I have been watching Mike’s HA Voice Assistant with interest, but waiting until enough of the components are present to provide equivalent functionality. I haven’t paid attention to Rhasspy v3, Wyoming, Piper, Whisper etc.; thinking to let things settle down.

VERY impressed with HA Year of the Voice chapter 4, and thinking maybe it’s time to make the transition. I probably need to take time to let it all sink in … but my first reaction is that I don’t see an obvious connection between Rhasspy 2.5 and HA Voice Assist.

Scrapping Rhasspy 2.5 and swapping to HA Voice assist looks easiest. But Rhasspy 2.5 already had the option to do wakeword detection on the server … and turning my current satellites (RasPi 3A, 3B and Zero) into homeassistant-satellite with external wakeword seems like a backwards step.

I am hoping that some of our members who have already been travelling along this path can give guidance and suggest an upgrade path which integrates the best of Rhasspy (or at least local wakeword) with HA Voice Assist.

1 Like

Just seems another rebrand Doug with another KWS but the bits missing from hardware and initial audio processing are still missing so likely will create similar results.

Which parts of the voice stack were you hoping to run on the satellites vs. in HA itself?

Sorry, I didn’t follow all the intermediate steps; hence some stupid questions while all the new information “falls into place” in my brain.

I currently run Porcupine on my RasPi 3A, 3B and Zero satellites and everything else via MQTT, and would like to keep WakeWord detection on the those RasPi satellites which are up to the task.

  • I only use Rhasspy for Home Assistant, so I guess better to go direct to HA Voice Assist rather than via Rhasspy v3
  • I assume that I simply install your homeassistant-satellite on my test RasPi to make it a Voice Assist satellite - but that will expect WakeWord detection on the HA machine.
  • I assume that OpenWakeWord is an independent project, which can also be installed on a RasPi - but being independent they wont automagically work together.

Is there a guide I’ve missed showing how to integrate them, or is there currently a lot of fiddling to get them playing nicely on a satellite ? I expect I can work it out in time, but grateful for any pointers to avoid dead end rabbit holes. Heck I’m not even sure if I’m looking at the best rabbit hole :wink:

My RasPi Zero is noticeably slower at Porcupine, so I assume OpenWakeWord will be too much for it; and that’s OK. It just seems a shame to waste the RasPi 3’s processing power, and I want to minimize additional wi-fi traffic.

Ongoing research I came across How to use openwakeword HASS addon on a sattelite ARM board ? · Issue #54 · dscripka/openWakeWord · GitHub, which I think answers most of my concern.

1 Like

Is there a plan on how some of the skills that rhasspy had would work? I have a couple skills I made for rhasspy and just curious how that would work with home assistant satellite.

I tried to install homeassistant-satellite on an raspi zero with debian 11. But get this error, even after installing aiohttp:

Traceback (most recent call last):
  File "/usr/lib/python3.9/runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.9/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/home/pi/homeassistant-satellite/homeassistant_satellite/__main__.py", line 28, in <module>
    from .remote import stream
  File "/home/pi/homeassistant-satellite/homeassistant_satellite/remote.py", line 7, in <module>
    import aiohttp
ModuleNotFoundError: No module named 'aiohttp'
Traceback (most recent call last):
  File "/home/pi/homeassistant-satellite/script/run", line 13, in <module>
    subprocess.check_call(
  File "/usr/lib/python3.9/subprocess.py", line 373, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['/home/pi/homeassistant-satellite/.venv/bin/python3', '-m', 'homeassistant_satellite', '--host', '192.168.1.222', '--token', 'xxx']' returned non-zero

I would like to use hermes led control with homeassistant-satellite.

As always, I don’t have a guide ready yet :smile:

My idea was to do the integration through Wyoming: so homeassistant-satellite would gain an option to talk to a Wyoming wake word service over TCP. That way, you could install one the wake word systems via Python or Docker (or even run it on a different machine for whatever reason :stuck_out_tongue_winking_eye:).

Yes, Wyoming supports intent recognition so the plan is to create bridges to Rhasspy v2 and Home Assistant. For Home Assistant, a conversation agent for Wyoming would open the door to local add-ons that run LLMs, etc. I have a proof of concept with this that’s way too slow for actual use :laughing:

Can you run .venv/bin/pip3 install -vvv aiohttp and put the output here please?

there is no pip3. Do i need to install it inside homeassistant-satellite?

It should be in the Python virtual environment, or as part of the python3-pip package

i made links for pip / pip3

$ .venv/bin/pip3 install -vvv aiohttp
Using pip 23.3.1 from /home/pi/.local/lib/python3.9/site-packages/pip (python 3.9)
Defaulting to user installation because normal site-packages is not writeable
Created temporary directory: /tmp/pip-build-tracker-85zsfm31
Initialized build tracking at /tmp/pip-build-tracker-85zsfm31
Created build tracker: /tmp/pip-build-tracker-85zsfm31
Entered build tracker: /tmp/pip-build-tracker-85zsfm31
Created temporary directory: /tmp/pip-install-maokkjds
Created temporary directory: /tmp/pip-ephem-wheel-cache-5c6o_den
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: aiohttp in /home/pi/.local/lib/python3.9/site-packages (3.8.6)
Requirement already satisfied: attrs>=17.3.0 in /usr/lib/python3/dist-packages (from aiohttp) (20.3.0)
Requirement already satisfied: charset-normalizer<4.0,>=2.0 in /home/pi/.local/lib/python3.9/site-packages (from aiohttp) (3.3.0)
Requirement already satisfied: multidict<7.0,>=4.5 in /home/pi/.local/lib/python3.9/site-packages (from aiohttp) (6.0.4)
Requirement already satisfied: async-timeout<5.0,>=4.0.0a3 in /home/pi/.local/lib/python3.9/site-packages (from aiohttp) (4.0.3)
Requirement already satisfied: yarl<2.0,>=1.0 in /home/pi/.local/lib/python3.9/site-packages (from aiohttp) (1.9.2)
Requirement already satisfied: frozenlist>=1.1.1 in /home/pi/.local/lib/python3.9/site-packages (from aiohttp) (1.4.0)
Requirement already satisfied: aiosignal>=1.1.2 in /home/pi/.local/lib/python3.9/site-packages (from aiohttp) (1.3.1)
Requirement already satisfied: idna>=2.0 in /usr/lib/python3/dist-packages (from yarl<2.0,>=1.0->aiohttp) (2.10)
Created temporary directory: /tmp/pip-unpack-hj0cg45x
Remote version of pip: 23.3
Local version of pip:  20.3.4
Was pip installed by pip? False
Removed build tracker: '/tmp/pip-build-tracker-85zsfm31'

OK, I have swapped the RasPi 3B with USB mic in my study over to HA Voice Assist, with local wakeword thanks to the work done by Mike, Chatziko and others

As of a couple of days ago it’s really easy now, just follow instructions on:

Given the number of posts on HA forum by the hard of thinking, asking for detailed instructions, I posted my experience at Raspberry Pi as a HA Voice Assist satellite - Community Guides - Home Assistant Community. Yes there are still some issues - like that I am still avoiding Docker.

I still have more work to do to fully replace rhasspy 2.5:

  • launch automations (in node-RED) from Voice Assist
  • visual indicators on the RasPi Satellite (I was using Hermes LED control)

@donburch Don one time taste that bad medicine of Docker as yeah it can be confusing at 1st and the manner of docker commands isn’t the most logical.
Isolated containers are just so great when putting many libs and apps onto a system so you don’t end up in dependency hell.
Ubuntu nearly everytime it updates screws over my Cuda setup and have given up on them ever getting it right, but just use the nvidia containers with ‘–gpus all’
Docker to have many instances all isolated but connected via the network layer is a learning curve that once you get it things become much easier.
The only bad thing about docker is I find I am using it a lot then not for ages and it will turn up again and I have once more forgot the odd docker command structure, but apart from that you can be as stupid as ‘sudo rf /’ in a container and for the system it doesn’t matter.

Yes Stuart, you have summarised my reasons for avoiding Docker so far…

  • Doesn’t seem much point in isolating one app on a RasPi which is only running one app
  • “the manner of docker commands isn’t the most logical”
  • “once more forgot the odd docker command structure”

I have retired and can no longer justify the effort to learn all the newest fancy tools - let alone using them frequently enough to reinforce the learning.

But why should I justify myself to you ? How about you do something positive - you keep talking about what needs to be done - rather than finding fault with everything and everyone ?

1 Like

Was that just an oxymoron from you?

I was being positive Don, I am saying Docker is quite good and it could make things easier.
HA can quickly become complex and Docker makes a super job of keeping it easy.

PS have a better one. Also stop with the Ad hominem as no-one asked you to justify anything, its very clear and was just a nudge that Docker aint that bad and also very handy.

It looks like things are changing course again and like usual I give my opinions and that is all.

Don, I must admit that your are right. Stuart, you just keep writing long posts just to say so many times the same thing in very long preaches that, for my case, I don’t really understand completly. If you keep writing, could you please be more consise. I think it will help all non english people to keep the fundamentals reasons for your point of view.

1 Like

I try to be concise as I did here
https://community.rhasspy.org/t/re-hifiberry-dac-adc-or-raspiaudio-mic-v2/4413/20?u=rolyan_trauts
The esp32-s3 has limitations and the layers the model uses are not supported in tflite4micro or esp-dl meaning it will not work on the s3-box full stop and its too big as on a PiZero2 its lite but over 60% of a core and the Box the way its works needs x2.
So unless the £50 is just going to be an always on streamer sending x2 audio streams to a central Pi its a no go.
Nothing negative or positive its just will not run on that platform unless someone wants to start writing C/C++ TFLite4Micro or ESP-DL layers to support it, if it can fit on a core of a 240MHz microcontroller.
If I am repeating myself yes I did say that in March and for some reason seem to have to repeat myself.