Jump to content

Hamradio/chan svx sat/es

From MediaWiki For Hamradio Analog/Digital and Debian v13 software/Raspberry PI v3/4/5 howto
This page is a translated version of the page Hamradio/chan svx sat and the translation is 75% complete.

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.

💡 En una frase: 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.
Before: app_rpt via USRP and svxlink to the reflector. After: app_rpt straight to the reflector over one Opus stream.
One Opus hop instead of two transcodes. Less latency, cleaner audio.

¿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_sat reemplaza 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

💡 Marca las cuatro. Si falta una, arréglala primero — sin ellas el puente no puede funcionar.
  1. Un nodo AllStarLink 3 funcional. Comprueba: asterisk -V muestra Asterisk 22.x+asl3-....
  2. Un SO de 64 bits. Debian 12 (bookworm) o 13 (trixie), en x86-64 o arm64 (Pi 3/4/5). Comprueba: dpkg --print-architecture y . /etc/os-release; echo $VERSION_CODENAME. (La Pi Zero 2 W no se admite a propósito — calor + Wi-Fi.)
  3. 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.
  4. 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:

rpt.conf points at a section in svx_sat.conf, which logs in to the reflector whose SECRET must match.
rpt.conf → a section in svx_sat.conf → a login the reflector recognises.

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)
💡 El login + contraseña deben coincidir con el reflector. En la sección [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]
💡 ¿Quieres que sobreviva a las actualizaciones del paquete? Pon el stanza del nodo en /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:

Annotated svxsat show output explaining CONNECTED, txframes, rxframes, starts/stops, fec and plc.

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.

The TX and RX audio chains showing which stages are tunable (gain, AGC, jitter, tx_hold) and which are automatic (limiter, Opus FEC/PLC).

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.
💡 Un limitador está siempre activo en ambos sentidos — evita la saturación aunque subas demasiado la ganancia. Opus inband-FEC + PLC también están siempre activos: un paquete perdido se reconstruye con el FEC del siguiente, y un underrun se oculta en vez de chasquear. Nada de eso lo configuras.

«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 show vuelve a CONNECTED en 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.

DTMF dial pattern star-855 plus PIN plus action digit, with a table of actions and the control flow.

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

  1. Restaura el rxchannel antiguo (descoméntalo) y comenta rxchannel = SVXSAT/....
  2. Comenta load = chan_svx_sat.so en modules.conf.
  3. 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.