|
|
# Echo (reproducción)
|
|
|
|
|
|
## Qué es
|
|
|
|
|
|
**Echo** graba voz de **grupo** entrante y la reproduce en el TG **9990**. Corre como **PEER** conectado al master **ECHO** del peer server principal (bridge TG 9990).
|
|
|
|
|
|
El runtime de playback forma parte de **`adn-server`**; ejecútalo con **`adn-server.py --echo`** y un **`adn-echo.yaml`** mínimo.
|
|
|
|
|
|
## Configuración
|
|
|
|
|
|
Usa un **YAML aparte y mínimo** — solo lo que el PEER necesita para unirse a **ECHO** en `adn-server.yaml`:
|
|
|
|
|
|
| Campo | Rol |
|
|
|
|-------|------|
|
|
|
| `GLOBAL.SERVER_ID` | Identidad de red del echo (suele ser `9990`) |
|
|
|
| `LOGGER` | Archivo de log (opcional pero recomendado) |
|
|
|
| `SYSTEMS.ECHO` | `MODE: PEER`, `IP`/`PORT` local, `MASTER_IP`/`MASTER_PORT`, `PASSPHRASE`, `RADIO_ID`, `CALLSIGN`, `OPTIONS` |
|
|
|
|
|
|
No hace falta `PROXY`, `ALIASES` ni `REPORTS`. **`MASTER_PORT`** y **`PASSPHRASE`** deben coincidir con **`ECHO`** en el servidor principal.
|
|
|
|
|
|
- Copia **`adn-echo.example.yaml`** → **`adn-echo.yaml`** (no se commitea).
|
|
|
- Ejecuta:
|
|
|
|
|
|
```bash
|
|
|
python adn-server.py --echo -c adn-echo.yaml
|
|
|
```
|
|
|
|
|
|
En producción suele ir en una unidad **systemd** aparte (ver `examples/systemd/adn-echo.service` en el repo), mismo binario:
|
|
|
|
|
|
```bash
|
|
|
sudo cp examples/systemd/adn-echo.service /etc/systemd/system/
|
|
|
sudo systemctl daemon-reload
|
|
|
sudo systemctl enable --now adn-echo
|
|
|
```
|
|
|
|
|
|
## Relación con TG 9990
|
|
|
|
|
|
El servidor principal expone un master **ECHO** en **TG 9990** para el bridge de eco. El servicio **echo** independiente es un proceso aparte con su propia config que se conecta a ese master.
|
|
|
|
|
|
## Comportamiento con varios hotspots (proxy inject-only)
|
|
|
|
|
|
Cuando los hotspots se conectan a través del **proxy integrado** (`PROXY`),
|
|
|
varios radios pueden compartir el mismo MASTER como peers. En el legado
|
|
|
`adn-dmr-server` cada MASTER tenía un solo peer, así que el eco volvía
|
|
|
naturalmente sólo al llamante. El proxy inject-only multi-peer lo impone
|
|
|
explícitamente:
|
|
|
|
|
|
- **Entrega punto-a-punto.** La reproducción del eco (TG 9990) y los TG de
|
|
|
servicio bajo demanda (**9991–9999**) se entregan **sólo** al peer exacto
|
|
|
que originó la llamada (`RX_PEER` en el slot activo), **nunca** a otros
|
|
|
hotspots del mismo usuario. No hay matching difuso del ID DMR de origen.
|
|
|
- **Fallback a peer único.** Cuando sólo hay un peer conectado, el paquete se
|
|
|
le entrega (comportamiento legado de peer único).
|
|
|
- Esto aplica tanto al **plano de datos** (enrutado de audio) como al **plano
|
|
|
de reportes** (`BRDG_EVENT` enviado al monitor): el monitor muestra el chip
|
|
|
de eco en el hotspot originador, no en un hermano.
|
|
|
|
|
|
Ver [Enrutado de voz y contención — Gate de downlink](../development/routing-and-contention.md#gate-de-downlink-un-peer-recibe-el-paquete)
|
|
|
y [Proxy hotspot — Comportamiento con varios hotspots](hotspot-proxy.md#comportamiento-con-varios-hotspots).
|
|
|
|
|
|
## Documentación
|
|
|
|
|
|
Esta página es el resumen incluido en el repositorio; amplía las notas de despliegue localmente según necesites.
|