Releases: imonlinux/linux-voice-assistant
Releases · imonlinux/linux-voice-assistant
v1.1.0
Version 1.1.0 — ESPHome Entity Migration (**Edit - fix update_lva script run details)
This release implements a major architectural realignment migrating voice and audio controls from MQTT to native ESPHome entities. After this upgrade, MQTT is only required for LED hardware controls.
Breaking Changes
Home Assistant device cleanup required:
- Old MQTT entities will appear as "unavailable" after upgrade
- Manual cleanup of LVA and MQTT devices in Home Assistant is required (see Migration Instructions below)
- Service restart is required after update script completes
Migration Instructions
- Stop LVA service:
systemctl --user stop linux-voice-assistant.service
- Delete old devices in Home Assistant:
- Go to Settings → Devices & Services
- Go to MQTT and delete LVA device (this removes all old MQTT entities)
- Go to ESPHome and delete LVA device if it exists
- Wait 30 seconds for HA to fully remove devices
- Run update script with your setup flags:
sh ~/linux-voice-assistant/script/update_lva.sh
- Pass --sendspin if you use Sendspin multiroom audio
- Pass --tray if you use the system tray client
- Your config.json and preferences.json are preserved automatically
- Register LVA in Home Assistant:
- Go to Settings → Devices & Services → Add Integration → ESPHome
- Add LVA that was auto discovered
- Your satellite should reappear with new native entities
- Voice/audio controls now appear under Media Player and Switch categories
- If you included MQTT in your config.json it will be automatically added and visible in the LVA Device but now only controls LED entities
What's New
Native ESPHome entities replace MQTT:
| Entity | ESPHome Type | Replaces MQTT |
|---|---|---|
| Mute Microphone | switch | switch.lva_mute |
| Sound Thinking Loop | switch | switch.lva_thinking_sound_loop |
| Event Sounds | switch | switch.lva_event_sounds_enabled |
| Wake Word Sensitivity | select | select.lva_wake_word_sensitivity |
| Sound Wakeup | select | select.lva_sound_wakeup |
| Sound Thinking | select | select.lva_sound_thinking |
| Sound Timer | select | select.lva_sound_timer |
| Alarm Duration | number | number.lva_alarm_duration |
Architectural improvements:
- Entity lifecycle now matches upstream pattern with reconnection-safe reuse
- Wake word sensitivity supports three-preset system (Low/Medium/High/Maximum)
- Per-model OWW thresholds from .json files take precedence over global preset
- ESPHome command routing upstreamed from PRs OHF-Voice#271 and OHF-Voice#273
MQTT scope reduced:
- LED hardware controls remain on MQTT (LED count, effects, colors)
- System tray client mute state mirroring continues via MQTT
- Voice and audio behavior no longer requires MQTT broker
Fixed
- Wakeup sound volume (#76) — Plays at full volume regardless of OS sink initialization
- Unknown preference crash (#77) — Gracefully ignores unrecognized keys in preferences.json
Changed
- MQTT controller — Removed all voice/audio entities; manages LED hardware only
- Satellite protocol — Entity lifecycle matches upstream pattern
- Code quality — Added ruff linting with pre-commit hooks
Codex-Reviewed Bug Fixes
Fix: Remove duplicate wakeup sound playback in delayed-listen mode
- In delayed-listen mode (
listen_during_wake_sound=false), users hear the wakeup sound twice — first when starting the conversation, then again when the sound finishes. This causes audio to leak into STT processing. - Fix: Reapply sensitivity preset after external wake word load
- External wake words announced by Home Assistant are loaded via async download, but the current sensitivity preset was not being applied to these newly loaded models. Now reapply the preset after each external word is loaded.