Jump to content

Hamradio/chan svx/it

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 and the translation is 77% complete.

Una guida pratica passo-passo per collegare un nodo AllStarLink 3 direttamente a un SVXReflector con chan_svx — installarlo, collegarlo e regolare bene l'audio. Nessuna conoscenza pregressa di SvxLink. Da copiare e incollare.

💡 In una frase: chan_svx è un driver di canale Asterisk che permette al tuo nodo AllStar di parlare Opus direttamente con un SVXReflector — così elimini il vecchio salto chan_usrp → svxlink e il tandem di vocoder in più.
⚠ Due driver gemelli — scegli quello giusto. chan_svx (questa pagina) si unisce al reflector come client SvxLink (un login = una TG). Il suo gemello chan_svx_sat si unisce come satellite/trunk e può trasportare più nodi/TG su un login. Se vuoi il trunk, leggi la guida di chan_svx_sat.
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.

Mi serve davvero?

  • Gestisci un nodo AllStarLink 3 (su un Raspberry Pi o x86) e lo vuoi su una talkgroup SVXReflector.
  • Oggi probabilmente lo colleghi con chan_usrp → svxlink. Funziona, ma transcodifica l'audio due volte e aggiunge una scatola da curare.
  • chan_svx sostituisce tutto quel salto con un driver. Il percorso audio diventa solo PCM ↔ Opus, una volta.

Se non vai a un SvxReflector — es. se colleghi solo AllStar-a-AllStar, o usi DMR/YSF — non ti serve. Vedi Hamradio per quelli.

Parole che vedrai (glossario in parole semplici)

Termine Cosa significa qui
AllStarLink 3 (ASL3) Il sistema di collegamento VoIP costruito su Asterisk. Il tuo nodo esegue asl3-asterisk.
app_rpt L'applicazione Asterisk che è il controllore del tuo ripetitore/nodo (COS, PTT, ID, link).
SVXReflector Un server che unisce molti client in stile SvxLink su talkgroup condivise. Il tuo nodo vi accede.
Talkgroup (TG) Un «canale» sul reflector. Trasmetti su una TG e senti chiunque altro vi sia.
Opus Il codec audio sulla linea tra il tuo nodo e il reflector. Una transcodifica, 8 kHz, frame da 20 ms.
Client chan_svx si unisce al reflector come un normale client SvxLink — un login, una TG, un stream.
Sezione Un [block] in svx.conf. Una sezione = un nodo = una TG.

Cosa ti serve prima di iniziare

💡 Spunta tutti e quattro. Se ne manca uno, sistemalo prima — senza di essi il ponte non può funzionare.
  1. Un nodo AllStarLink 3 funzionante. Controlla: asterisk -V mostra Asterisk 22.x+asl3-....
  2. Un SO a 64 bit. Debian 12 (bookworm) o 13 (trixie), su x86-64 o arm64 (Pi 3/4/5). Controlla: dpkg --print-architecture e . /etc/os-release; echo $VERSION_CODENAME. (Il Pi Zero 2 W non è supportato di proposito — calore + Wi-Fi.)
  3. Un login reflector tuo — un login + chiave di autenticazione dedicati, non condivisi con svxlink o un altro nodo. Condividerne uno butta fuori l'altro. I login SVXReflector sono nominativi in maiuscolo.
  4. Il reflector è raggiungibile. Controlla: nc -vz REFLECTOR_HOST 5300.

L'esempio usato in tutta la guida è un nodo reale: nodo AllStar 1999 collegato a un reflector su 172.16.1.1:5300, talkgroup 24016. Sostituisci il tuo host / login / TG ovunque li vedi.

Come si incastra tutto

Due piccoli file di configurazione sul nodo, e un login che il reflector riconosce. Ecco tutto il cablaggio:

rpt.conf points at a section in svx.conf, which logs in to the reflector as a client.
rpt.conf → a section in svx.conf → a login the reflector recognises.

Passo 1 — Installare il pacchetto

Scegli il .deb che corrisponde al tuo SO e architettura:

SO / arch Pacchetto
trixie x86-64 asl3-chan-svx_<ver>~trixie_amd64.deb
trixie arm64 (Pi) asl3-chan-svx_<ver>~trixie_arm64.deb
bookworm x86-64 asl3-chan-svx_<ver>~bookworm_amd64.deb
bookworm arm64 (Pi) asl3-chan-svx_<ver>~bookworm_arm64.deb
sudo apt install ./asl3-chan-svx_<ver>~<os>_<arch>.deb

Le dipendenze (asl3-asterisk, libopus0, libssl3) si risolvono da sole. Il pacchetto installa il modulo, una configurazione d'esempio, questo tipo di documentazione in /usr/share/doc/asl3-chan-svx/ e aggiunge una riga load commentata in modules.conf da attivare al Passo 4. Non si carica né si connette ancora nulla.

Passo 2 — Creare la configurazione del reflector

Copia l'esempio e aprilo per modificarlo:

