Hamradio/chan svx/de
Eine handliche Schritt-für-Schritt-Anleitung, um einen AllStarLink-3-Knoten direkt mit einem SVXReflector zu verbinden — mit chan_svx. Installieren, verbinden und das Audio richtig einstellen. Keine SvxLink-Vorkenntnisse nötig. Zum Kopieren und Einfügen.
chan_svx ist ein Asterisk-Kanaltreiber, mit dem dein AllStar-Knoten Opus direkt mit einem SVXReflector spricht — so entfällt der alte chan_usrp → svxlink-Umweg und das zusätzliche Vocoder-Tandem.chan_svx (diese Seite) tritt dem Reflektor als SvxLink-Client bei (ein Login = eine TG). Sein Geschwister chan_svx_sat tritt als Satellit/Trunk bei und kann mehrere Knoten/TGs auf einem Login tragen. Willst du den Trunk, lies die chan_svx_sat-Anleitung.
Brauche ich das überhaupt?
- Du betreibst einen AllStarLink-3-Knoten (auf einem Raspberry Pi oder x86) und willst ihn auf einer SVXReflector-Talkgroup haben.
- Heute überbrückst du ihn vermutlich mit
chan_usrp→svxlink. Das geht, aber es transkodiert das Audio zweimal und bringt eine weitere Kiste zum Pflegen mit. chan_svxersetzt diesen ganzen Umweg durch einen Treiber. Der Audioweg wird nur noch PCM ↔ Opus, einmal.
Willst du nicht zu einem SvxReflector — z. B. wenn du nur AllStar-zu-AllStar verlinkst oder DMR/YSF nutzt — brauchst du das nicht. Siehe Hamradio dafür.
Wörter, die du siehst (Glossar in einfacher Sprache)
| Begriff | Was er hier bedeutet |
|---|---|
| AllStarLink 3 (ASL3) | Das auf Asterisk aufbauende VoIP-Verlinkungssystem. Dein Knoten fährt asl3-asterisk.
|
| app_rpt | Die Asterisk-Anwendung, die deine Repeater-/Knotensteuerung ist (COS, PTT, IDs, Links). |
| SVXReflector | Ein Server, der viele SvxLink-artige Clients auf gemeinsamen Talkgroups zusammenführt. Dein Knoten loggt sich dort ein. |
| Talkgroup (TG) | Ein „Kanal“ auf dem Reflektor. Du sendest auf einer TG und hörst alle anderen darauf. |
| Opus | Der Audio-Codec auf der Leitung zwischen Knoten und Reflektor. Eine Transkodierung, 8 kHz, 20 ms-Frames. |
| Client | chan_svx tritt dem Reflektor als normaler SvxLink-Client bei — ein Login, eine TG, ein Stream. |
| Sektion | Ein [block] in svx.conf. Eine Sektion = ein Knoten = eine TG.
|
Was du brauchst, bevor du anfängst
- Ein funktionierender AllStarLink-3-Knoten. Prüfen:
asterisk -VzeigtAsterisk 22.x+asl3-.... - Ein 64-bit-OS. Debian 12 (bookworm) oder 13 (trixie), auf x86-64 oder arm64 (Pi 3/4/5). Prüfen:
dpkg --print-architectureund. /etc/os-release; echo $VERSION_CODENAME. (Der Pi Zero 2 W wird bewusst nicht unterstützt — Wärme + WLAN.) - Ein eigener Reflektor-Login — ein dedizierter Login + Auth-Key, nicht mit svxlink oder einem anderen Knoten geteilt. Teilst du einen, fliegt der andere raus. SvxReflector-Logins sind Rufzeichen in Großbuchstaben.
- Der Reflektor ist erreichbar. Prüfen:
nc -vz REFLECTOR_HOST 5300.
Das durchgehende Beispiel unten ist ein echter Knoten: AllStar-Knoten 1999, der zu einem Reflektor unter 172.16.1.1:5300 verbindet, Talkgroup 24016. Ersetze überall dein eigenes Host / Login / TG.
Wie alles zusammenpasst
Zwei kleine Konfigdateien auf dem Knoten und ein Login, das der Reflektor kennt. Das ist die ganze Verkabelung:
Schritt 1 — Das Paket installieren
Wähle das .deb, das zu deinem OS und deiner Architektur passt:
| OS / Arch | 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
Abhängigkeiten (asl3-asterisk, libopus0, libssl3) werden automatisch aufgelöst. Das Paket installiert das Modul, eine Beispiel-Konfig, diese Art Dokumentation unter /usr/share/doc/asl3-chan-svx/ und fügt eine auskommentierte load-Zeile in modules.conf hinzu, die du in Schritt 4 aktivierst. Noch wird nichts geladen oder verbunden.
Schritt 2 — Die Reflektor-Konfig erstellen
Kopiere die Vorlage und öffne sie zum Bearbeiten:
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
Mach sie so (benenne die Sektion nach dem Knoten — aufgeräumt und eindeutig):
[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)
Das callsign wird als Name des Knotens angezeigt, wenn es auf dem Reflektor gerade frei ist; bei einer Kollision (oder wenn leer) fällt es auf ASL-<section> zurück (z. B. ASL-1999), automatisch neu geprüft, sobald Namen frei werden.
Schritt 3 — Den Knoten darauf zeigen lassen
In /etc/asterisk/rpt.conf, im Stanza deines Knotens, kommentiere den alten rxchannel aus — lösche ihn nie — und füge die SVX-Zeile hinzu:
[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 bindet diese Datei ein und überschreibt sie nie. Nutze die direkte Bearbeitung oben für eine schnelle Änderung; nutze custom/, wenn deine Konfig asl3-asterisk-Updates sauber überstehen soll.
Schritt 4 — Das Modul aktivieren
ASL3 hat autoload = no, das Modul muss also von Hand gelistet werden. Das Paket hat eine auskommentierte Zeile hinzugefügt — schalte sie ein. Sie muss innerhalb des [modules]-Abschnitts stehen (eine load-Zeile nach einem späteren Abschnitt wird still ignoriert):
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
Schritt 5 — Anwenden und prüfen
Eine rxchannel-Änderung erfordert, dass app_rpt neu initialisiert, also starte Asterisk neu und prüfe dann:
sudo asterisk -rx "core restart now" sudo asterisk -rx "svx show"
Eine gesunde Brücke sieht so aus — CONNECTED heißt, die Grundverbindung ist fertig:
Taste am Knoten → txframes steigt und der Reflektor öffnet den Talker auf deiner TG. Wenn ein anderer auf der TG spricht → rxframes steigt. Fertig. Der Rest der Seite sind Feinabstimmung und Extras.
Das Audio richtig einstellen
Hier bleiben die meisten hängen, also geh es langsam an. Nur die gelben Stufen haben Regler — alles Graue ist automatisch.
All das lebt im Sektions-Block des Knotens in svx.conf. Nach jeder Änderung: sudo asterisk -rx "core restart now" ausführen.
Die vier Audio-Regler
| Einstellung | Standard | Was sie tut |
|---|---|---|
tx_gain |
0 |
Vorverstärkung auf TX (Knoten → Reflektor), in dB. Erhöhen, wenn andere sagen, du bist leise; senken, wenn sie sagen, du übersteuerst. |
rx_gain |
0 |
Vorverstärkung auf RX (Reflektor → Knoten), in dB. Erhöhen, wenn das Reflektor-Audio auf deinem Repeater zu leise ist. |
tx_agc / rx_agc |
no |
Automatische Pegelregelung. Einschalten, um laute/leise Stationen auszugleichen. yes oder no.
|
bitrate |
16000 |
Opus-Bitrate in bit/s. Lass sie, außer du hast einen Grund. |
„Mein Audio ist X → tu Y“
| Symptom | Lösung |
|---|---|
| Andere sagen, du bist zu leise | Erhöhe tx_gain um wenige dB (z. B. 3, dann 6).
|
| Andere sagen, du übersteuerst / verzerrst | Senke tx_gain einen Tick. Der Limiter schützt die Spitze, aber sauberes Eingangssignal ist besser.
|
| Reflektor-Audio zu leise auf deinem Repeater | Erhöhe rx_gain um wenige dB.
|
| Laute und leise Stationen sind extrem ungleich | Schalte rx_agc = yes ein (und/oder tx_agc = yes).
|
| Abgehackt / zerhackt gesendetes Audio | Siehe den tx_hold-Fix unten. |
| Knacken/Aussetzer, die hereinkommen auf einer schlechten Leitung | Erhöhe jitter (siehe unten). FEC/PLC helfen schon; das gibt Reserve.
|
Zwei weitere Regler: tx_hold und jitter
| Einstellung | Standard | Was sie tut |
|---|---|---|
tx_hold |
250 |
TalkerStop-Haltezeit, in ms. Kurzes Ent-/Wieder-Tasten mitten in einer Durchgabe (COS-Flackern, Link-Haltezeit) würde sonst den Reflektor-Talker schließen und wieder öffnen und das Audio zerhacken. Die Haltezeit hält ihn über die Lücke offen. 0 = sofort beim Enttasten stoppen.
|
jitter |
40 |
Jitter-Buffer-Vorfüllung, in ms. Höher = glatter auf einer schlechten/langen Leitung, aber mehr Latenz. 0 = minimal (gut in einem sauberen LAN). Max 500.
|
Wenn das gesendete Audio zerhackt ist: führe svx show aus und beobachte starts/stops. Je eins pro Durchgabe ist gesund. Viele pro Durchgabe heißt, deine Tastung flattert — erhöhe tx_hold (probiere 400).
Optional: zusätzliche Talkgroups hören
monitor = 24020, 9990 ; extra TGs you HEAR (RX only); TX still goes to 'tg'
Dauerhaft oben halten
Zwei unabhängige Dinge bleiben oben: der Reflektor-Link und der AllStar-Knoten-zu-Knoten-Link.
- Der Reflektor-Link ist automatisch. chan_svx verbindet sich von selbst neu (TCP + UDP-Heartbeats, Backoff nach jedem Abbruch). Nichts zu konfigurieren;
svx showsteht innerhalb von Sekunden nach jedem Ausfall wieder aufCONNECTED. - Soll der AllStar-Knoten mit einem Hub verlinkt bleiben? Nutze app_rpts permanentes Connect, das sich selbst wiederherstellt:
sudo asterisk -rx "rpt cmd 1999 ilink 13 403870" # 13 = permanent, transceive
Beim Boot automatisch verlinken über das Knoten-Stanza:
[1999](node-main) rxchannel = SVX/1999 startup_macro = *3403870 ; auto-connect to 403870 (transceive) on startup
Gürtel-und-Hosenträger per Cron (ilink 3 ist idempotent — ein No-Op, wenn bereits verlinkt):
# 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: Talkgroup vom Funkgerät wechseln (DTMF)
Du kannst den Knoten live auf eine andere TG schalten — über HF mit DTMF, per PIN geschützt — und dann zurück. Praktisch, um eine Bulletin/ein Net auf einer anderen TG auszusenden und dann zurückzugehen.
Wählmuster: *855 + PIN + Aktion. Leg die Befehle in rpt.conf unter [functions] (die PIN ist der Steuercode — eine falsche PIN tut einfach nichts). Standard-PIN ist 0000 — ändere sie vor der Nutzung:
; /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
Setze die Standard-TG und ein Auto-Zurück-Timeout in svx.conf:
[403872] tg = 3149050 ; the DEFAULT TG (revert/up target) tg_timeout = 30 ; minutes on another TG before auto-revert (0 = off)
Eine temporäre TG fällt immer auf die Standard-TG zurück — bei einem Neustart, einer Wiederverbindung oder nach tg_timeout — so strandet ein vergessener Wechsel den Knoten nie.
Mehrere Knoten oder TGs? Nutze chan_svx_sat
chan_svx ist ein Login = eine TG = ein Stream — ein Reflektor-Client pro Sektion. Brauchst du mehrere Knoten / Talkgroups über einen einzigen Reflektor-Login (einen gemeinsamen Trunk), ist das genau, was der Geschwister-Treiber chan_svx_sat tut — er tritt als Reflektor-Satellit/Trunk statt als Client bei. Siehe die chan_svx_sat-Anleitung.
Fehlerbehebung
| Symptom | Prüfen |
|---|---|
svx show leer / "No such command" / Knoten hat keinen rxchannel |
Ist load = chan_svx.so innerhalb [modules] aktiviert? Hast du core restart now gemacht?
|
down statt CONNECTED |
Host/Port erreichbar? login/password korrekt? Beobachte: sudo tail -f /var/log/asterisk/messages.log | grep -i svx
|
auth rejected: Invalid callsign |
Login muss ein gültiges Großbuchstaben-Rufzeichen sein, und das Konto muss auf dem Reflektor existieren. |
auth rejected: Access denied |
Falsches Passwort, oder der Login ist nicht auf dem Reflektor registriert. |
txframes steigt, aber niemand hört dich |
Wählt/beobachtet der hörende Client wirklich dieselbe TG? |
Abgehacktes Audio raus, starts steigt viele-pro-Durchgabe |
Tastung flattert → erhöhe tx_hold (z. B. 400).
|
txbadsize steigt |
app_rpt liefert Nicht-slin-Frames — prüfe den Audioweg des Knotens. |
| Lädt, verweigert aber ("compile-time options") | Das Paket muss zur installierten asl3-asterisk-Version passen — installiere das deb für dein genaues OS.
|
Zurücksetzen
- Stelle den alten
rxchannelwieder her (auskommentieren aufheben) und kommentiererxchannel = SVX/...aus. - Kommentiere
load = chan_svx.soinmodules.confaus. sudo asterisk -rx "core restart now".
Komplett entfernen: sudo apt remove asl3-chan-svx (mit --purge auch die Beispiel-Konfig und die modules.conf-Zeile entfernen).
Siehe auch
- Hamradio — alle Digital-Voice- und Gateway-Anleitungen.
- Autor / Fehlerberichte: SA7AUX <bjorne@sa7aux.se>. GNU GPL v2.




