Jump to content

Hamradio/chan svx/pl

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.

Praktyczny przewodnik krok po kroku, jak podłączyć węzeł AllStarLink 3 bezpośrednio do SVXReflectora za pomocą chan_svx — instalacja, połączenie i poprawne ustawienie audio. Bez wcześniejszej znajomości SvxLink. Do skopiowania i wklejenia.

💡 W jednym zdaniu: chan_svx to driver kanału Asterisk, który pozwala twojemu węzłowi AllStar mówić w Opusie bezpośrednio z SVXReflectorem — eliminujesz dawny przeskok chan_usrp → svxlink i dodatkowy tandem vocoderów.
⚠ Dwa bliźniacze drivery — wybierz właściwy. chan_svx (ta strona) dołącza do reflektora jako klient SvxLink (jeden login = jedna TG). Jego bliźniak chan_svx_sat dołącza jako satelita/trunk i może przenosić wiele węzłów/TG na jednym loginie. Jeśli chcesz trunk, przeczytaj przewodnik 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.

Czy naprawdę tego potrzebuję?

  • Prowadzisz węzeł AllStarLink 3 (na Raspberry Pi lub x86) i chcesz go na talkgrupie SVXReflector.
  • Dziś pewnie łączysz go przez chan_usrp → svxlink. Działa, ale transkoduje audio dwukrotnie i dokłada kolejne pudełko do pilnowania.
  • chan_svx zastępuje cały ten przeskok jednym driverem. Tor audio staje się tylko PCM ↔ Opus, raz.

Jeśli nie idziesz do SvxReflectora — np. łączysz tylko AllStar-do-AllStar albo używasz DMR/YSF — nie potrzebujesz tego. Zobacz Hamradio dla tamtych.

Słowa, które zobaczysz (słowniczek prostym językiem)

Termin Co tu znaczy
AllStarLink 3 (ASL3) System linkowania VoIP zbudowany na Asterisku. Twój węzeł uruchamia asl3-asterisk.
app_rpt Aplikacja Asteriska, która jest kontrolerem twojego przemiennika/węzła (COS, PTT, ID, linki).
SVXReflector Serwer łączący wielu klientów w stylu SvxLink na wspólnych talkgrupach. Twój węzeł się do niego loguje.
Talkgrupa (TG) „Kanał” na reflektorze. Nadajesz na TG i słyszysz każdego, kto też tam jest.
Opus Kodek audio na linii między twoim węzłem a reflektorem. Jedna transkodycja, 8 kHz, ramki 20 ms.
Klient chan_svx dołącza do reflektora jako zwykły klient SvxLink — jeden login, jedna TG, jeden strumień.
Sekcja Blok [block] w svx.conf. Jedna sekcja = jeden węzeł = jedna TG.

Czego potrzebujesz, zanim zaczniesz

💡 Odhacz wszystkie cztery. Jeśli jednego brakuje, napraw to najpierw — bez nich most nie zadziała.
  1. Działający węzeł AllStarLink 3. Sprawdź: asterisk -V pokazuje Asterisk 22.x+asl3-....
  2. System 64-bitowy. Debian 12 (bookworm) lub 13 (trixie), na x86-64 albo arm64 (Pi 3/4/5). Sprawdź: dpkg --print-architecture i . /etc/os-release; echo $VERSION_CODENAME. (Pi Zero 2 W celowo nie jest wspierany — ciepło + Wi-Fi.)
  3. Własny login do reflektora — dedykowany login + klucz autoryzacji, nie współdzielony z svxlink ani innym węzłem. Dzielenie jednego wyrzuca drugiego. Loginy SVXReflector to znaki wielkimi literami.
  4. Reflektor jest osiągalny. Sprawdź: nc -vz REFLECTOR_HOST 5300.

Przykład używany w całym przewodniku to prawdziwy węzeł: węzeł AllStar 1999 połączony z reflektorem na 172.16.1.1:5300, talkgrupa 24016. Wszędzie, gdzie je widzisz, wstaw swój host / login / TG.

Jak to się składa w całość

Dwa małe pliki konfiguracyjne na węźle i login, który reflektor rozpoznaje. Oto całe okablowanie:

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.

Krok 1 — Zainstaluj pakiet

Wybierz .deb pasujący do twojego systemu i architektury:

System / arch Pakiet
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

Zależności (asl3-asterisk, libopus0, libssl3) rozwiążą się same. Pakiet instaluje moduł, przykładową konfigurację, tę dokumentację w /usr/share/doc/asl3-chan-svx/ i dodaje zakomentowaną linię load w modules.conf do włączenia w Kroku 4. Nic jeszcze się nie ładuje ani nie łączy.

Krok 2 — Utwórz konfigurację reflektora

Skopiuj przykład i otwórz do edycji:

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

