Jump to content

Hamradio/chan svx/sv

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.

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.

💡 I en mening: 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.
⚠ Två syskondrivrutiner — välj rätt. 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.
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.

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_svx ersä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

💡 Bocka av alla fyra. Saknas en, fixa den först — bryggan kan inte fungera utan dem.
  1. En fungerande AllStarLink 3-nod. Kolla: asterisk -V visar Asterisk 22.x+asl3-....
  2. Ett 64-bitars OS. Debian 12 (bookworm) eller 13 (trixie), på x86-64 eller arm64 (Pi 3/4/5). Kolla: dpkg --print-architecture och . /etc/os-release; echo $VERSION_CODENAME. (Pi Zero 2 W stöds medvetet inte — värme + Wi-Fi.)
  3. 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.
  4. 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:

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.

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)
💡 Login + lösenord måste matcha vad reflektorn förväntar sig för den här login:en. Använd en dedikerad login — en versal anropssignal — som ingen annan klient (svxlink, en annan nod) redan använder; delar du en blir den andra utsparkad.

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]
💡 Vill du att den ska överleva paketuppdateringar? Lägg nod-stanzan i /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:

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

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.

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

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.
💡 En limiter är alltid på i båda riktningarna — den hindrar ljudet från att klippa även om du höjer förstärkningen för mycket. Opus inband-FEC + PLC är alltid på också: ett förlorat paket återskapas från nästa pakets FEC, och en underkörning döljs istället för att klicka. Du konfigurerar inget av det.

"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 show går tillbaka till CONNECTED inom 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å.

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

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

  1. Återställ den gamla rxchannel (avkommentera den) och kommentera rxchannel = SVX/....
  2. Kommentera load = chan_svx.so i modules.conf.
  3. 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.