TECHO5 Dot
The 2016 Echo Dot, minus Amazon's cloud. Linux inside, Home Assistant in charge.
What changed · Stock vs TECHO5 Dot · Install · Credits · TECHO5 for the Echo Show 5
TECHO5 Dot replaces Fire OS on the Amazon Echo Dot 2nd generation (codename biscuit) with a small
Alpine Linux image and one daemon. The Dot becomes a Home Assistant voice satellite: it hears the
wake word on the device, talks to Home Assistant over its encrypted native API, and sends nothing to
Amazon. It still uses the internet for what you'd expect: checking this repo for signed updates and
setting its clock.
| 🐧 Real Linux, no Fire OS | Linux boots from the recovery partition and no Android process runs, not even for Wi-Fi. |
| 🚫 No Alexa, no Amazon account | Your voice goes to your Home Assistant, over its encrypted API, and nowhere else. |
| 🎙️ All seven microphones | Averaged, with echo cancellation, and a wake word heard on the device. |
| 🔊 A Bluetooth speaker again | Pair a phone, or send the Dot's audio to a speaker; a Home Assistant Bluetooth proxy on top. |
| 📞 A speakerphone again | Calls through your own SIP provider, placed by voice or from Home Assistant, answered with the action button; a help call that alerts your phones and dials people in turn. |
| 🔐 Locked down | A firewall that lets in only Home Assistant, mDNS, SSH, Sendspin and the setup page; SSH is keys-only and starts off, and the setup page answers only while it is open. |
| 🔄 Signed updates with rollback | ed25519-signed releases install into a spare slot and roll back on their own if they don't come up healthy. |
Built on EchoLocal by Yuri Gelfand (MIT), which first
made the Echo Dot 2 an ESPHome-native Home Assistant satellite with one Go daemon on Fire OS. TECHO5
Dot's daemon is that daemon, by way of TECHO5's echod (EchoLocal's code vendored and developed
further), and much of it is still EchoLocal's. What this project adds is Linux in place of Fire OS:
the boot image and slots, Wi-Fi without Android, the seven-microphone work, rebuilt Bluetooth, signed
updates and the installer. See NOTICE.
It's a sibling of TECHO5, which did the same for the Echo Show 5. Both run the same daemon source, built per device.
Status: in daily use on three units. Everything marked ✅ below was verified on a bench Dot that came from Fire OS 6574.1, and the installer and updates on two more. Expect rough edges, and keep your backups.
What happened to the Dot
- Fire OS is gone at runtime. Linux boots from the recovery partition. No Android process
runs, not even for Wi-Fi:
cmd/wmtuptalks to MediaTek's combo chip directly, where Amazon's loader used to. - All seven microphones work together. The daemon averages all seven microphones and cancels the speaker's own echo from that average. Measured against the center mic alone, the average heard speech 1–2.5 dB better, and 2–4 dB better between 1.5 and 4.7 kHz. Steering a delay-and-sum beam added nothing on this 72 mm ring, so it isn't the default. The numbers and method are in docs/microphones.md.
- Bluetooth came back, rebuilt. Stock Bluetooth belonged to Fire OS. Here the Dot runs:
- a kernel built from Amazon's GPL source with Bluetooth turned on and 48 upstream security fixes backported (BlueBorne and later);
- a bridge from the chip's raw HCI channel to BlueZ;
- bluez-alsa, rebuilt with an upstream crash fix Alpine's package lacks.
- Updates can't be forged, and a bad one rolls itself back. Releases are signed (ed25519). An update installs into the spare of two root filesystem slots and boots on trial. If it doesn't come up healthy, the Dot returns to the previous slot by itself.
Stock Echo Dot 2 vs TECHO5 Dot
| Stock Echo Dot 2 (Alexa) | TECHO5 Dot | |
|---|---|---|
| Voice assistant | Alexa, in Amazon's cloud | Home Assistant Assist ✅. Wake word on the device (microWakeWord: "Okay Nabu", "Hey Jarvis", "Hey Mycroft", "Alexa", and eight from the community collection — "Computer", "Jarvis", "Hey Friday", "GLaDOS", "HAL", "Terminator", "Marvin", "Home Assistant") ✅. Speech-to-text and replies come from whatever your Home Assistant pipeline uses |
| Where your voice goes | Amazon | Your Home Assistant, over its encrypted native API ✅ |
| Microphones | 7-mic array, Amazon's processing | All 7 averaged, with echo cancellation on the average ✅ |
| Talking over music | Alexa ducks on wake | Ducks on wake, and also for a few seconds after a near miss, so the second try is heard ✅ |
| Speaker | Yes | Yes, a Home Assistant media player ✅ |
| Light ring | Alexa's colors | Wake, listening, thinking, replying and error effects, set from Home Assistant ✅ |
| Buttons (action, volume, mic mute) | Yes | Yes, all four ✅. Mute is the hardware mute line |
| Timers | Yes | Yes (Home Assistant timers) |
| 3.5 mm audio out | Yes | In the daemon (jack detection, headphone path). Not yet tested on this image |
| Bluetooth: phone to Dot (Dot as a speaker) | Yes | Yes ✅. Hold the action button for 5 seconds (the ring pulses blue), or turn on Bluetooth pairing in Home Assistant, or say "pair Bluetooth" with this automation. Then pick the Dot on your phone; a chime says it worked. Phone volume works, the wake word still works over the music, and whichever started last plays: phone or Home Assistant media |
| Bluetooth: Dot to a speaker or headphones | Yes | Yes ✅. If no phone pairs within 20 s, pairing mode connects the strongest speaker it hears, since there's no screen to choose on |
| Home Assistant Bluetooth proxy | No | Yes ✅, alongside Bluetooth audio |
| Multi-room music | Alexa groups | Sendspin (Music Assistant) client on port 8928. Built in, not yet tested on this image |
| Calling | Alexa calling and Drop In | Yes ✅, through your own SIP provider (TLS and SRTP): "call Alex" by voice, a help call that alerts phones and dials people in turn, calls between your own devices. The action button answers and hangs up, and the ring pulses green. Off until Home Assistant signs the Dot in. See TECHO5's phone.md |
| Skills, shopping | Yes | No. Those are Alexa cloud services |
| Routines and smart home control | Alexa | Whatever Home Assistant does ✅ |
| Updates | Amazon, automatic | Signed releases from this repo, offered in Home Assistant, A/B slots with automatic rollback ✅ |
| Remote access | None | SSH, keys only, behind a Home Assistant switch that starts off ✅ |
| Network exposure | Amazon's | Firewall: inbound only the Home Assistant API, mDNS, SSH, Sendspin and the setup page ✅ |
| Changing Wi-Fi | Alexa app | wifi-set on the Dot, or tools/set-wifi.py from a computer over USB ✅ |
| If it won't boot | Factory reset | Rescue mode (USB console, SSH, firewall) after five bad boots. Fire OS and TWRP are still on the device, one command away ✅ |
Numbers from the bench unit:
- Memory: about 445 MB of 481 MB free with everything running, Bluetooth included.
- Wake word: about 30% of one core.
- Root filesystem: 49 MB.
Boot time
Timed from a reboot command until Home Assistant's API answers from another machine, on the same Dot:
| Reboot to Home Assistant API | |
|---|---|
| Fire OS 6 with the daemon as an Android service | 43.6 s |
| TECHO5 Dot v0.2.0 | 45.5–46.4 s (three runs) |
About the same, not faster. By Linux's own clock the Dot is on Wi-Fi at 21 s and listening for the wake word at 26 s. The other ~19 s come before that clock starts: shutting down, the bootloader, and loading the kernel. An earlier build waited for Bluetooth before starting the daemon and took 128 s; now Bluetooth comes up in the background and a paired speaker reconnects when it's ready.
What you need
- An Echo Dot 2nd gen, already unlocked with amonet, with Fire OS 6574.1 in its system slots, and sitting in TWRP or running Fire OS with root adb (for example with EchoLocal installed). Unlocking isn't part of this project; Getting started has every command.
- The Dot joined to Wi-Fi once in Fire OS. If it hasn't been, the installer asks for a network.
- A Windows, Linux or macOS computer with Python 3, adb and git (setup for each), plus Home Assistant. Nothing is compiled.
Installing
Starting from a stock Dot? Getting started walks through it in order: updating Fire OS, the amonet unlock (linked), this installer, and Home Assistant.
git clone https://github.com/HuskerMinion/techo5-dot
cd techo5-dot
python3 tools/install-dot.py --dry-run # checks, backups, download, boot image; writes nothing
python3 tools/install-dot.py
It finds the Dot on its own (asking which, if several are plugged in) and asks what to call it in Home
Assistant when it has no name yet. From a script, pass --serial <adb serial> --name "Kitchen" and it
asks nothing.
The installer:
- Backs up every boot-critical partition to
backups/<serial>/and checks each copy against the device. On TWRP it reads the real bootloader partitions, not amonet's decoys. - Downloads the latest signed release (the root filesystem, the Bluetooth kernel and the rescue
environment's packages). The manifest is only believed once the release key's signature over it
checks out — the same key the device itself trusts — and every file is checked against the
checksums it carries.
--release dot-v0.6.0picks a version instead of the newest — releases here are taggeddot-vX.Y.Z, so the tag is what goes in, not the bare version;--rootfsand--kerneltake your own builds (docs/building.md). - Builds this unit's boot image from its own recovery backup, with the Bluetooth kernel
(
--no-bluetooth-kernelkeeps the unit's own, without Bluetooth). No Amazon binary is ever downloaded or published. - Writes the image to recovery, and the root filesystem into slot a.
- Keeps an existing Home Assistant name and key, or asks for a name and makes a key.
- Reboots, then waits on the Dot's USB console until the boot reports healthy.
Home Assistant then finds the Dot as an ESPHome device.
Updates after that come from this repo's releases, through Home Assistant's update card. They carry the
root filesystem only; a Dot installed before the Bluetooth kernel gets it with
python3 tools/update-boot.py --serial <serial> --address <address> (SSH switched on in Home Assistant).
On Windows, type python for python3.
Where things are
- docs/porting-plan.md: how it was built, milestone by milestone, and what each step proved.
- docs/hardware.md: the board, partitions, kernels, and the Bluetooth kernel's security backports.
- docs/microphones.md: the array measurements, echo cancellation, and the LED whine that turned out to be Fire OS's.
tools/: the installer, the Wi-Fi tool, the boot image updater, andtools/linux/(initramfs, root filesystem overlay, slot tool, firewall, kernel and bluez-alsa build scripts and patches).cmd/wmtup: Wi-Fi chip bring-up without Android.- docs/building.md: building the kernel, bluez-alsa, the daemon and the root filesystem yourself.
- The daemon's source: TECHO5, branch
main, built with-tags dot.
Comments