SVXLink-Zello-Bridge
SVXLink ↔ Zello Verbindung
Funknetz NRW
SVXLink-Zello-Bridge 0.3.3
Die SVXLink-Zello-Bridge verbindet ein SVXLink/SVXReflector-System mit einem Zello-Kanal.
Die Bridge arbeitet unabhängig von proprietären Bridge-Programmen und verwendet die dokumentierte Zello Channel API.
SVXLink → Zello und Zello → SVXLink funktionieren. Mehrere Sprechvorgänge hintereinander sind möglich, ohne dass der Dienst neu gestartet werden muss.
Funktionen
SVXLink → Zello
Audiodaten aus SVXLink werden als OPUS an den Zello-Kanal übertragen.
Zello → SVXLink
Zello-Audio wird empfangen und über SVXLink/SVXReflector ausgegeben.
SVX V2
Verbindung über das SVXLink Reflector Protocol V2 mit TCP und UDP.
OPUS
Für die Audioübertragung wird OPUS verwendet.
Automatische Wiederverbindung
Bei einer Unterbrechung versucht die Bridge automatisch erneut zu verbinden.
systemd
Die Bridge kann als Linux-Systemdienst betrieben werden.
Technische Daten
| Komponente | Wert |
|---|---|
| Bridge-Version | 0.3.3 |
| SVXLink Protocol | V2 |
| Audio Codec | OPUS |
| Sample Rate | 16.000 Hz |
| Frames pro Paket | 1 |
| Paketdauer | 20 ms |
| OPUS Bitrate | 20 kbit/s |
| Python | Python 3 |
| Installationsverzeichnis | /opt/svxlink-zello-bridge |
| Konfiguration | /etc/svxlink-zello-bridge/config.toml |
Installation
Die aktuelle Bridge kann über den Download-Link am Ende dieser Seite heruntergeladen werden.
cd /opt
unzip svxzello.zip
cd /opt/svxlink-zello-bridge
chmod +x install.sh
./install.sh
Wenn noch keine Konfiguration vorhanden ist, erstellt das Installationsscript automatisch:
/etc/svxlink-zello-bridge/config.tomlEine bereits vorhandene Konfiguration wird nicht überschrieben.
Konfiguration
Die Konfiguration befindet sich unter:
/etc/svxlink-zello-bridge/config.toml
Beispiel
[general] ``` log_level = "INFO" reconnect_seconds = 10 [svxlink] protocol = 2 host = "DEIN-SVXREFLECTOR" tcp_port = 5300 udp_port = 5300 callsign = "DEIN-CALL" auth_key = "DEIN-AUTH-KEY" talkgroup = 1 [zello] endpoint = "wss://zello.io/ws" channel = "DEIN-ZELLO-KANAL" auth_token = "DEIN-AUTH-TOKEN" username = "DEIN-BENUTZER" password = "DEIN-PASSWORT" sample_rate = 16000 frames_per_packet = 1 packet_duration_ms = 20 opus_bitrate = 20000„`
Die Datei enthält Zugangsdaten für SVXLink und Zello. Die Datei sollte deshalb nur für den Benutzer bzw. Root lesbar sein.
chmod 600 /etc/svxlink-zello-bridge/config.toml
Systemdienst
Nach der Installation kann der Dienst mit systemd verwaltet werden.
Dienst starten
systemctl start svxlink-zello-bridge
Status anzeigen
systemctl status svxlink-zello-bridge
Logs anzeigen
journalctl -u svxlink-zello-bridge -f
Dienst stoppen
systemctl stop svxlink-zello-bridge
Dienst neu starten
systemctl restart svxlink-zello-bridge„`
Funktionstest
1. SVXLink → Zello
Einen kurzen Sprechvorgang über SVXLink durchführen.
Im Log sollten unter anderem Meldungen wie folgende erscheinen:
SVX talker start ``` Zello start_stream Zello stream started SVX talker stop Zello stop_stream Zello stream stopped„`
2. Zello → SVXLink
Anschließend über den Zello-Kanal senden. Das Audio sollte über SVXLink ausgegeben werden.
3. Mehrere Sprechvorgänge
Mehrere Sprechvorgänge hintereinander testen. Nach jedem Sprechvorgang muss der Zello-Stream sauber beendet werden.
Jeder neue SVXLink-Sprechvorgang erzeugt einen neuen Zello-Stream und wird anschließend wieder sauber beendet.
Audio-Übertragung
Die Zello Channel API erwartet für den Codec-Header ein 4-Byte-Format.
struct.pack("<HBB", sample_rate, frames, duration)
Dabei werden folgende Werte übertragen:
| Feld | Größe | Bedeutung |
|---|---|---|
| Sample Rate | 16 Bit | z. B. 16000 Hz |
| Frames | 8 Bit | Frames pro Paket |
| Duration | 8 Bit | Paketdauer in ms |
Sample Rate: 16000 Hz ``` Frames: 1 Paketdauer: 20 ms Codec: OPUS Bitrate: 20000 bit/s„`
Fehlerdiagnose
Dienst läuft nicht
systemctl status svxlink-zello-bridge
Danach die letzten Logmeldungen prüfen:
journalctl -u svxlink-zello-bridge -n 100 --no-pager
Zello-Verbindung funktioniert nicht
Prüfen:
- Zello-Kanalname
- Benutzername
- Passwort
- Auth-Token
- Internetverbindung
SVXLink-Verbindung funktioniert nicht
Prüfen:
- SVXReflector-Adresse
- TCP-Port
- UDP-Port
- Callsign
- AUTH_KEY
- Talkgroup
- Firewall
Kein Audio von SVXLink nach Zello
Zunächst prüfen, ob der Stream korrekt gestartet und beendet wird:
journalctl -u svxlink-zello-bridge -f
Ein vollständiger Ablauf sollte ungefähr so aussehen:
SVX talker start ``` Zello start_stream Zello stream started Audio packets ... SVX talker stop Zello stop_stream Zello stream stopped
Update auf eine neue Version
Vor einem Update sollte die vorhandene Konfiguration gesichert werden.
cp /etc/svxlink-zello-bridge/config.toml \ ``` /etc/svxlink-zello-bridge/config.toml.backup„`
Danach die neue Version installieren und den Dienst neu starten.
systemctl stop svxlink-zello-bridge ``` cd /opt unzip svxzello.zip cd /opt/svxlink-zello-bridge ./install.sh systemctl restart svxlink-zello-bridge systemctl status svxlink-zello-bridge„`
Download
Hier kann die aktuelle Bridge heruntergeladen werden.
„`Projektinformationen
Die SVXLink-Zello-Bridge wurde als eigenständige Software zur Verbindung von SVXLink und Zello entwickelt.
Die Bridge verwendet die SVXLink-Schnittstelle und die Zello Channel API zur Audioübertragung.
Zugangsdaten wie Zello-Passwort, Auth-Token und SVXLink AUTH_KEY gehören ausschließlich in die lokale Konfigurationsdatei und sollten nicht öffentlich veröffentlicht werden.


