Skip to content

Releases: wilbowes/EchoMuse

EchoMuse v2.11.0

Choose a tag to compare

@github-actions github-actions released this 09 Aug 09:56
9afb204

Headphone jack fixes, and a device that can say why it has no light sensor

The headline: plugging in headphones no longer breaks the Dot

If you booted an Echo with a cable already in the 3.5mm jack, it came up
with no wake word, no working buttons and never appeared in the
dashboard. If you unplugged headphones, the speaker stayed silent until
the next reboot. Both are fixed.

Two independent faults were behind that, and neither was in the button
code:

Android was holding the speaker. With a headset present, Android's
media service claims the audio device, and EchoMuse's attempt to open it
waited behind that forever. Everything else — the buttons, the wake
word, the connection to the controller — is started after the speaker,
so one stalled open took the whole device with it. The buttons were
never broken; nothing was listening to them. That is also why unplugging
and replugging appeared to fix it.

Nothing restored the speaker after unplugging. Inserting a plug mutes
the internal amplifier, which is correct — you do not want the Dot
playing to the room while you are wearing headphones. Nothing turned it
back on, and startup was the only thing that ever did, which is exactly
why only a reboot brought it back.

Audio routing itself never needed fixing: the jack switches the output in
hardware.

What you should expect

Plug in and audio moves to the headphones. Unplug and it returns to the
speaker, within about a second. Boot with a cable in and the device
starts normally.

A note on unplugging

On the previous firmware, unplugging was once seen to stall the microphone
for about thirty seconds, with the device showing as disconnected before
reconnecting on its own. It has not reproduced on this release across
repeated plug cycles, so you are unlikely to meet it — but it is only one
device's worth of testing, so it is being tracked rather than declared
fixed. If you do see it, it recovers by itself without a restart and
nothing is lost. Details and how to help pin it down: #117.

Behaviour change worth knowing about

EchoMuse now stops Android's media service at startup, on every boot, not
only when a jack is present — the point is to stop it claiming the
speaker before we ask for it. EchoMuse drives the audio hardware directly
and does not use that service. Nothing else on the device depends on it.

Ambient light: the device now says why it found no sensor

Some Dots report no light sensor. Until now the reason was written only
to a log file on the device, which support bundles do not collect and a
reboot erases — so telling "this hardware has no sensor fitted" apart
from "the driver failed to start" needed a shell session on your own
device.

The device now reports that reason when it connects, and it appears in
support bundles. If your light sensor is missing, a bundle from Settings
→ Support will now say which of those it is. This does not make a missing
sensor appear; it makes the question answerable.

Requires the matching controller release (controller-v2.17.0) to be
displayed. On an older controller the device simply reports it and
nothing reads it — nothing breaks.

Upgrading

Nothing is required of you. No configuration changes, no re-provisioning,
and settings are preserved. As always the previous firmware stays in the
other slot and the device rolls back automatically if this one fails to
start.

