Experimental hardware project: this guide targets the 2021 Echo Show 5 Gen 2, known as
cronos. It is not a generic Android-tablet procedure. Its unlock path can permanently brick the device if low-level firmware is mismatched. A cheap experimental device is acceptable; improvising boot-chain images is not.
The finished appliance
Echo Show 5 Gen 2 → LineageOS → VACA + Home Assistant Assist
↓
native Xena client (last)
local wake word → authenticated LAN bridge → Hermes → TTS reply
The project has three useful end states. Stop at any point that delivers enough value:
- Owned smart display: LineageOS, no Amazon login/Alexa dependency, and a Home Assistant room dashboard.
- Home Assistant voice display: View Assist Companion App (VACA) supplies wake word, dashboard and Home Assistant Assist integration.
- Xena appliance: a custom Android client and private LAN bridge provide push-to-talk first, then an always-listening local-wake-word Hermes experience.
Research status
A device-specific TWRP tree, an unofficial LineageOS 18.1 cronos release, and recent project reports establish that this is technically plausible. It is not official LineageOS support and the comprehensive conversion write-up is recent, so validate compatibility again against the exact device and installed build.
Reported LineageOS capability: touch, Wi-Fi, Bluetooth, speaker, microphone and brightness. The built-in camera is currently reported as non-functional. That does not affect external Home Assistant camera views.
Phase 0 — intake: preserve choices
Do this before normal Wi-Fi, updates or a personal Amazon login.
- Photograph rear label, PSU, screen condition and the exact software/device-information page.
- Confirm Echo Show 5 Gen 2 / 2021 /
cronos. Do not apply this to Gen 1, Gen 3, or another Echo Show. - Record the Fire OS build privately. Never publish serial numbers, MAC addresses or screenshots containing them.
- Confirm the seller has deregistered the device; factory-reset only if necessary.
- Test display, touch, speaker, microphone, buttons and power behaviour.
- Put the device on a constrained voice/IoT network that can reach Home Assistant and the future bridge, rather than broad management-network access.
- Recheck the current unlock material for the recorded build. Stop if tooling does not explicitly recognise it.
Exit gate: actual model/build recorded, basic hardware tested, seller linkage cleared, compatibility revalidated.
Phase 1 — unlock, recover, then install LineageOS
Non-negotiable rules
- Never manually substitute an older or different preloader, LK, TEE, or other boot-chain image.
- Anti-rollback fuses mean low-level downgrade mistakes can be permanent.
- Do not begin without a proven recovery route and two offline backup destinations.
- Treat the current cronos conversion notes as a research source—not a substitute for confirming the exact device/build.
Procedure
- Read the current device-specific unlock, recovery and anti-rollback documentation end-to-end.
- Build a private workstation folder containing only model/build-matched assets. Record source URLs and checksums locally.
- Confirm ADB/USB connectivity and recovery prerequisites before unlock work.
- Use only the version-aware cronos unlock path. If it detects an unknown build or asks for a manual firmware selection, stop.
- Once recovery/TWRP access exists, create every backup the validated procedure requires.
- Copy those backups to two physical locations and verify they are readable before continuing.
- Prove recovery/boot behaviour once before changing the OS.
- Verify the unofficial LineageOS archive checksum and model assertion, then flash only the matching cronos release.
- Test three cold boots plus Wi-Fi, touch, audio output, microphone, Bluetooth, brightness, buttons and launcher persistence.
- Record limitations. Do not rely on it for a critical alarm, security camera or safety function until it has earned trust.
Rollback rule: use TWRP and validated backups. Never attempt boot-chain downgrade experiments.
Phase 2 — Home Assistant smart display and Assist
Use View Assist and View Assist Companion App (VACA) after LineageOS is stable. VACA is an Android smart-display companion that provides dashboard display, Home Assistant device controls, wake-word support and per-device HA voice-assistant selection.
Procedure
- Install a lightweight launcher and prove it survives a reboot.
- Install VACA through its supported Home Assistant integration process.
- Create a 960 × 480, kiosk-style room dashboard:
- temperature/humidity and useful alerts;
- large light/climate controls;
- one live camera maximum; use snapshots for camera grids;
- no dense cards or expensive animations.
- Configure VACA home/dashboard routes. Make it the default launcher only after manual launches and reconnects work.
- Choose the Assist voice pipeline deliberately. Use local wake word and local STT/TTS where practical; otherwise document exactly which service receives audio/transcripts.
- Test ten real household commands plus screen sleep/wake, mic mute, Wi-Fi recovery and a complete device reboot.
Security: never embed a privileged HA long-lived token in an APK, public URL or dashboard YAML. Use the companion flow or a restricted identity.
Phase 3 — prove Hermes voice on the device
Hermes already supports Telegram voice messages, CLI push-to-talk and Discord voice channels. It does not currently provide a turnkey Android/Echo satellite protocol.
Before building custom software:
- Confirm Hermes gateway, STT and TTS configuration on the EliteDesk without changing global settings blindly.
- Install Telegram on the LineageOS Echo and test a voice note to Xena: record → transcribe → Hermes reply → spoken audio playback.
- Optionally test a private Discord voice channel for a more natural real-time conversation.
- Measure turn latency, mic volume, speaker quality and device responsiveness.
- Choose push-to-talk as the native-app V1 unless real use proves a wake word is essential immediately.
Exit gate: at least one reliable end-to-end spoken Hermes turn from the Echo, in the intended Hermes session/profile.
Phase 4 — build the native Xena appliance last
The custom app should be an owned Android client plus a private LAN voice bridge on the EliteDesk. It should not expose Hermes directly to the Internet or hard-code provider, Home Assistant, Telegram, Discord or privileged credentials in the APK.
V1: native push-to-talk
Press and hold → Android records bounded audio → authenticated LAN bridge
→ STT → Hermes conversation session → TTS → Echo playback
| Component | Responsibility |
|---|---|
| Android app | Xena state UI, microphone permission, press-to-talk, cancel/retry, playback and clear listening/speaking indicators. |
| LAN bridge | Per-device authentication, audio limits, STT/TTS dispatch, Hermes session routing, temporary-file cleanup, redacted health logs. |
| Hermes | Dedicated restricted appliance session/profile with deliberate tool and household-access policy. |
| Home Assistant | Optional visual state/cards, not the required Hermes transport. |
V1 acceptance criteria: a press/release voice turn succeeds; a failed network request recovers cleanly; unauthenticated requests are rejected; no secret is extractable from the client.
V2: local wake word and voice activity detection
Only begin once V1 is boringly reliable.
- Choose an on-device wake-word engine compatible with the installed Android version and Echo hardware.
- Keep idle microphone processing local. Wake word itself must not stream ambient audio to a service.
- Add voice activity detection/end-of-turn handling, visible listening state, cancel control and timeout.
- Preserve physical and software mic-mute behaviour; mute must always win.
- Test echo cancellation: Xena must not wake herself while speaking.
- Measure false accepts, false rejects, clipped endings and total latency during a week of ordinary household use.
V3: appliance polish
- low-CPU listening/thinking/speaking states;
- visual Home Assistant cards from a constrained data model;
- quiet hours and per-room volume;
- optional interruption/barge-in only if the audio stack behaves reliably;
- diagnostics for app, bridge, STT, Hermes and TTS health—never raw private transcripts.
Privacy and operational rules
Amazon-independent does not automatically mean fully local. Keep a small decision record for each phase:
| Data | Decide and document |
|---|---|
| Wake word | Local only. |
| Audio | Maximum turn length, temporary-file deletion and retention policy. |
| STT/TTS | Local provider or named cloud provider. |
| Hermes/LLM | Model/provider receiving the transcript. |
| Bridge | LAN-only route, per-device token, TLS/authenticated reverse proxy, rate limit and update plan. |
| Logs | Health metrics only; secrets and raw transcripts redacted/minimised. |
Practical troubleshooting
| Symptom | First check |
|---|---|
| Tool does not recognise firmware | Stop. Record exact build; do not force a low-level image. |
| Bootloop | Recovery/TWRP access and verified backup integrity. |
| Dashboard resets | Launcher/VACA persistence and reduce dashboard complexity. |
| Quiet voice | Record a sample; check Android permission/gain before blaming STT. |
| HA unavailable | Test local DNS/network and HA endpoint; do not weaken HA authentication. |
| Hermes turn fails | Independently test bridge authentication, STT, Hermes session dispatch and TTS. |
| False wake ups | Collect timestamped non-content metrics, tune locally, preserve mute. |
Progress and next action
The live execution tracker is maintained in the KB repository at projects/echo-show-local-voice-appliance/PROJECT.md.
Current status: the device has been ordered; no device-side action has occurred.
Next action on arrival: photograph the label and exact Fire OS/device-version screen before connecting to normal Wi-Fi, accepting updates or using a personal Amazon account.