sudo cp /etc/asterisk/svx.conf.sample /etc/asterisk/svx.conf
sudo chown asterisk:asterisk /etc/asterisk/svx.conf
sudo chmod 640 /etc/asterisk/svx.conf      # it holds your reflector password
sudoedit /etc/asterisk/svx.conf

Fallo così (dai alla sezione il nome del nodo — ordinato e inequivocabile):

[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)
💡 Login + password devono corrispondere a ciò che il reflector si aspetta per questo login. Usa un login dedicato — un nominativo in maiuscolo — che nessun altro client (svxlink, un altro nodo) usi già; condividerne uno butta fuori l'altro.

Il callsign è mostrato come nome del nodo se è libero sul reflector in quel momento; in caso di collisione (o se lasciato vuoto) ripiega su ASL-<section> (es. ASL-1999), rivalutato automaticamente man mano che i nomi si liberano.

Passo 3 — Puntare il nodo su di esso

In /etc/asterisk/rpt.conf, nello stanza del tuo nodo, commenta il vecchio rxchannel — non cancellarlo mai — e aggiungi la riga SVX:

[1999](node-main)
; rxchannel = USRP/127.0.0.1:4001:4002   ; old bridge, kept so you can revert
rxchannel = SVX/1999                  ; chan_svx -> section [1999]
💡 Vuoi che sopravviva agli aggiornamenti del pacchetto? Metti lo stanza del nodo in /etc/asterisk/custom/rpt.conf — ASL3 include quel file e non lo sovrascrive mai. Usa la modifica diretta sopra per un cambio rapido; usa custom/ se vuoi che la tua configurazione sopravviva pulita agli aggiornamenti di asl3-asterisk.

Passo 4 — Attivare il modulo

ASL3 ha autoload = no, quindi il modulo va elencato a mano. Il pacchetto ha aggiunto una riga commentata — attivala. Deve stare dentro la sezione [modules] (una riga load dopo una sezione successiva viene ignorata in silenzio):

sudo sed -i 's/^; *load = chan_svx.so/load = chan_svx.so/' /etc/asterisk/modules.conf
grep -n '^load = chan_svx.so' /etc/asterisk/modules.conf     # confirm it's active

Passo 5 — Applicare e verificare

Un cambio di rxchannel richiede la reinizializzazione di app_rpt, quindi riavvia Asterisk e poi controlla:

sudo asterisk -rx "core restart now"
sudo asterisk -rx "svx show"

Un ponte sano appare così — CONNECTED significa che hai finito il collegamento di base:

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

Premi sul nodo → txframes sale e il reflector apre il talker sulla tua TG. Quando un altro parla sulla TG → rxframes sale. Fatto. Il resto della pagina sono regolazioni ed extra.

Regolare bene l'audio

Qui è dove si blocca la maggior parte, quindi vai piano. Solo gli stadi gialli hanno manopole — tutto ciò che è grigio è automatico.

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

Tutto questo vive nella sezione del nodo in svx.conf. Dopo ogni modifica, esegui sudo asterisk -rx "core restart now".

Le quattro manopole audio

Impostazione Default Cosa fa
tx_gain 0 Preamplificazione in TX (nodo → reflector), in dB. Alza se altri dicono che sei basso; abbassa se dicono che saturi.
rx_gain 0 Preamplificazione in RX (reflector → nodo), in dB. Alza se l'audio del reflector è troppo basso sul tuo ripetitore.
tx_agc / rx_agc no Controllo automatico di guadagno. Attivalo per uniformare stazioni forti/deboli. yes o no.
bitrate 16000 Bitrate Opus in bit/s. Lascialo salvo un motivo.
💡 Un limiter è sempre attivo in entrambe le direzioni — evita la saturazione anche se alzi troppo il guadagno. Opus inband-FEC + PLC sono anch'essi sempre attivi: un pacchetto perso viene ricostruito dal FEC del successivo, e un underrun viene nascosto invece di produrre un clic. Niente di tutto ciò lo configuri.

«Il mio audio è X → fai Y»

Sintomo Soluzione
Altri dicono che sei troppo basso Alza tx_gain di pochi dB per volta (es. 3, poi 6).
Altri dicono che saturi / distorci Abbassa tx_gain di un po'. Il limiter protegge il picco, ma un ingresso pulito è meglio.
Audio del reflector troppo basso sul tuo ripetitore Alza rx_gain di pochi dB.
Stazioni forti e deboli molto disomogenee Attiva rx_agc = yes (e/o tx_agc = yes).
Audio spezzettato in uscita Vedi la correzione di tx_hold sotto.
Crepitii/cadute che entrano su una linea scarsa Alza jitter (vedi sotto). FEC/PLC già aiutano; questo dà margine.

Altre due manopole: tx_hold e jitter

Impostazione Default Cosa fa
tx_hold 250 Tempo di tenuta TalkerStop, in ms. Un breve rilascio/ripremere a metà intervento (sfarfallio COS, hangtime del link) chiuderebbe e riaprirebbe il talker del reflector spezzando l'audio. La tenuta lo mantiene aperto durante il vuoto. 0 = ferma subito al rilascio.
jitter 40 Precarica del buffer di jitter, in ms. Più alto = più fluido su una linea scarsa/lunga, ma più latenza. 0 = minimo (bene su una LAN pulita). Max 500.