What's Changed

  • docs: rewrite rooting.md plainly, and fix an attribution that read wrong by @wilbowes in #59
  • controller: ride out a data-plane blip instead of truncating the audio by @wilbowes in #60
  • docs: bring CLAUDE.md, the journal and README up to date by @wilbowes in #61
  • fix: stop telling HA a barge-in pause is the user's pause (#62) by @wilbowes in #64
  • support: one-file diagnostics bundle, built privacy-first by @wilbowes in #63
  • support: redact account names, and report the resources on both sides by @wilbowes in #69
  • support: put the controller's own log in the bundle, and thin the noise by @wilbowes in #70
  • Duck and mix music under voice instead of pausing (#67) by @wilbowes in #71
  • docs: catch the docs up to ducking, streaming TTS and shadow mode by @wilbowes in #75
  • ota: make md5 the definition of a successful firmware transfer by @wilbowes in #77
  • docs: record the OTA transfer verification, and what actually fixed the Dot by @wilbowes in #78
  • fix(docker): select esbuild binary by architecture (unblocks arm64 builds) by @QuickMythril in #81
  • ci: publish the controller image for arm64 as well as amd64 by @wilbowes in #83
  • dashboard: show the WiFi band on each device's Status tab by @wilbowes in #86
  • wizard: report the FireOS build, and say which one we test against by @wilbowes in #84
  • wizard: make WiFi failures explain themselves by @wilbowes in #85
  • wizard: check where the boot image is going before writing it by @wilbowes in #92
  • controller: stop writing every device log line twice by @wilbowes in #93
  • controller: a deleted device can come back by @wilbowes in #98
  • wizard: capture device state when a provisioning step fails by @wilbowes in #94
  • wizard: tell an absent package apart from a broken package manager by @wilbowes in #95
  • wizard: a step that loses the cable no longer hangs forever by @wilbowes in #99
  • wizard: say when a reconnect came back in the wrong mode by @wilbowes in #101
  • wizard: stop the disconnect handler crying wolf on our own reboots by @wilbowes in #102
  • esphome: rebuild HA's entity list when capabilities change by @wilbowes in #104
  • Fire the action-button hold while muted by @wilbowes in #108
  • Add buttonSingleTapEvent and buttonMultiTapMs: tap as an HA event by @bboe in #107
  • Fix the audio jack stranding the device (#80) by @wilbowes in #113
  • Report why there is no ambient light sensor (#90) by @wilbowes in #114
  • docs: the audio jack, the ALS reason, and tap-as-event by @wilbowes in #116

New Contributors

Full Changelog: v2.9.13...v2.11.0

EchoMuse v2.10.0

Choose a tag to compare

@github-actions github-actions released this 03 Aug 06:42
60be15b

v2.10.0 — music ducks under a voice response instead of pausing

Ask a question while music is playing and the music now stays on, dropped in
level, with the response mixed over the top. It comes back up when the
response ends. Previously the music paused and resumed.

This is a better answer than pausing, and it removes a class of problems
rather than improving them. Resuming needed a seek, and a Music Assistant
flow stream cannot seek — so a 28-second question cost 28 seconds of the
song, and a long one could land you in the next track entirely. Behaviour
differed depending on where the music came from, with no way to tell which
you had. None of that exists now: the music is never stopped, so there is
nothing to seek back to.

It has to happen on the device. The controller runs about four seconds ahead
of what you hear, so when the wake word fires those four seconds are already
on the Echo — audio that has left the controller cannot be ducked by it.
Music now has its own audio channel on the device and the two are mixed as
they are played, which also means the duck is instant and the music keeps
its full protection against Wi-Fi stalls.

How far the music drops is yours to set: Config → Playback → Duck depth,
default -18dB. It is a taste setting and worth trying in the room it plays
in. Your response is never attenuated, only the music underneath it.

Also in this release:

  • The LED ring's level meter follows the response only. It briefly followed
    the music too, which read as the Echo reacting to something you had not
    said.
  • The ambient light sensor no longer stops being readable after one failed
    lookup, and a failure now says which failure it was.
  • Long-press on the action button reports how long it was actually held.

Requires the controller from controller-v2.14.0 or newer for ducking. On an
older controller this firmware behaves exactly as before — music pauses —
so the two can be updated in either order.

What's Changed

  • docs: rewrite rooting.md plainly, and fix an attribution that read wrong by @wilbowes in #59
  • controller: ride out a data-plane blip instead of truncating the audio by @wilbowes in #60
  • docs: bring CLAUDE.md, the journal and README up to date by @wilbowes in #61
  • fix: stop telling HA a barge-in pause is the user's pause (#62) by @wilbowes in #64
  • support: one-file diagnostics bundle, built privacy-first by @wilbowes in #63
  • support: redact account names, and report the resources on both sides by @wilbowes in #69
  • support: put the controller's own log in the bundle, and thin the noise by @wilbowes in #70
  • Duck and mix music under voice instead of pausing (#67) by @wilbowes in #71

Full Changelog: v2.9.13...v2.10.0

EchoMuse v2.9.13

Choose a tag to compare

@github-actions github-actions released this 01 Aug 07:48
040e6a2

v2.9.13 — hold the action button, and a light sensor Amazon hid

Two new things your Echo can tell Home Assistant, and one fix to how it
cancels.

Hold the action button

  • Hold it for about three quarters of a second and it sends an event to
    Home Assistant instead of starting a voice turn. It appears as an
    'Action Button' entity you can pick straight from the automation editor
    — no YAML, nothing to guess.
  • A normal press is unchanged: starts a voice turn, cancels one in
    progress, still instant.
  • If you are used to holding the button to start a turn, that will now do
    nothing locally. A tap is the way.
  • Double and triple presses are deliberately not included. Detecting them
    means delaying every single press to check whether another is coming,
    which would make the button feel slower for everyone.

Ambient light

  • The Dot has a light sensor that Amazon's own software never exposed —
    it does not appear anywhere in Android's sensor list. It works, and it
    is quick: a hand over the top takes it from a lit room to zero and back
    within a second.
  • It appears in Home Assistant as an 'Ambient Light' sensor in lux. A
    meaningful change — someone switching a lamp on — is reported straight
    away; otherwise it updates about every thirty seconds.
  • Useful for 'only if it's dark' conditions, or for driving something else
    in the room by daylight.
  • A device without the sensor reports nothing rather than a misleading
    zero, because zero lux is a real reading.

Fixed

  • Pressing the action button during a spoken response now stops the audio.
    Previously the light ring cleared but the device carried on talking to
    the end of the answer.

Under the hood

  • The startup script now keeps a small permanent record of its own
    decisions, so a device that fails to come back after an update can
    explain why afterwards. It takes effect on the next restart after this
    update, and the controller collects it automatically.

Both new entities appear on their own; nothing to configure. Requires
nothing of you — existing settings, wake word assets and the rollback slot
are untouched.

What's Changed

  • Action-button cancel, ambient light events, supervisor log, and the docs split by @wilbowes in #58

Full Changelog: v2.9.12...v2.9.13

EchoMuse v2.9.11

Choose a tag to compare

@github-actions github-actions released this 31 Jul 05:57
71d5dbd

v2.9.11 — diagnostics for on-device wake word

A small, low-risk update. It changes no behaviour: it adds two numbers to
the status report the device already sends every 30 seconds.

Only useful if you run on-device wake word (Config -> Wake word -> Score on
device). If you don't, this update is optional — nothing else differs from
v2.9.11's predecessor.

What it adds

  • The device now reports the slowest single wake-word inference in each
    window, and the longest gap between audio frames reaching the scorer.

Why

  • When on-device scoring falls behind, it drops audio frames rather than
    ever stalling the microphone. The drop count alone says it happened but
    not why, and there are only two possible causes, needing opposite fixes:
    inference running slow, or audio arriving in bursts. These two numbers
    tell them apart. Drops have been rare in testing (58 in ~925,000 frames,
    with no effect on the audio path), so this is groundwork for trusting
    on-device detection rather than a fix for anything you would notice.

Cost

  • Two integers on an existing message, and one clock reading per audio
    frame on a path that takes no locks. No measurable CPU or memory change.

Requires nothing of you. Existing settings, wake word assets and rollback
slot are untouched, and a device that has never had on-device scoring
enabled behaves exactly as before.

What's Changed

  • controller: stream Home Assistant TTS during generation by @kopiro in #47
  • controller: tell the dashboard when a newer controller is published by @wilbowes in #48
  • docs: journal the streaming TTS merge, the meter gap, and controller-v2.11.0 by @wilbowes in #49
  • dashboard: line up the Link meter with Latency and Temp by @wilbowes in #50
  • wakeword: distribute the on-device assets, and instrument what a drop was by @wilbowes in #51
  • ci: verify the release binary carries the tag, not a string-layout artifact by @wilbowes in #52

New Contributors

Full Changelog: v2.9.10...v2.9.11

EchoMuse v2.9.10

Choose a tag to compare

@github-actions github-actions released this 30 Jul 11:50

Reporting improvements, and a fix to on-device wake word scoring

Nothing changes about how your Echo listens or responds. This release is
worth taking mainly for what it adds to the dashboard.

What you get

  • The Status tab now shows this Echo's temperature and how many of its CPU
    cores are awake, and warns if the chip ever starts limiting itself
    thermally. It idles around 33°C, so anything amber there is unusual.

  • A second CPU core is kept awake. The Echo has four and parks the ones it
    is not using; the audio pipeline works to a tight deadline and does
    better when it is not sharing with everything else. Measured cost was
    0.3°C and no change in power behaviour worth mentioning.

  • Amazon's Whole Home Audio service is switched off. It is the multi-room
    feature EchoMuse replaces, and nothing else on the device was using it.
    Frees roughly 20MB of memory, applied on this update and taking full
    effect after the Echo next restarts.

Fixed

  • On-device wake word scoring (the experimental "Score on device" option)
    was comparing itself against the controller unfairly during playback.
    While audio is playing, the controller deliberately lowers the bar for
    hearing the wake word — the speaker drowns you out — and the Echo was
    not doing the same, so every interruption looked like the Echo had
    missed it. Both sides now use the same bar, and the comparison in the
    Activity tab reports how many turns were genuinely comparable rather
    than lumping the rest in as failures.

    If you do not use that option, this changes nothing for you.

Updating is safe and needs nothing from you. If an update ever goes wrong,
the Echo rolls back to its previous version on its own.

Full Changelog: v2.9.9...v2.9.10

EchoMuse v2.9.9

Choose a tag to compare

@github-actions github-actions released this 30 Jul 09:50
05aad22

On-device wake word scoring (experimental, off by default)

This Echo can now run the wake-word model itself and report what it would
have detected — without acting on it. Nothing about how your Echo behaves
changes unless you switch it on, in Config → Wake word → "Score on device".

It exists to answer whether on-device detection is trustworthy before
anything depends on it. With it on, each turn's row in the Activity tab shows
the Echo's own score beside the controller's, and the activity view reports
how often they agreed and how far apart they were.

Before you enable it:

  • It needs files placed on the Echo that are not part of this firmware —
    ONNX Runtime and the wake-word models, about 15MB, in
    /data/local/share/echomuse/oww. They are deliberately not shipped in the
    firmware: that would double both this download and the space each of the
    two firmware slots takes. Until they are there the toggle does nothing,
    and the device log names the file it could not find.

  • It costs roughly half a CPU core, permanently, because the wake stream is
    always on. Measured as comfortable on this hardware — the microphone
    pipeline was unaffected across hours of use, including during music
    playback — but turn it on for one Echo at a time and watch the Resources
    panel on the Status tab.

  • It needs a controller new enough to record the comparison. An older
    controller simply never switches it on, so there is no bad pairing.

Also in this release

  • A second CPU core is kept awake. The Echo has four and parks the ones it
    is not using; the audio pipeline works to a 160ms deadline and does
    better when it is not sharing with everything else.

  • The Status tab now shows the Echo's temperature and how many of its CPU
    cores are awake, and warns if the chip ever begins limiting itself
    thermally. It idles at around 33°C, so anything amber there is genuinely
    unusual.

Updating is safe and needs nothing from you. If an update ever goes wrong,
the Echo rolls back to its previous version on its own.

What's Changed

  • api: config POSTs refuse to silently delete settings by @wilbowes in #26
  • fix: config guard stole @auth.require_admin from _post_global_config by @wilbowes in #27
  • ring: legible playback meter, honest turn-state, tunable curve by @wilbowes in #29
  • config: per-section fleet/device scoping, plus a last_seen fix by @wilbowes in #30
  • instrumentation + media player fixes: RTT, resume seek, feed buffer by @wilbowes in #31
  • Save and play back the mic audio of recent turns by @wilbowes in #42
  • Tap the utterance recording below NS, not above it by @wilbowes in #43
  • docs: record why delay-and-sum is marginal on a 72mm array by @wilbowes in #44
  • wakeword: streaming feature pipeline, validated against Python by @wilbowes in #45
  • wakeword: run the models on the device, via a dlopen'd ONNX Runtime by @wilbowes in #46

Full Changelog: v2.9.7...v2.9.9

EchoMuse v2.9.8

Choose a tag to compare

@github-actions github-actions released this 25 Jul 10:46
91a9303

What's Changed

  • api: config POSTs refuse to silently delete settings by @wilbowes in #26
  • fix: config guard stole @auth.require_admin from _post_global_config by @wilbowes in #27
  • ring: legible playback meter, honest turn-state, tunable curve by @wilbowes in #29
  • config: per-section fleet/device scoping, plus a last_seen fix by @wilbowes in #30
  • instrumentation + media player fixes: RTT, resume seek, feed buffer by @wilbowes in #31

Full Changelog: v2.9.7...v2.9.8

EchoMuse v2.9.7

Choose a tag to compare

@github-actions github-actions released this 20 Jul 04:28
5fd142f

What's Changed

  • fix: stats relay dropped the new v7 link telemetry by @wilbowes in #23
  • Wake arbitration v2: first detector wins, zero added latency by @wilbowes in #24
  • fix: minDepth read 0 on every stream, healthy or not by @wilbowes in #25

Full Changelog: v2.9.6...v2.9.7

EchoMuse v2.9.6

Choose a tag to compare

@github-actions github-actions released this 20 Jul 03:39
65dcd3e

What's Changed

  • controller: ESPHome server for devices approved after startup + 'Voice Assistant' naming by @wilbowes in #13
  • controller: report hardware model to HA, not the device label by @wilbowes in #14
  • controller: make ESPHome server registration idempotent by @wilbowes in #15
  • docs: HA naming, on-demand ESPHome registration, 2026-07-19 changelog by @wilbowes in #16
  • Custom wake-word models: dashboard install + controller test suite by @wilbowes in #17
  • Multi-device wake arbitration (one utterance, one responder) + Dockerfile COPY fix by @wilbowes in #18
  • Real media playback on the HA media_player (music, pause/resume, voice preemption) by @wilbowes in #20
  • docs: README rewrite — reflect what EchoMuse actually is now by @wilbowes in #21
  • Delivery instrumentation: measure every hop of the voice turn by @wilbowes in #22

Full Changelog: v2.9.5...v2.9.6

EchoMuse v2.9.5

Choose a tag to compare

@github-actions github-actions released this 19 Jul 05:41
ee754b5

What's Changed

  • device: light the mute button LED (gpio444); volume arc only on physical presses by @wilbowes in #12

Full Changelog: v2.9.4...v2.9.5