- Add openclaw-http-bridge.py: HTTP server translating POST requests to OpenClaw CLI calls - Add launchd plist for HTTP bridge (port 8081, auto-start) - Add install-to-docker-ha.sh: deploy custom component to Docker HA via SSH - Add package-for-ha.sh: create distributable tarball of custom component - Add test-services.sh: comprehensive voice pipeline service checker Fixes from code review: - Use OpenClawAgent (HTTP) in async_setup_entry instead of OpenClawCLIAgent (CLI agent fails inside Docker HA where openclaw binary doesn't exist) - Update all port references from 8080 to 8081 (HTTP bridge port) - Remove overly permissive CORS headers from HTTP bridge - Fix zombie process leak: kill child process on CLI timeout - Remove unused subprocess import in conversation.py - Add version field to Kokoro TTS Wyoming info - Update TODO.md with voice pipeline progress
9.6 KiB
Voice Pipeline Troubleshooting Guide
Common issues and solutions for the voice pipeline setup
Network Configuration
Important: The services are split across two machines:
| Service | Machine | IP Address |
|---|---|---|
| OpenClaw Gateway | Mac Mini | 10.0.0.101 |
| Wyoming STT | Mac Mini | 10.0.0.101 |
| Wyoming TTS | Mac Mini | 10.0.0.101 |
| Wyoming Satellite | Mac Mini | 10.0.0.101 |
| Ollama | Mac Mini | 10.0.0.101 |
| Home Assistant | Server (Docker) | 10.0.0.199 |
Issue: OpenClaw Conversation Cannot Connect
Symptoms
- Integration installed but shows connection error
- HA logs show timeout or connection refused
- Error: "Cannot connect to OpenClaw service"
Root Cause
The OpenClaw Conversation integration is configured with the wrong host IP. It needs to point to the Mac Mini (10.0.0.101), not the HA server (10.0.0.199).
Solution
-
Open Home Assistant UI at http://10.0.0.199:8123
-
Go to Settings → Devices & Services
-
Find "OpenClaw Conversation" integration
-
Click "Configure" (or delete and re-add)
-
Set the correct configuration:
- OpenClaw Host:
10.0.0.101(Mac Mini IP, NOT 10.0.0.199) - OpenClaw Port:
8080 - Agent Name:
main - Timeout:
30
- OpenClaw Host:
-
Save and verify connection
Verify Network Connectivity
From the HA server, test if it can reach OpenClaw:
# SSH to HA server
ssh 10.0.0.199
# Test OpenClaw connectivity
curl http://10.0.0.101:8080/status
# Or use nc
nc -z 10.0.0.101 8080 && echo "OpenClaw reachable" || echo "Cannot reach OpenClaw"
From the Mac Mini, verify OpenClaw is listening:
# Check OpenClaw is running
launchctl list | grep openclaw
# Check it's listening on all interfaces
lsof -i :8080
# Test locally
curl http://localhost:8080/status
Issue: Wyoming Services Cannot Connect
Symptoms
- Wyoming integrations show as unavailable
- HA cannot reach STT/TTS services
- Timeout errors in HA logs
Solution
Wyoming services are also on the Mac Mini (10.0.0.101):
-
Go to Settings → Devices & Services
-
For each Wyoming integration, verify the host is set to 10.0.0.101:
- Wyoming STT:
10.0.0.101:10300 - Wyoming TTS:
10.0.0.101:10301 - Wyoming Satellite:
10.0.0.101:10700
- Wyoming STT:
-
Test connectivity from HA server:
ssh 10.0.0.199
nc -z 10.0.0.101 10300 # STT
nc -z 10.0.0.101 10301 # TTS
nc -z 10.0.0.101 10700 # Satellite
Issue: Firewall Blocking Connections
Symptoms
- Services work locally on Mac Mini
- Cannot connect from HA server
- Connection timeout errors
Solution
Check Mac Mini firewall settings:
# Check firewall status
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate
# If enabled, add exceptions for the services
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /opt/homebrew/bin/ollama
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/local/bin/openclaw
# Or temporarily disable for testing (not recommended for production)
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off
Issue: OpenClaw CLI Not Found in HA Container
Symptoms
- Integration uses CLI fallback
- Error: "OpenClaw CLI not found"
- Component works but responses fail
Root Cause
The openclaw command is not available inside the HA Docker container. The integration should use the HTTP API, not CLI.
Solution
The OpenClawCLIAgent is a fallback. Ensure the integration is using the HTTP API:
- Check the integration configuration uses the correct host/port
- Verify OpenClaw Gateway is accessible via HTTP
- The component will automatically use HTTP if available
Issue: Voice Pipeline Not Responding
Symptoms
- Wake word detected but no response
- Audio captured but not transcribed
- Transcription works but no TTS output
Debugging Steps
- Check all services are running:
# On Mac Mini
./homeai-voice/scripts/test-services.sh
- Test each component individually:
# Test wake word detection
# Say "Hey Jarvis" and check satellite logs
tail -f /tmp/homeai-wyoming-satellite.log
# Test STT
# Check if audio is being transcribed
tail -f /tmp/homeai-wyoming-stt.log
# Test OpenClaw
openclaw agent --message "Hello" --agent main
# Test TTS
tail -f /tmp/homeai-wyoming-tts.log
-
Check HA Voice Pipeline configuration:
- Settings → Voice Assistants
- Verify pipeline uses correct STT, Conversation, and TTS
- Ensure OpenClaw Conversation is selected
-
Test from HA Assist:
- Type a query in HA Assist panel
- Check if you get a response
- This bypasses wake word and audio capture
Monitoring Wake Word Detection
To see when the wake word ("Hey Jarvis") is being detected in real-time:
Option 1: Watch Satellite Logs (Recommended)
The Wyoming Satellite handles wake word detection and audio streaming:
# Terminal 1: Watch satellite logs
tail -f /tmp/homeai-wyoming-satellite.log
What to look for:
Wake word detected- Wake word was heardStreaming audio- Audio being sent to STTConnected to server- Connection status
Option 2: Watch Wake Word Service Logs
# Terminal 1: Watch wake word detection logs
tail -f /tmp/homeai-wakeword.log
Option 3: Watch All Voice Pipeline Logs
# Terminal 1: Watch all voice-related logs
tail -f /tmp/homeai-*.log | grep -E "(wake|satellite|stt|tts|openclaw)"
Test Wake Word Detection
While watching the logs, try this:
- Say clearly: "Hey Jarvis" (or your configured wake word)
- Wait for the acknowledgment beep
- Speak your command: "What time is it?"
- Check logs for activity
Expected Log Output
When wake word is detected, you should see:
[wyoming_satellite] Wake word detected
[wyoming_satellite] Streaming audio to stt
[wyoming_satellite] Connected to 10.0.0.101:10300
Issue: Audio Playback Not Working
Symptoms
- Pipeline works but no audio output
- TTS generates audio but satellite doesn't play it
- Silent responses
Solution
- Check audio output device:
# On Mac Mini
afplay /System/Library/Sounds/Glass.aiff
- Check satellite configuration:
# View satellite config
cat ~/Library/LaunchAgents/com.homeai.wyoming-satellite.plist
# Check logs for audio errors
tail -f /tmp/homeai-wyoming-satellite.log
- Verify SoX is installed:
which play
brew install sox
Issue: High Latency (>5 seconds)
Symptoms
- Long delay between wake word and response
- Slow transcription or TTS generation
Solutions
- Check network latency:
# From HA server to Mac Mini
ping 10.0.0.101
- Check Ollama model size:
# Smaller models are faster
ollama list
# Switch to faster model in OpenClaw config
# qwen2.5:7b is faster than llama3.3:70b
- Check system resources:
# On Mac Mini
top -l 1 | grep -E "CPU|PhysMem"
Correct Configuration Summary
OpenClaw Conversation Integration
- Host:
10.0.0.101(Mac Mini) - Port:
8080 - Agent:
main - Timeout:
30
Wyoming STT Integration
- Host:
10.0.0.101(Mac Mini) - Port:
10300
Wyoming TTS Integration
- Host:
10.0.0.101(Mac Mini) - Port:
10301
Wyoming Satellite Integration
- Host:
10.0.0.101(Mac Mini) - Port:
10700
Testing Checklist
- All services running on Mac Mini (10.0.0.101)
- HA can ping Mac Mini:
ping 10.0.0.101 - HA can reach OpenClaw:
curl http://10.0.0.101:8080/status - HA can reach Wyoming STT:
nc -z 10.0.0.101 10300 - HA can reach Wyoming TTS:
nc -z 10.0.0.101 10301 - HA can reach Wyoming Satellite:
nc -z 10.0.0.101 10700 - OpenClaw Conversation integration configured with 10.0.0.101
- Wyoming integrations configured with 10.0.0.101
- Voice pipeline created and set as default
- Test query in HA Assist returns response
Bugs Fixed During Setup
The following bugs were discovered and fixed during initial setup (2026-03-08):
1. OpenClaw Network Binding
Problem: OpenClaw gateway was only listening on localhost (127.0.0.1), not accessible from HA server.
Fix: Added "bind": "lan" to ~/.openclaw/openclaw.json:
{
"gateway": {
"port": 8080,
"mode": "local",
"bind": "lan",
"auth": { "token": "..." }
}
}
2. Custom Component API Error
Problem: async_set_agent() was being called with DOMAIN (string) instead of entry (ConfigEntry object).
Fix: Changed parameter in homeai-agent/custom_components/openclaw_conversation/__init__.py:
# Line 83
conversation.async_set_agent(hass, entry, agent) # Was: DOMAIN
# Line 94
conversation.async_unset_agent(hass, entry) # Was: DOMAIN
3. TTS Server Missing Version
Problem: TtsProgram initialization was missing required version parameter.
Fix: Added version="1.0.0" in homeai-voice/tts/wyoming_kokoro_server.py line 58.
4. Voice Commands Not Working (CLI Not in Docker)
Problem: HA Docker container couldn't access openclaw CLI.
Fix: Created OpenClaw HTTP Bridge (homeai-agent/openclaw-http-bridge.py) on port 8081 that translates HTTP POST requests to OpenClaw CLI calls. The custom component now uses port 8081 (HTTP bridge) instead of 8080 (gateway).
Getting Help
If issues persist:
-
Check service logs:
- Mac Mini:
/tmp/homeai-*.log - HA: Settings → System → Logs
- Mac Mini:
-
Verify network connectivity between machines
-
Test each component individually before testing the full pipeline
-
Review configuration in
VOICE_PIPELINE_SETUP.md