Skip to content

EchoMuse v2.14.0

Latest

Choose a tag to compare

@github-actions github-actions released this 02 Sep 03:08
· 5 commits to main since this release
48d79f2

First device firmware since v2.13.0 (2026-08-26). Four changes: one you will
see, one you will only notice when your network stumbles, and two that change
how the device handles audio and Bluetooth underneath.

The ring says when there is nothing behind it. Speak to an Echo while Home
Assistant is not connected to it and the ring used to light for a fraction of a
second and go out — the device had heard you perfectly and had nowhere to send
it, which from across the room looks like a device that failed to notice you. It
now holds the listening ring briefly, to say it heard you, then flashes orange
twice. Orange is what this device already shows when it cannot find its
controller, so it reads as the same fault one hop further up. This needs
controller 2.22.0
, which drives the cue; on an older controller the firmware
behaves as v2.13.0 did.

The microphone comes back after a network blip. If the audio connection
dropped while the main connection stayed up, the Echo stopped listening and did
not start again until the controller eventually noticed — measured at 34 and 41
seconds on our own device. It now restarts listening itself as soon as it
reconnects, which takes about five. This works on any controller version.

Echo cancellation now takes its reference from the hardware loopback. The
microphone capture has been carrying a copy of the device's own playback all
along, in the same frame as the microphones themselves, and cancellation now
uses that instead of a software tap taken elsewhere. The alignment is structural
rather than estimated, so the AEC delay setting stops mattering on this path.

Be clear about what to expect: we measured this at parity, not better. It
did not audibly improve barge-in or transcription in our own testing. It is
shipped because the alignment is correct by construction rather than by tuning,
not because it fixes something you can hear. It is chosen automatically; the
Echo reference control in controller 2.22.0 exists only to pin it for
comparison, and pinning Hardware on a device whose chip does not provide the
loopback means no echo cancellation at all. Leave it on Auto.

The Bluetooth proxy forwards fewer advertisements. The device now filters
repeat broadcasts that carry nothing Home Assistant reads, keeping at least one
per device per second, which is what Bermuda's area decisions need. Measured in
an ordinary room this removes about 9% of the traffic; a dense room full of fast
beacons is where it does real work.

It does not fix the underlying problem, and you should know that before you
update expecting it to.
An Echo running the Bluetooth proxy still sees brief
reconnects, because the advertisements share a connection with the messages that
check the Echo is still there. That is tracked in #404 and the fix is a larger
change. This build reduces the traffic; it does not decouple it.

There is no new configuration on the device and nothing to change on your
Echoes. Updating the controller and the firmware in either order is fine.

Update one device first and let it come back before doing the rest. The A/B
slot system rolls back on its own if the new binary fails to start three times,
and the update leaves the slot it is replacing intact so there is something to
roll back to — but watching one device is still cheaper than watching all of
them.

What's Changed

  • [oww_forge] fix: piper_voices.py is missing from docker image by @DennisGaida in #348
  • Merge #167 (voice-assistant timers), conflict absorbed our side by @wilbowes in #352
  • fix: approve tab is hard to notice by @Mr-Neutr0n in #345
  • Land #311, #312, #319, #320 — conflicts absorbed our side by @wilbowes in #353
  • Fix #261: reference-counted duck — overlapping owners no longer release early by @chr-braun in #312
  • Fix #314: speaker ownership reference-counted, matching the duck by @chr-braun in #319
  • Fix #315: control-plane drop gets a reconnect grace, like the data plane by @chr-braun in #320
  • Add device/controller interface spec by @dweng0 in #347
  • Route every 401 through one handler, or a dead session polls forever by @wilbowes in #361
  • Coalesce idle RTT excursions, or half the log ring is one metric by @wilbowes in #362
  • Docs: a UAT checklist and an FAQ, so a report arrives usable by @wilbowes in #363
  • Fix #349: say whether Home Assistant is on the other end of the voice port by @wilbowes in #350
  • Drop a deleted device's satellite, or the next registration inherits its port by @wilbowes in #355
  • Stop sending ANNOUNCING — HA cannot map it and throws on every announcement by @wilbowes in #356
  • Contributing: say which issues are actually open for work by @wilbowes in #328
  • Docs: correct three statements tonight's changes made false by @wilbowes in #336
  • docs: a reference baseline for what a healthy turn costs by @wilbowes in #339
  • Early Access 2.22.0-ea.2 by @wilbowes in #364
  • Clear speaking in the finally, or a dismissed timer leaves the device deaf by @wilbowes in #367
  • Early Access 2.22.0-ea.3 by @wilbowes in #369
  • Both endpoint routes enter thinking, not just the one HA drives by @wilbowes in #371
  • Early Access 2.22.0-ea.4 by @wilbowes in #372
  • Audio states: record the announcement-over-alarm ownership gap by @wilbowes in #374
  • Upgrade the base image's own packages, or we ship Debian's fixes late by @wilbowes in #368
  • Record what today cost, where the next person will look by @wilbowes in #377
  • Say what breaks, rather than that something is load-bearing by @wilbowes in #379
  • Say when there is nothing to talk to, and stop electing a device that cannot answer by @wilbowes in #381
  • Early Access 2.22.0-ea.5 by @wilbowes in #382
  • Stand a device with no HA down at the wake word, and always say so by @wilbowes in #383
  • Ch7 and Ch8 are the echo reference, not unconnected mics by @wilbowes in #384
  • EQ presets from the measurement, not from taste by @wilbowes in #386
  • Restore the mic stream after a data-plane reconnect by @wilbowes in #389
  • Store the BLE transport resets the device has been counting all along by @wilbowes in #388
  • Say why a device WebSocket closed by @wilbowes in #390
  • Pace the voice stream, so a long response stops cutting itself off by @wilbowes in #392
  • Early Access 2.22.0-ea.7, and write down what today cost to find by @wilbowes in #393
  • Make the AEC reference source settable, and cut EA 2.22.0-ea.8 by @wilbowes in #394
  • Take the AEC far-end reference from the hardware loopback by @wilbowes in #395
  • Answer a question Home Assistant asks, instead of never being asked by @wilbowes in #397
  • Early Access 2.22.0-ea.9 by @wilbowes in #399
  • Kill ffmpeg before cancelling its feeder, so teardown terminates by @wilbowes in #402
  • Forward the BLE adverts Home Assistant reads, not every broadcast by @wilbowes in #405
  • Early Access 2.22.0-ea.10 by @wilbowes in #403
  • Take the Echo ref row back off the Status tab by @wilbowes in #406
  • Stop treating a rotating BLE address as an arrival by @wilbowes in #407
  • Write down what the BLE proxy costs the device running it by @wilbowes in #408
  • Controller 2.22.0 by @wilbowes in #411

New Contributors

Full Changelog: v2.13.0...v2.14.0