# gamer92000/echo-dot-assist architecture

> Architecture diagram of the GitHub repository gamer92000/echo-dot-assist, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-15). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/gamer92000/echo-dot-assist
- Repository: https://github.com/gamer92000/echo-dot-assist

## Overview

echo-dot-assist replaces Alexa on supported Echo devices with the hassmic daemon, which exposes the device to Home Assistant as an ESPHome voice satellite (or, alternatively, a Wyoming satellite). The user speaks to the Echo; its retained microphone front end and local wake-word path lead into Home Assistant Assist, while the daemon also provides media, device controls, and network services. The README documents these capabilities, but most implementation files were not sampled, so subsystem links are limited to documented relationships.

Main entry points: [`src/hassmic/main.c`](https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/main.c) (hassmic daemon), [`src/hassmic/board.h`](https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/board.h) (Supported Echo), [`src/hassmic/proto_esphome.c`](https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/proto_esphome.c) (ESPHome API), [`src/hassmic/wyoming.c`](https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/wyoming.c) (Wyoming mode)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Daemon and device"]
  node_echo["Supported Echo<br/>[board.h]"]
  node_daemon["hassmic daemon<br/>[main.c]"]
end

subgraph group_voice["Voice assistant"]
  node_esphome["ESPHome API<br/>[proto_esphome.c]"]
  node_wyoming["Wyoming mode<br/>[wyoming.c]"]
  node_wake["Wake words<br/>[wake.h]"]
  node_arbitration["Nearest Echo<br/>[arb.h]"]
  node_dropin["Drop In<br/>[dropin.h]"]
end

subgraph group_media["Media and sound"]
  node_audio["Audio processing<br/>[audio.h]"]
  node_bluetooth["Bluetooth audio<br/>[a2dp.h]"]
  node_sendspin["Multiroom music<br/>[sendspin.h]"]
  node_sound["Sound detection<br/>[noise.h]"]
end

subgraph group_controls["Controls and display"]
  node_settings["Settings page<br/>[web.c]"]
  node_ring["Light ring<br/>[ring.h]"]
  node_screen["Echo Show screen<br/>[screen.h]"]
  node_buttons["Buttons and mute<br/>[buttons.c]"]
end

subgraph group_connectivity["Network services"]
  node_motion["Wi-Fi motion<br/>[wifimotion.h]"]
  node_ota["Signed updates<br/>[update.h]"]
end

node_user(("User"))
node_ha(("Home Assistant"))

node_user -->|"speaks to"| node_echo
node_echo -->|"runs"| node_daemon
node_daemon -->|"connects as satellite"| node_ha
node_daemon -->|"serves by default"| node_esphome
node_daemon -->|"offers alternative"| node_wyoming
node_ha -->|"discovers device"| node_esphome
node_echo -->|"retains wake word"| node_wake
node_echo -->|"provides audio front end"| node_audio
node_daemon -->|"coordinates Echoes"| node_arbitration
node_daemon -->|"provides local calls"| node_dropin
node_daemon -->|"supports SBC AAC aptX"| node_bluetooth
node_daemon -->|"provides multiroom audio"| node_sendspin
node_daemon -->|"detects sounds"| node_sound
node_ha -->|"configures entities"| node_settings
node_daemon -->|"drives light ring"| node_ring
node_daemon -->|"shows text and timers"| node_screen
node_daemon -->|"reports button events"| node_buttons
node_daemon -->|"reports Wi-Fi motion"| node_motion
node_ha -->|"can provide updates"| node_ota