Zrób to tak (nadaj sekcji nazwę węzła — schludnie i jednoznacznie):

[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 + hasło muszą pasować do tego, czego reflektor oczekuje dla tego loginu. Użyj dedykowanego loginu — znaku wielkimi literami — którego żaden inny klient (svxlink, inny węzeł) jeszcze nie używa; dzielenie jednego wyrzuca drugiego.

callsign jest pokazywany jako nazwa węzła, jeśli jest wolny na reflektorze w danym momencie; przy kolizji (lub gdy pusty) używa zapasowo ASL-<section> (np. ASL-1999), ponownie oceniane automatycznie, w miarę jak nazwy się zwalniają.

Krok 3 — Skieruj na niego węzeł

W /etc/asterisk/rpt.conf, w stanzie twojego węzła, zakomentuj stary rxchannel — nigdy go nie kasuj — i dodaj linię 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]
💡 Chcesz, by przetrwało aktualizacje pakietu? Umieść stanzę węzła w /etc/asterisk/custom/rpt.conf — ASL3 dołącza ten plik i nigdy go nie nadpisuje. Edytuj bezpośrednio jak wyżej dla szybkiej zmiany; użyj custom/, jeśli chcesz, by twoja konfiguracja przetrwała czysto aktualizacje asl3-asterisk.

Krok 4 — Włącz moduł

ASL3 ma autoload = no, więc moduł trzeba wypisać ręcznie. Pakiet dodał zakomentowaną linię — włącz ją. Musi być wewnątrz sekcji [modules] (linia load po kolejnej sekcji jest po cichu ignorowana):

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

Krok 5 — Zastosuj i sprawdź

Zmiana rxchannel wymaga reinicjalizacji app_rpt, więc zrestartuj Asteriska, a potem sprawdź:

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

Zdrowy most wygląda tak — CONNECTED znaczy, że podstawowe połączenie masz gotowe:

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

Naciśnij PTT na węźle → txframes rośnie, a reflektor otwiera talkera na twojej TG. Gdy ktoś inny mówi na TG → rxframes rośnie. Gotowe. Reszta strony to regulacje i dodatki.

Ustaw audio poprawnie

Tu najwięcej osób się zacina, więc nie spiesz się. Tylko żółte stopnie mają pokrętła — wszystko szare jest automatyczne.

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

To wszystko żyje w sekcji węzła w svx.conf. Po każdej zmianie uruchom sudo asterisk -rx "core restart now".

Cztery pokrętła audio

Ustawienie Domyślnie Co robi
tx_gain 0 Przedwzmocnienie w TX (węzeł → reflektor), w dB. Podnieś, jeśli inni mówią, że jesteś cichy; obniż, jeśli mówią, że przesterowujesz.
rx_gain 0 Przedwzmocnienie w RX (reflektor → węzeł), w dB. Podnieś, jeśli audio reflektora jest za ciche na twoim przemienniku.
tx_agc / rx_agc no Automatyczna regulacja wzmocnienia. Włącz, by wyrównać silne/słabe stacje. yes lub no.
bitrate 16000 Bitrate Opus w bit/s. Zostaw, jeśli nie masz powodu.
💡 Limiter jest zawsze aktywny w obu kierunkach — chroni przed przesterowaniem, nawet jeśli przesadzisz ze wzmocnieniem. Opus inband-FEC + PLC też są zawsze aktywne: zgubiony pakiet jest odtwarzany z FEC następnego, a niedobór buforu jest maskowany zamiast dawać kliknięcie. Niczego z tego nie konfigurujesz.

„Moje audio jest X → zrób Y”

Objaw Rozwiązanie
Inni mówią, że jesteś za cichy Podnieś tx_gain po kilka dB naraz (np. 3, potem 6).
Inni mówią, że przesterowujesz / zniekształcasz Obniż tx_gain odrobinę. Limiter chroni szczyt, ale czyste wejście jest lepsze.
Audio reflektora za ciche na twoim przemienniku Podnieś rx_gain o kilka dB.
Silne i słabe stacje bardzo nierówne Włącz rx_agc = yes (i/lub tx_agc = yes).
Audio poszarpane na wyjściu Zobacz poprawkę tx_hold niżej.
Trzaski/urwania wchodzące na słabej linii Podnieś jitter (zobacz niżej). FEC/PLC już pomagają; to daje zapas.

Dwa kolejne pokrętła: tx_hold i jitter

Ustawienie Domyślnie Co robi
tx_hold 250 Czas przytrzymania TalkerStop, w ms. Krótkie puszczenie/wciśnięcie w środku wypowiedzi (migotanie COS, hangtime linku) zamknęłoby i otworzyło ponownie talkera reflektora, szarpiąc audio. Przytrzymanie utrzymuje go otwartym przez lukę. 0 = zatrzymaj od razu po puszczeniu.
jitter 40 Wstępne wypełnienie buforu jitter, w ms. Wyżej = płynniej na słabej/długiej linii, ale więcej opóźnienia. 0 = minimum (dobre w czystej LAN). Maks. 500.

