RbPi 0 W - Respeaker Hat - Audio Input setting keeps losing setup and doesn't work

I’ve got 3 of RbPi 0 Ws with Respeaker Hats. I’ve installed the seeed drives, etc. Audio output primarily stays stable, but I can’t get the mics to work.

The seeed selection will disappear from the drop down selections and everything reverts to Default Device (which doesn’t work). I can sometimes refresh and get the respeaker listed, but it doesn’t work and goes back to the default device again eventually, with respeaker disappearing from the selections again. Most of the time I try refresh, I get a timeout error.

Traceback (most recent call last):
  File "/usr/lib/rhasspy/.venv/lib/python3.7/site-packages/quart/app.py", line 1821, in full_dispatch_request
    result = await self.dispatch_request(request_context)
  File "/usr/lib/rhasspy/.venv/lib/python3.7/site-packages/quart/app.py", line 1869, in dispatch_request
    return await handler(**request_.view_args)
  File "/usr/lib/rhasspy/rhasspy-server-hermes/rhasspyserver_hermes/__main__.py", line 796, in api_microphones
    microphones = await core.get_microphones()
  File "/usr/lib/rhasspy/rhasspy-server-hermes/rhasspyserver_hermes/__init__.py", line 849, in get_microphones
    handle_finished(), messages, message_types
  File "/usr/lib/rhasspy/rhasspy-server-hermes/rhasspyserver_hermes/__init__.py", line 995, in publish_wait
    result_awaitable, timeout=timeout_seconds
  File "/usr/local/lib/python3.7/asyncio/tasks.py", line 449, in wait_for
    raise futures.TimeoutError()
concurrent.futures._base.TimeoutError```

Thanks in advance

I had the same issue on pi 3. The fix for me was to use the legacy Buster install of pi OS.

Hope this helps you

Make sure that you can record and play with the tests that Seeed list as part of the installation.
The resoeaker seems to require a Raspian OS because it need a file with hardware bindings that are not present in other installation.

And finally it is important to know that Rhasspy does not update the drop down lists correctly, so it will always show default device when you first load the page.
There should be a text that tells you what the actual selected device is though.