Hamradio/chan svx/it
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.
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ù.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.
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_svxsostituisce 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
- Un nodo AllStarLink 3 funzionante. Controlla:
asterisk -VmostraAsterisk 22.x+asl3-.... - Un SO a 64 bit. Debian 12 (bookworm) o 13 (trixie), su x86-64 o arm64 (Pi 3/4/5). Controlla:
dpkg --print-architecturee. /etc/os-release; echo $VERSION_CODENAME. (Il Pi Zero 2 W non è supportato di proposito — calore + Wi-Fi.) - 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.
- 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:
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)
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]
/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:
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.
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. |
«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 showtorna aCONNECTEDin 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.
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
- Ripristina il vecchio
rxchannel(togli il commento) e commentarxchannel = SVX/.... - Commenta
load = chan_svx.soinmodules.conf. 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.