click node_echo "https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/board.h"
click node_daemon "https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/main.c"
click node_esphome "https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/proto_esphome.c"
click node_wyoming "https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/wyoming.c"
click node_wake "https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/wake.h"
click node_arbitration "https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/arb.h"
click node_dropin "https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/dropin.h"
click node_audio "https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/audio.h"
click node_bluetooth "https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/a2dp.h"
click node_sendspin "https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/sendspin.h"
click node_sound "https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/noise.h"
click node_settings "https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/web.c"
click node_ring "https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/ring.h"
click node_screen "https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/screen.h"
click node_buttons "https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/buttons.c"
click node_motion "https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/wifimotion.h"
click node_ota "https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/update.h"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_echo,node_daemon,node_user toneBlue
class node_esphome,node_wyoming,node_wake,node_arbitration,node_dropin toneAmber
class node_audio,node_bluetooth,node_sendspin,node_sound toneMint
class node_settings,node_ring,node_screen,node_buttons toneRose
class node_motion,node_ota,node_ha toneIndigo
```

## Components

### Daemon and device

- [Supported Echo](https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/board.h): `src/hassmic/board.h`
- [hassmic daemon](https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/main.c): `src/hassmic/main.c`

### Voice assistant

- [ESPHome API](https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/proto_esphome.c): `src/hassmic/proto_esphome.c`
- [Wyoming mode](https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/wyoming.c): `src/hassmic/wyoming.c`
- [Wake words](https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/wake.h): `src/hassmic/wake.h`
- [Nearest Echo](https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/arb.h): `src/hassmic/arb.h`
- [Drop In](https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/dropin.h): `src/hassmic/dropin.h`

### Media and sound

- [Audio processing](https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/audio.h): `src/hassmic/audio.h`
- [Bluetooth audio](https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/a2dp.h): `src/hassmic/a2dp.h`
- [Multiroom music](https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/sendspin.h): `src/hassmic/sendspin.h`
- [Sound detection](https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/noise.h): `src/hassmic/noise.h`

### Controls and display

- [Settings page](https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/web.c): `src/hassmic/web.c`
- [Light ring](https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/ring.h): `src/hassmic/ring.h`
- [Echo Show screen](https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/screen.h): `src/hassmic/screen.h`
- [Buttons and mute](https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/buttons.c): `src/hassmic/buttons.c`

### Network services

- [Wi-Fi motion](https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/wifimotion.h): `src/hassmic/wifimotion.h`
- [Signed updates](https://github.com/gamer92000/echo-dot-assist/blob/main/src/hassmic/update.h): `src/hassmic/update.h`

### Other components

- **User**
- **Home Assistant**

## Connections

- User → Supported Echo: speaks to (evidence: `README.md`)
- Supported Echo → hassmic daemon: runs (evidence: `src/hassmic/main.c`)
- hassmic daemon → Home Assistant: connects as satellite (evidence: `src/hassmic/main.c`)
- hassmic daemon → ESPHome API: serves by default (evidence: `README.md`)
- hassmic daemon → Wyoming mode: offers alternative (evidence: `README.md`)
- Home Assistant → ESPHome API: discovers device (evidence: `README.md`)
- Supported Echo → Wake words: retains wake word (evidence: `README.md`)
- Supported Echo → Audio processing: provides audio front end (evidence: `README.md`)
- hassmic daemon → Nearest Echo: coordinates Echoes (evidence: `README.md`)
- hassmic daemon → Drop In: provides local calls (evidence: `README.md`)
- hassmic daemon → Bluetooth audio: supports SBC AAC aptX (evidence: `README.md`)
- hassmic daemon → Multiroom music: provides multiroom audio (evidence: `README.md`)
- hassmic daemon → Sound detection: detects sounds (evidence: `README.md`)
- Home Assistant → Settings page: configures entities (evidence: `README.md`)
- hassmic daemon → Light ring: drives light ring (evidence: `README.md`)
- hassmic daemon → Echo Show screen: shows text and timers (evidence: `README.md`)
- hassmic daemon → Buttons and mute: reports button events (evidence: `README.md`)
- hassmic daemon → Wi-Fi motion: reports Wi-Fi motion (evidence: `README.md`)
- Home Assistant → Signed updates: can provide updates (evidence: `README.md`)
