Skip to content

Releases: imonlinux/linux-voice-assistant

v1.1.0

17 Apr 02:09
9fc1657

Choose a tag to compare

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

  1. Stop LVA service:
systemctl --user stop linux-voice-assistant.service
  1. 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
  1. 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
  1. 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.