Hamradio/chan svx sat/es
Una guía práctica paso a paso para enlazar un nodo AllStarLink 3 directamente con un SVXReflector usando chan_svx_sat — instalarlo, conectarlo y ajustar bien el audio. No hace falta conocimiento previo de SvxLink. Para copiar y pegar.
chan_svx_sat es un driver de canal de Asterisk que permite a tu nodo AllStar hablar Opus directamente con un SVXReflector — así eliminas el antiguo salto chan_usrp → svxlink y el tándem de vocoder extra que venía con él.
¿Realmente lo necesito?
- Operas un nodo AllStarLink 3 (en una Raspberry Pi o x86) y lo quieres en una talkgroup de SVXReflector.
- Hoy probablemente lo enlazas con
chan_usrp→svxlink. Funciona, pero transcodifica el audio dos veces y añade una caja que cuidar. chan_svx_satreemplaza todo ese salto con un driver. El camino de audio pasa a ser solo PCM ↔ Opus, una vez.
Si no vas a un SvxReflector — p. ej. si solo enlazas AllStar-a-AllStar, o usas DMR/YSF — no lo necesitas. Ver Hamradio para eso.
Palabras que verás (glosario en lenguaje llano)
| Término | Qué significa aquí |
|---|---|
| AllStarLink 3 (ASL3) | El sistema de enlace VoIP construido sobre Asterisk. Tu nodo corre asl3-asterisk.
|
| app_rpt | La aplicación de Asterisk que es el controlador de tu repetidor/nodo (COS, PTT, IDs, enlaces). |
| SVXReflector | Un servidor que une a muchos clientes estilo SvxLink en talkgroups compartidas. Tu nodo inicia sesión en él. |
| Talkgroup (TG) | Un «canal» en el reflector. Transmites en una TG y oyes a quien más esté en ella. |
| Opus | El códec de audio en la línea entre tu nodo y el reflector. Una transcodificación, 8 kHz, tramas de 20 ms. |
| Trunk | Una conexión TCP (login) al reflector. Varios nodos pueden compartir un trunk — ver abajo. |
| Sección | Un [block] en svx_sat.conf. Una sección = un nodo = una TG.
|
Qué necesitas antes de empezar
- Un nodo AllStarLink 3 funcional. Comprueba:
asterisk -VmuestraAsterisk 22.x+asl3-.... - Un SO de 64 bits. Debian 12 (bookworm) o 13 (trixie), en x86-64 o arm64 (Pi 3/4/5). Comprueba:
dpkg --print-architecturey. /etc/os-release; echo $VERSION_CODENAME. (La Pi Zero 2 W no se admite a propósito — calor + Wi-Fi.) - Un login de reflector propio — un login + clave de autenticación dedicados, no compartidos con svxlink ni otro nodo. Compartir uno echa al otro. Los logins de SVXReflector son indicativos en mayúsculas.
- El reflector es accesible. Comprueba:
nc -vz REFLECTOR_HOST 5300.
El ejemplo usado a lo largo es un nodo real: nodo AllStar 1999 enlazando a un reflector en 172.16.1.1:5300, talkgroup 24016. Sustituye tu propio host / login / TG donde los veas.
Cómo encaja todo
Dos pequeños archivos de configuración en el nodo, y una línea SECRET coincidente en el reflector. Ese es todo el cableado:
Paso 1 — Instalar el paquete
Elige el .deb que coincida con tu SO y arquitectura:
| SO / arq | Paquete |
|---|---|
| trixie x86-64 | asl3-chan-svx-sat_<ver>~trixie_amd64.deb
|
| trixie arm64 (Pi) | asl3-chan-svx-sat_<ver>~trixie_arm64.deb
|
| bookworm x86-64 | asl3-chan-svx-sat_<ver>~bookworm_amd64.deb
|
| bookworm arm64 (Pi) | asl3-chan-svx-sat_<ver>~bookworm_arm64.deb
|
sudo apt install ./asl3-chan-svx-sat_<ver>~<os>_<arch>.deb
Las dependencias (asl3-asterisk, libopus0, libssl3) se resuelven solas. El paquete instala el módulo, una configuración de ejemplo, este tipo de documentación en /usr/share/doc/asl3-chan-svx-sat/ y añade una línea load comentada en modules.conf para que la actives en el Paso 4. Aún no se carga ni conecta nada.
Paso 2 — Crear la configuración del reflector
Copia el ejemplo y ábrelo para editar:
sudo cp /etc/asterisk/svx_sat.conf.sample /etc/asterisk/svx_sat.conf sudo chown asterisk:asterisk /etc/asterisk/svx_sat.conf sudo chmod 640 /etc/asterisk/svx_sat.conf # it holds your reflector password sudoedit /etc/asterisk/svx_sat.conf
Déjalo así (nombra la sección según el nodo — ordenado e inequívoco):
[1999] host = 172.16.1.1 ; reflector hostname or IP port = 5300 ; reflector port (default 5300) login = SA7AUX-AC ; your OWN login, UPPER-CASE, not shared password = CHANGE_ME ; your reflector auth-key callsign = SA7AUX ; name shown to the reflector tg = 24016 ; talkgroup to select (TX + primary RX)
[SATELLITE] del reflector debe haber una línea SECRET_SA7AUX-AC=CHANGE_ME (distingue mayúsculas). Si operas tú el reflector: añade/cambia la línea SECRET_ y reinicia el reflector — solo lee los secretos al arrancar.El callsign se muestra como nombre del nodo si está libre en el reflector en ese momento; ante una colisión (o si se deja vacío) recurre a ASL-<section> (p. ej. ASL-1999), reevaluado automáticamente a medida que se liberan nombres.
Paso 3 — Apuntar el nodo hacia él
En /etc/asterisk/rpt.conf, en el stanza de tu nodo, comenta el rxchannel antiguo — nunca lo borres — y añade la línea SVX:
[1999](node-main) ; rxchannel = USRP/127.0.0.1:4001:4002 ; old bridge, kept so you can revert rxchannel = SVXSAT/1999 ; chan_svx_sat -> section [1999]
/etc/asterisk/custom/rpt.conf — ASL3 incluye ese archivo y nunca lo sobrescribe. Usa la edición directa de arriba para un cambio rápido; usa custom/ si quieres que tu configuración sobreviva limpiamente a las actualizaciones de asl3-asterisk.
Paso 4 — Activar el módulo
ASL3 tiene autoload = no, así que el módulo debe listarse a mano. El paquete añadió una línea comentada — actívala. Debe estar dentro de la sección [modules] (una línea load tras una sección posterior se ignora en silencio):
sudo sed -i 's/^; *load = chan_svx_sat.so/load = chan_svx_sat.so/' /etc/asterisk/modules.conf grep -n '^load = chan_svx_sat.so' /etc/asterisk/modules.conf # confirm it's active
Paso 5 — Aplicar y verificar
Un cambio de rxchannel requiere reinicializar app_rpt, así que reinicia Asterisk y luego comprueba:
sudo asterisk -rx "core restart now" sudo asterisk -rx "svxsat show"
Un puente sano se ve así — CONNECTED significa que has terminado la conexión básica:
Pulsa en el nodo → txframes sube y el reflector abre el talker en tu TG. Cuando otro habla en la TG → rxframes sube. Listo. El resto de la página son ajustes y extras.
Ajustar bien el audio
Aquí es donde la mayoría se atasca, así que ve despacio. Solo las etapas amarillas tienen mandos — todo lo gris es automático.
Todo esto vive en la sección del nodo en svx_sat.conf. Tras cambiar cualquiera, ejecuta sudo asterisk -rx "core restart now".
Los cuatro mandos de audio
| Ajuste | Por defecto | Qué hace |
|---|---|---|
tx_gain |
0 |
Preamplificación en TX (nodo → reflector), en dB. Súbelo si otros dicen que vas bajo; bájalo si dicen que saturas. |
rx_gain |
0 |
Preamplificación en RX (reflector → nodo), en dB. Súbelo si el audio del reflector va bajo en tu repetidor. |
tx_agc / rx_agc |
no |
Control automático de ganancia. Actívalo para igualar estaciones fuertes/débiles. yes o no.
|
bitrate |
16000 |
Bitrate Opus en bit/s. Déjalo salvo que tengas un motivo. |
«Mi audio es X → haz Y»
| Síntoma | Solución |
|---|---|
| Otros dicen que vas muy bajo | Sube tx_gain unos dB cada vez (p. ej. 3, luego 6).
|
| Otros dicen que saturas / distorsionas | Baja tx_gain un poco. El limitador protege el pico, pero una entrada limpia es mejor.
|
| Audio del reflector muy bajo en tu repetidor | Sube rx_gain unos dB.
|
| Estaciones fuertes y débiles muy desiguales | Activa rx_agc = yes (y/o tx_agc = yes).
|
| Audio entrecortado que sale | Ver el arreglo de tx_hold abajo. |
| Chasquidos/cortes que entran en un enlace malo | Sube jitter (ver abajo). FEC/PLC ya ayudan; esto da margen.
|
Dos mandos más: tx_hold y jitter
| Ajuste | Por defecto | Qué hace |
|---|---|---|
tx_hold |
250 |
Tiempo de retención de TalkerStop, en ms. Un breve des-pulsar/re-pulsar a mitad de la intervención (parpadeo de COS, hangtime del enlace) cerraría y reabriría el talker del reflector y cortaría el audio. La retención lo mantiene abierto durante el hueco. 0 = parar de inmediato al des-pulsar.
|
jitter |
40 |
Prellenado del buffer de jitter, en ms. Más alto = más suave en un enlace malo/largo, pero más latencia. 0 = mínimo (bien en una LAN limpia). Máx 500.
|
Si el audio que sale se corta: ejecuta svxsat show y observa starts/stops. Uno de cada por intervención es sano. Muchos por intervención significa que tu pulsación parpadea — sube tx_hold (prueba 400).
Opcional: escuchar talkgroups extra
monitor = 24020, 9990 ; extra TGs you HEAR (RX only); TX still goes to 'tg'
Mantenerlo activo — para siempre
Dos cosas independientes se mantienen activas: el enlace al reflector y el enlace AllStar nodo-a-nodo.
- El enlace al reflector es automático. chan_svx_sat se reconecta solo (heartbeats TCP + UDP, backoff tras cualquier caída). Nada que configurar;
svxsat showvuelve aCONNECTEDen segundos tras cualquier corte. - ¿Mantener el nodo AllStar enlazado a un hub? Usa el connect permanente de app_rpt, que se restablece solo:
sudo asterisk -rx "rpt cmd 1999 ilink 13 403870" # 13 = permanent, transceive
Enlazar automáticamente al arrancar vía el stanza del nodo:
[1999](node-main) rxchannel = SVXSAT/1999 startup_macro = *3403870 ; auto-connect to 403870 (transceive) on startup
Cinturón y tirantes con cron (ilink 3 es idempotente — un no-op si ya está enlazado):
# keep node 1999 linked to 403870 every 2 minutes */2 * * * * /usr/sbin/asterisk -rx "rpt cmd 1999 ilink 3 403870" >/dev/null 2>&1
Extra: cambiar de talkgroup desde la radio (DTMF)
Puedes mover el nodo a otra TG en vivo — por RF con DTMF, protegido por un PIN — y volver. Útil para sacar un boletín/net en otra TG y luego regresar.
Patrón de marcación: *855 + PIN + acción. Pon los comandos en rpt.conf bajo [functions] (el PIN es el código de control — un PIN erróneo simplemente no hace nada). El PIN por defecto es 0000 — cámbialo antes de usarlo:
; /etc/asterisk/rpt.conf — base 855, PIN 0000 (CHANGE IT!) [functions] 85500001 = cmd,asterisk -rx "svxsat settg 403872 3149060" ; *855 0000 1 -> bulletin TG 85500002 = cmd,asterisk -rx "svxsat settg 403872 3149070" ; *855 0000 2 -> another TG 85500000 = cmd,asterisk -rx "svxsat revert 403872" ; *855 0000 0 -> default TG 85500009 = cmd,asterisk -rx "svxsat down 403872" ; *855 0000 9 -> link down 85500008 = cmd,asterisk -rx "svxsat up 403872" ; *855 0000 8 -> link up
Fija la TG por defecto y un timeout de auto-retorno en svx_sat.conf:
[403872] tg = 3149050 ; the DEFAULT TG (revert/up target) tg_timeout = 30 ; minutes on another TG before auto-revert (0 = off)
Una TG temporal siempre vuelve a la predeterminada en un reinicio, una reconexión o tras tg_timeout — así un cambio olvidado nunca deja el nodo varado.
Varios nodos en un login
Da a varias secciones el mismo login + password (y un tg cada una) y se multiplexan en un trunk de reflector — un handshake, un heartbeat — mientras cada una sigue apareciendo como su propio nodo con su indicativo y TG. Secciones con logins distintos abren trunks separados.
[403872] host = reflector.example.org login = SA7AUX-N ; SAME login -> shared trunk password = CHANGE_ME ; SAME secret callsign = SA7AUX-1 tg = 24016 </div> <div lang="en" dir="ltr" class="mw-content-ltr"> [403873] host = reflector.example.org login = SA7AUX-N ; SAME login -> same connection password = CHANGE_ME callsign = SA7AUX-2 tg = 24021 ; different TG per node
Resolución de problemas
| Síntoma | Comprobar |
|---|---|
svxsat show vacío / "No such command" / el nodo no tiene rxchannel |
¿Está load = chan_svx_sat.so activado dentro de [modules]? ¿Hiciste core restart now?
|
down en vez de CONNECTED |
¿Host/puerto accesible? ¿login/password correctos? Observa: sudo tail -f /var/log/asterisk/messages.log | grep -i svx
|
auth rejected: Invalid callsign |
El login debe ser un indicativo válido en mayúsculas, y la cuenta debe existir en el reflector. |
auth rejected: Access denied |
Contraseña incorrecta, o el login no está registrado en el reflector (SECRET_ ausente / reflector no reiniciado).
|
txframes sube pero nadie te oye |
¿El cliente que escucha está seleccionando/monitorizando de verdad la misma TG? |
Audio cortado al salir, starts sube muchos-por-intervención |
Pulsación parpadeando → sube tx_hold (p. ej. 400).
|
txbadsize sube |
app_rpt entrega tramas no-slin — revisa el camino de audio del nodo. |
| Carga pero rechaza ("compile-time options") | El paquete debe coincidir con la versión de asl3-asterisk instalada — instala el deb de tu SO exacto.
|
Revertir
- Restaura el
rxchannelantiguo (descoméntalo) y comentarxchannel = SVXSAT/.... - Comenta
load = chan_svx_sat.soenmodules.conf. sudo asterisk -rx "core restart now".
Eliminar por completo: sudo apt remove asl3-chan-svx-sat (añade --purge para quitar también la configuración de ejemplo y la línea de modules.conf).
Véase también
- Hamradio — todas las guías de voz digital y de gateway.
- Autor / informes de fallos: SA7AUX <bjorne@sa7aux.se>. GNU GPL v2.




