Custom wake word not triggering - Wyoming OpenWakeWord Docker + Wyoming Satellite on Raspberry Pi 4 (no HAOS)

Hardware:

  • Server “Vega”: Debian 12, Docker, Home Assistant Container (not HAOS)
  • Raspberry Pi 4B “Zeta”: Debian Trixie (13), Python 3.13, ReSpeaker 2-Mic HAT (sound card plughw:3,0)
  • Microphone & speaker: ReSpeaker 2-Mic HAT, confirmed working (arecord/aplay tests OK)

Architecture:

  • Vega (server): containers rhasspy/wyoming-whisper (port 10300), rhasspy/wyoming-piper (port 10200), Home Assistant
  • Zeta (Pi): container rhasspy/wyoming-openwakeword (port 10400), systemd service wyoming-satellite (port 10700)

Problem:
The wake word “vega” never triggers. Even with --debug --debug-probability, no scores appear in the openwakeword logs when speaking into the microphone — not with a real voice, not with a synthetic voice played from a phone, not up close, not from a distance.

What works:

  • ReSpeaker microphone records correctly (confirmed with arecord)
  • The openwakeword container starts and loads vega.tflite correctly (Loaded models: ['vega'] visible in logs)
  • The satellite starts and connects to openwakeword (Waiting for wake word visible in logs)
  • HA receives the satellite correctly (device “Vega” visible in Wyoming Protocol integration)
  • docker logs shows Receiving audio from client → audio is reaching the container

What doesn’t work:

  • No probability scores appear with --debug-probability even when shouting “vega” repeatedly
  • No trigger with the default “okay nabu” model either (tested to rule out a custom model issue)

Wake word model vega.tflite:

  • Trained twice using the official HA Colab notebook (Google Colab)
  • 15,000 training steps
  • Tested with English and French pronunciation, real voice and synthetic voice from phone

wyoming-satellite.service config:

ExecStart=/home/zeta/wyoming-satellite/.venv/bin/python3 -m wyoming_satellite \
  --name "Vega" \
  --uri tcp://0.0.0.0:10700 \
  --mic-command "arecord -D plughw:3,0 -r 16000 -c 1 -f S16_LE -t raw" \
  --snd-command "aplay -D plughw:3,0 -r 22050 -c 1 -f S16_LE -t raw" \
  --wake-uri tcp://127.0.0.1:10400 \
  --wake-word-name "vega"

Docker openwakeword command:

docker run -it -p 10400:10400 \
  -v /home/zeta/openwakeword-custom:/custom \
  rhasspy/wyoming-openwakeword \
  --custom-model-dir /custom \
  --debug --debug-probability --threshold 0.1

Main question: Why do no probability scores appear with --debug-probability even though Receiving audio from client is visible in the logs? The audio seems to be arriving at the container but nothing is being processed. Could this be an audio format issue, a sample rate mismatch, or something else entirely? Any help would be greatly appreciated.