# Echo (playback) ## What it is **Echo** records incoming **group** voice and plays it back on TG **9990**. It runs as a **PEER** process that connects to the **ECHO** master on the main peer server (TG 9990 bridge). The playback runtime is part of **`adn-server`**; run **`adn-server.py --echo`** with minimal **`adn-echo.yaml`**. ## Configuration Use a **small separate YAML** — only what the PEER needs to attach to **ECHO** in `adn-server.yaml`: | Field | Role | |-------|------| | `GLOBAL.SERVER_ID` | Echo network identity (often `9990`) | | `LOGGER` | Log file (optional but recommended) | | `SYSTEMS.ECHO` | `MODE: PEER`, local `IP`/`PORT`, `MASTER_IP`/`MASTER_PORT`, `PASSPHRASE`, `RADIO_ID`, `CALLSIGN`, `OPTIONS` | No `PROXY`, `ALIASES`, or `REPORTS` required. **`MASTER_PORT`** and **`PASSPHRASE`** must match **`ECHO`** on the main server. - Copy **`adn-echo.example.yaml`** → **`adn-echo.yaml`** (not committed). - Run: ```bash python adn-server.py --echo -c adn-echo.yaml ``` Typical production: separate **systemd** unit (see `examples/systemd/adn-echo.service` in the repo), same binary: ```bash sudo cp examples/systemd/adn-echo.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable --now adn-echo ``` ## Relation to TG 9990 The main server exposes an **ECHO** master on **TG 9990** for the echo bridge. The standalone **echo** service is a separate process with its own config that connects to that master. ## Multi-hotspot behaviour (inject-only proxy) When hotspots attach through the **integrated proxy** (`PROXY`), several radios may share the same MASTER as peers. In legacy `adn-dmr-server` each MASTER had a single peer, so echo naturally returned only to the caller. The multi-peer inject-only proxy enforces the same explicitly: - **Point-to-point delivery.** Echo playback (TG 9990) and on-demand service TGs (**9991–9999**) are delivered **only** to the exact peer that originated the call (`RX_PEER` on the active slot), **never** to other hotspots of the same user. There is no fuzzy matching on the source DMR ID. - **Single-peer fallback.** When only one peer is connected, the packet is delivered to it (legacy single-peer behaviour). - This applies to both the **data plane** (audio routing) and the **report plane** (`BRDG_EVENT` sent to the monitor): the monitor shows the echo chip on the originating hotspot, not on a sibling. See [Voice routing and contention — Downlink gate](../development/routing-and-contention.md#downlink-gate-does-a-peer-receive-the-packet) and [Hotspot proxy — Multi-hotspot behaviour](hotspot-proxy.md#multi-hotspot-behaviour). ## Documentation This page is the summary shipped with the repository; extend your deployment notes locally as needed.