Jeśli audio na wyjściu jest poszarpane: uruchom svx show i obserwuj starts/stops. Po jednym na wypowiedź jest zdrowe. Wiele na wypowiedź znaczy, że twoje PTT migocze — podnieś tx_hold (spróbuj 400).

Opcjonalnie: słuchanie dodatkowych talkgrup

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

Utrzymywanie go w ruchu — na zawsze

Dwie niezależne rzeczy pozostają aktywne: link do reflektora i link AllStar węzeł-do-węzła.

  • Link do reflektora jest automatyczny. chan_svx łączy się ponownie sam (heartbeat TCP + UDP, backoff po każdym urwaniu). Nic do konfigurowania; svx show wraca do CONNECTED w kilka sekund po każdej przerwie.
  • Chcesz utrzymać węzeł AllStar połączony z hubem? Użyj trwałego connect app_rpt, który sam się odbudowuje:
sudo asterisk -rx "rpt cmd 1999 ilink 13 403870"   # 13 = permanent, transceive

Łącz automatycznie przy starcie przez stanzę węzła:

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

Pas i szelki z cronem (ilink 3 jest idempotentne — nic nie robi, jeśli już połączone):

# keep node 1999 linked to 403870 every 2 minutes
*/2 * * * * /usr/sbin/asterisk -rx "rpt cmd 1999 ilink 3 403870" >/dev/null 2>&1

Dodatek: zmiana talkgrupy z radia (DTMF)

Możesz przenieść węzeł na inną TG na żywo — przez RF z DTMF, chronione PIN-em — i potem wrócić. Wygodne, by rozgłosić biuletyn/net na innej TG i potem wrócić.

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

Schemat wybierania: *855 + PIN + akcja. Umieść komendy w rpt.conf pod [functions] (PIN to kod sterujący — zły PIN po prostu nic nie robi). Domyślny PIN to 0000 — zmień go przed użyciem:

; /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

Ustaw domyślną TG i limit czasu auto-powrotu w svx.conf:

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

Tymczasowa TG zawsze wraca do domyślnej przy restarcie, ponownym połączeniu lub po tg_timeout — więc zapomniana zmiana nigdy nie zostawi węzła zablokowanego.

Wiele węzłów lub TG? Użyj chan_svx_sat

chan_svx to jeden login = jedna TG = jeden strumień — jeden klient reflektora na sekcję. Jeśli potrzebujesz wielu węzłów / talkgrup na jednym loginie reflektora (wspólny trunk), to dokładnie robi bliźniaczy driver chan_svx_sat — dołącza jako satelita/trunk reflektora zamiast jako klient. Zobacz przewodnik chan_svx_sat.

Rozwiązywanie problemów

Objaw Sprawdź
svx show puste / "No such command" / węzeł nie ma rxchannel Czy load = chan_svx.so jest włączone wewnątrz [modules]? Zrobiłeś core restart now?
down zamiast CONNECTED Host/port osiągalne? login/hasło poprawne? Obserwuj: sudo tail -f /var/log/asterisk/messages.log | grep -i svx
auth rejected: Invalid callsign Login musi być poprawnym znakiem wielkimi literami, a konto musi istnieć na reflektorze.
auth rejected: Access denied Złe hasło lub login nie jest zarejestrowany na reflektorze.
txframes rośnie, ale nikt cię nie słyszy Czy słuchający klient naprawdę wybiera/monitoruje tę samą TG?
Audio poszarpane na wyjściu, starts rośnie wiele-na-wypowiedź Migoczące PTT → podnieś tx_hold (np. 400).
txbadsize rośnie app_rpt dostarcza ramki nie-slin — sprawdź tor audio węzła.
Ładuje się, ale odmawia ("compile-time options") Pakiet musi pasować do zainstalowanej wersji asl3-asterisk — zainstaluj deb dla swojego dokładnego systemu.

Przywracanie

  1. Przywróć stary rxchannel (odkomentuj) i zakomentuj rxchannel = SVX/....
  2. Zakomentuj load = chan_svx.so w modules.conf.
  3. sudo asterisk -rx "core restart now".

Usunąć całkiem: sudo apt remove asl3-chan-svx (dodaj --purge, by usunąć też przykładową konfigurację i linię w modules.conf).

Zobacz też

  • Hamradio — wszystkie poradniki o głosie cyfrowym i bramkach.
  • Autor / zgłaszanie błędów: SA7AUX <bjorne@sa7aux.se>. GNU GPL v2.