Se l'audio in uscita è spezzato: esegui svx show e osserva starts/stops. Uno ciascuno per intervento è sano. Molti per intervento significa che la tua pressione sfarfalla — alza tx_hold (prova 400).

Opzionale: ascoltare talkgroup extra

monitor = 24020, 9990     ; extra TGs you HEAR (RX only); TX still goes to 'tg'

Tenerlo attivo — per sempre

Due cose indipendenti restano attive: il link al reflector e il link AllStar nodo-a-nodo.

  • Il link al reflector è automatico. chan_svx si riconnette da solo (heartbeat TCP + UDP, backoff dopo ogni caduta). Niente da configurare; svx show torna a CONNECTED in pochi secondi dopo ogni interruzione.
  • Vuoi tenere il nodo AllStar collegato a un hub? Usa il connect permanente di app_rpt, che si ristabilisce da solo:
sudo asterisk -rx "rpt cmd 1999 ilink 13 403870"   # 13 = permanent, transceive

Collegati automaticamente all'avvio tramite lo stanza del nodo:

[1999](node-main)
rxchannel = SVX/1999
startup_macro = *3403870     ; auto-connect to 403870 (transceive) on startup

Cintura e bretelle con cron (ilink 3 è idempotente — un no-op se già collegato):

# 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: cambiare talkgroup dalla radio (DTMF)

Puoi spostare il nodo su un'altra TG in diretta — via RF con DTMF, protetto da un PIN — e poi tornare. Comodo per diffondere un bollettino/net su un'altra TG e poi rientrare.

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

Schema di composizione: *855 + PIN + azione. Metti i comandi in rpt.conf sotto [functions] (il PIN è il codice di controllo — un PIN errato semplicemente non fa nulla). Il PIN di default è 0000 — cambialo prima dell'uso:

; /etc/asterisk/rpt.conf  —  base 855, PIN 0000 (CHANGE IT!)
[functions]
85500001 = cmd,asterisk -rx "svx settg 403872 3149060"   ; *855 0000 1 -> bulletin TG
85500002 = cmd,asterisk -rx "svx settg 403872 3149070"   ; *855 0000 2 -> another TG
85500000 = cmd,asterisk -rx "svx revert 403872"          ; *855 0000 0 -> default TG
85500009 = cmd,asterisk -rx "svx down   403872"          ; *855 0000 9 -> link down
85500008 = cmd,asterisk -rx "svx up     403872"          ; *855 0000 8 -> link up

Imposta la TG predefinita e un timeout di auto-ritorno in svx.conf:

[403872]
tg         = 3149050     ; the DEFAULT TG (revert/up target)
tg_timeout = 30          ; minutes on another TG before auto-revert (0 = off)

Una TG temporanea torna sempre a quella predefinita a un riavvio, una riconnessione o dopo tg_timeout — così un cambio dimenticato non lascia mai il nodo bloccato.

Più nodi o TG? Usa chan_svx_sat

chan_svx è un login = una TG = un stream — un client di reflector per sezione. Se ti servono più nodi / talkgroup su un unico login di reflector (un trunk condiviso), è esattamente ciò che fa il driver gemello chan_svx_sat — si unisce come satellite/trunk del reflector invece che come client. Vedi la guida di chan_svx_sat.

Risoluzione dei problemi

Sintomo Controlla
svx show vuoto / "No such command" / il nodo non ha rxchannel load = chan_svx.so è attivato dentro [modules]? Hai fatto core restart now?
down invece di CONNECTED Host/porta raggiungibili? login/password corretti? Osserva: sudo tail -f /var/log/asterisk/messages.log | grep -i svx
auth rejected: Invalid callsign Il login dev'essere un nominativo valido in maiuscolo, e l'account deve esistere sul reflector.
auth rejected: Access denied Password errata, o il login non è registrato sul reflector.
txframes sale ma nessuno ti sente Il client in ascolto sta davvero selezionando/monitorando la stessa TG?
Audio spezzato in uscita, starts sale molti-per-intervento Pressione che sfarfalla → alza tx_hold (es. 400).
txbadsize sale app_rpt fornisce frame non-slin — controlla il percorso audio del nodo.
Carica ma rifiuta ("compile-time options") Il pacchetto deve corrispondere alla versione di asl3-asterisk installata — installa il deb per il tuo SO esatto.

Ripristinare

  1. Ripristina il vecchio rxchannel (togli il commento) e commenta rxchannel = SVX/....
  2. Commenta load = chan_svx.so in modules.conf.
  3. sudo asterisk -rx "core restart now".

Rimuovere del tutto: sudo apt remove asl3-chan-svx (aggiungi --purge per togliere anche la configurazione d'esempio e la riga in modules.conf).

Vedi anche

  • Hamradio — tutte le guide di voce digitale e gateway.
  • Autore / segnalazioni bug: SA7AUX <bjorne@sa7aux.se>. GNU GPL v2.