Hamradio/chan svx/sv
En handfast steg-för-steg-guide till att brygga en AllStarLink 3-nod direkt till en SVXReflector med chan_svx — installera, få igång anslutningen och få ljudet rätt. Ingen tidigare SvxLink-kunskap behövs. Klipp-och-klistra-vänlig.
chan_svx är en Asterisk-kanaldrivrutin som låter din AllStar-nod prata Opus direkt med en SVXReflector — så du slipper det gamla chan_usrp → svxlink-hoppet och den extra vocoder-tandemen som följde med.chan_svx (den här sidan) ansluter till reflektorn som en SvxLink-klient (en login = en TG). Syskonet chan_svx_sat ansluter som en satellit/trunk och kan bära flera noder/TG på en login. Vill du ha trunken, läs chan_svx_sat-guiden i stället.
Behöver jag ens det här?
- Du kör en AllStarLink 3-nod (på en Raspberry Pi eller x86) och vill ha den på en SVXReflector-talgrupp.
- Idag bryggar du den förmodligen med
chan_usrp→svxlink. Det fungerar, men det transkodar ljudet två gånger och lägger till en låda att pyssla om. chan_svxersätter hela det hoppet med en drivrutin. Ljudvägen blir bara PCM ↔ Opus, en gång.
Ska du inte till en SvxReflector — t.ex. om du bara länkar AllStar-till-AllStar, eller kör DMR/YSF — behöver du inte det här. Se Hamradio för dem.
Ord du kommer att se (ordlista på vanlig svenska)
| Term | Betyder här |
|---|---|
| AllStarLink 3 (ASL3) | VoIP-länksystemet byggt på Asterisk. Din nod kör asl3-asterisk.
|
| app_rpt | Asterisk-applikationen som är din repeater-/nodstyrning (COS, PTT, ID:n, länkar). |
| SVXReflector | En server som samlar många SvxLink-liknande klienter på delade talgrupper. Din nod loggar in på den. |
| Talgrupp (TG) | En "kanal" på reflektorn. Du sänder på en TG och hör alla andra på den. |
| Opus | Ljudkodeken på tråden mellan din nod och reflektorn. En transkodning, 8 kHz, 20 ms-ramar. |
| Klient | chan_svx ansluter till reflektorn som en vanlig SvxLink-klient — en login, en TG, en ström. |
| Sektion | Ett [block] i svx.conf. En sektion = en nod = en TG.
|
Vad du behöver innan du börjar
- En fungerande AllStarLink 3-nod. Kolla:
asterisk -VvisarAsterisk 22.x+asl3-.... - Ett 64-bitars OS. Debian 12 (bookworm) eller 13 (trixie), på x86-64 eller arm64 (Pi 3/4/5). Kolla:
dpkg --print-architectureoch. /etc/os-release; echo $VERSION_CODENAME. (Pi Zero 2 W stöds medvetet inte — värme + Wi-Fi.) - En egen reflektor-login — en dedikerad login + auth-nyckel, inte delad med svxlink eller en annan nod. Delar du en blir den andra utsparkad. SvxReflector-loginer är versala anropssignaler.
- Reflektorn är nåbar. Kolla:
nc -vz REFLECTOR_HOST 5300.
Det genomgående exemplet nedan är en riktig nod: AllStar-nod 1999 som bryggar till en reflektor på 172.16.1.1:5300, talgrupp 24016. Byt ut mot ditt eget host / login / TG överallt där du ser dem.
Hur allt hänger ihop
Två små configfiler på noden, och en login som reflektorn känner igen. Det är hela kopplingen:
Steg 1 — Installera paketet
Välj den .deb som matchar ditt OS och arkitektur:
| OS / ark | Paket |
|---|---|
| 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
Beroenden (asl3-asterisk, libopus0, libssl3) löses automatiskt. Paketet installerar modulen, en exempel-config, den här sortens dokumentation under /usr/share/doc/asl3-chan-svx/, och lägger till en bortkommenterad load-rad i modules.conf som du aktiverar i Steg 4. Inget laddas eller ansluter än.
Steg 2 — Skapa reflektor-configen
Kopiera exemplet och öppna det för redigering:
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
Få den att se ut så här (namnge sektionen efter noden — prydligt och otvetydigt):
[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)
callsign visas som nodens namn om den är ledig på reflektorn just nu; vid en krock (eller om den lämnas tom) faller den tillbaka till ASL-<section> (t.ex. ASL-1999), omprövat automatiskt när namn blir lediga.
Steg 3 — Peka noden mot den
I /etc/asterisk/rpt.conf, i nodens stanza, kommentera bort den gamla rxchannel — radera den aldrig — och lägg till SVX-raden:
[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 i stället — ASL3 inkluderar den filen och skriver aldrig över den. Använd den direkta redigeringen ovan för en snabb ändring; använd custom/ om du vill att din config ska överleva asl3-asterisk-uppdateringar rent.
Steg 4 — Aktivera modulen
ASL3 har autoload = no, så modulen måste listas för hand. Paketet la till en bortkommenterad rad — slå på den. Den måste ligga inuti [modules]-sektionen (en load-rad efter en senare sektion ignoreras tyst):
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
Steg 5 — Tillämpa och verifiera
En rxchannel-ändring kräver att app_rpt re-initieras, så starta om Asterisk och kolla sedan:
sudo asterisk -rx "core restart now" sudo asterisk -rx "svx show"
En frisk brygga ser ut så här — CONNECTED betyder att du är klar med grundkopplingen:
Nyckla upp på noden → txframes stiger och reflektorn öppnar talaren på din TG. När någon annan pratar på TG:n → rxframes stiger. Klart. Resten av sidan är trimning och extrafunktioner.
Få ljudet rätt
Det här är där de flesta kör fast, så ta det lugnt. Bara de gula stegen har rattar — allt grått är automatiskt.
Alla dessa bor i nodens sektion i svx.conf. När du ändrat någon av dem, kör sudo asterisk -rx "core restart now".
De fyra ljudrattarna
| Inställning | Standard | Vad den gör |
|---|---|---|
tx_gain |
0 |
Förförstärkning på TX (nod → reflektor), i dB. Höj om andra säger att du är svag; sänk om de säger att du klipper. |
rx_gain |
0 |
Förförstärkning på RX (reflektor → nod), i dB. Höj om reflektor-ljudet är för svagt på din repeater. |
tx_agc / rx_agc |
no |
Automatisk förstärkningsreglering. Slå på för att jämna ut starka/svaga stationer. yes eller no.
|
bitrate |
16000 |
Opus-bitrate i bit/s. Lämna den om du inte har skäl. |
"Mitt ljud är X → gör Y"
| Symptom | Åtgärd |
|---|---|
| Andra säger att du är för svag | Höj tx_gain några dB i taget (t.ex. 3, sedan 6).
|
| Andra säger att du klipper / distar | Sänk tx_gain ett snäpp. Limitern skyddar toppen, men ren insignal är bättre.
|
| Reflektor-ljudet för svagt på din repeater | Höj rx_gain några dB.
|
| Starka och svaga stationer är vilt ojämna | Slå på rx_agc = yes (och/eller tx_agc = yes).
|
| Hackigt / avhugget ljud som går ut | Se tx_hold-fixen nedan. |
| Knaster/bortfall som kommer in på en dålig länk | Höj jitter (se nedan). FEC/PLC hjälper redan; detta ger marginal.
|
Två rattar till: tx_hold och jitter
| Inställning | Standard | Vad den gör |
|---|---|---|
tx_hold |
250 |
TalkerStop-hålltid, i ms. En kort av-/på-nyckling mitt i en över (COS-flimmer, länk-hängtid) skulle annars stänga och öppna reflektor-talaren och hugga av ljudet. Hålltiden håller den öppen över glappet. 0 = sluta direkt vid avnyckling.
|
jitter |
40 |
Jitterbuffert-förfyllnad, i ms. Högre = jämnare på en dålig/lång länk, men mer latens. 0 = minimal (fint på ett rent LAN). Max 500.
|
Om ljudet som går ut hackar: kör svx show och håll koll på starts/stops. En vardera per över är friskt. Många per över betyder att din nyckling fladdrar — höj tx_hold (prova 400).
Valfritt: lyssna på extra talgrupper
monitor = 24020, 9990 ; extra TGs you HEAR (RX only); TX still goes to 'tg'
Håll den uppe — för alltid
Två oberoende saker hålls uppe: reflektor-länken och AllStar nod-till-nod-länken.
- Reflektor-länken är automatisk. chan_svx återansluter av sig själv (TCP + UDP-heartbeats, backoff efter varje tapp). Inget att konfigurera;
svx showgår tillbaka tillCONNECTEDinom sekunder efter varje avbrott. - Behöver AllStar-noden förbli länkad till en hub? Använd app_rpt:s permanenta connect, som återupprättar sig själv:
sudo asterisk -rx "rpt cmd 1999 ilink 13 403870" # 13 = permanent, transceive
Länka automatiskt vid boot via nod-stanzan:
[1999](node-main) rxchannel = SVX/1999 startup_macro = *3403870 ; auto-connect to 403870 (transceive) on startup
Hängslen och livrem via cron (ilink 3 är idempotent — en no-op om redan länkad):
# keep node 1999 linked to 403870 every 2 minutes */2 * * * * /usr/sbin/asterisk -rx "rpt cmd 1999 ilink 3 403870" >/dev/null 2>&1
Bonus: byt talgrupp från radion (DTMF)
Du kan flytta noden till en annan TG live — över RF med DTMF, skyddat av en PIN — och sedan hoppa tillbaka. Praktiskt för att skicka ut ett bulletin/nät på en annan TG och sedan återgå.
Slagmönster: *855 + PIN + åtgärd. Lägg kommandona i rpt.conf under [functions] (PIN är kontrollkoden — en fel PIN gör helt enkelt ingenting). Standard-PIN är 0000 — byt den före användning:
; /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
Ställ in standard-TG och en auto-återgångs-timeout i svx.conf:
[403872] tg = 3149050 ; the DEFAULT TG (revert/up target) tg_timeout = 30 ; minutes on another TG before auto-revert (0 = off)
En tillfällig TG återgår alltid till standard vid en omstart, en återanslutning, eller efter tg_timeout — så en bortglömd växling strandsätter aldrig noden.
Flera noder eller TG:er? Använd chan_svx_sat
chan_svx är en login = en TG = en ström — en reflektor-klient per sektion. Behöver du flera noder / talgrupper över en enda reflektor-login (en delad trunk), är det precis vad syskondrivrutinen chan_svx_sat gör — den ansluter som en reflektor-satellit/trunk i stället för en klient. Se chan_svx_sat-guiden.
Felsökning
| Symptom | Kolla |
|---|---|
svx show tom / "No such command" / noden har ingen rxchannel |
Är load = chan_svx.so aktiverad inuti [modules]? Körde du core restart now?
|
down i stället för CONNECTED |
Host/port nåbar? login/lösenord rätt? Titta: sudo tail -f /var/log/asterisk/messages.log | grep -i svx
|
auth rejected: Invalid callsign |
Login måste vara en giltig versal anropssignal, och kontot måste finnas på reflektorn. |
auth rejected: Access denied |
Fel lösenord, eller så är login inte registrerad på reflektorn. |
txframes stiger men ingen hör dig |
Väljer/monitorerar den lyssnande klienten verkligen samma TG? |
Hackigt ljud ut, starts stiger många-per-över |
Av-/på-nyckling fladdrar → höj tx_hold (t.ex. 400).
|
txbadsize stiger |
app_rpt matar icke-slin-ramar — kolla nodens ljudväg. |
| Laddar men vägrar ("compile-time options") | Paketet måste matcha den installerade asl3-asterisk-versionen — installera deb:en för ditt exakta OS.
|
Återställa
- Återställ den gamla
rxchannel(avkommentera den) och kommenterarxchannel = SVX/.... - Kommentera
load = chan_svx.soimodules.conf. sudo asterisk -rx "core restart now".
Ta bort helt: sudo apt remove asl3-chan-svx (lägg till --purge för att även ta bort exempel-configen och modules.conf-raden).
Se även
- Hamradio — alla howto:er för digital röst och gateways.
- Författare / buggrapporter: SA7AUX <bjorne@sa7aux.se>. GNU GPL v2.




