Beim Aufbau unserer neuen Repeaterhardware für DB0TR und DB0FHR verwenden wir die Software SvxLink zur Ablaufsteuerung und um weitere Funktionen zur Verfügung zu stellen, wie etwa Echolink-Anbindung.
SvxLink läuft innerhalb des Repeaters auf einem Raspberry Pi 3B+, aber auch ältere Hardwareversionen bieten ausreichend Leistung. Zur Ansteuerung der Funkgeräte und Verarbeitung des empfangenen und zu sendenden Audiosignals ist etwas Peripherie notwendig (u.a. eine externe Soundkarte). Wir nutzen eine eigens dafür hergestellte Platine für diesen Zweck. Die Platine wird demnächst in einem weiteren Artikel vorgestellt.
Es gibt diverse Anleitungen für die Installation von SvxLink auf einem Raspberry, allerdings entwickelt sich einerseits SvxLink, andererseits RaspberryOS/Debian immer weiter, so dass der Teufel manchmal im Detail steckt und die Anleitungen schnell veralten.
Zudem will ich ein paar Extras vorstellen, die nicht bei allen Anleitungen mit enthalten sind, wie z.B. das einrichten eines read-only Dateisystems für den Raspi, so dass die SD Karte nicht unnötig strapaziert wird.
Unsere Platine bietet außerdem noch ein paar kleine Extras, wie das Messen von Temperatur und der Lüfterdrehzahl im Gehäuse und versenden dieser Daten über MQTT. Die Scripte zum Auslesen dieser Daten stelle ich auch separat vor.
Grundkenntnisse im Umgang mit Linux werden vorausgesetzt – und leider kann ich keine Garantie auf Vollständigkeit und Aktualität der Informationen geben, hoffe aber dass es hier und da weiterhilft.
Nun also zum ersten Thema dieser Serie:
Installation von SvxLink auf Debian 11 (Bullseye), Kernel 5.10
Raspbian-Image installieren & erste Schritte
Nach dem Download des Images “Raspberry Pi OS Lite” von https://www.raspberrypi.com/software/operating-systems/ und aufspielen auf die SD Karte wird durch das Erstellen einer Datei mit dem Namen “ssh” (ohne Inhalt) auf der Partition “boot” der SD Karte der SSH Zugang über Netzwerk freigeschaltet.
Mit “sudo raspi-config” sollten folgende Dinge eingestellt werden:
- System Options
- Passwort
- Hostname
- Advanced Options
- Expand Filesystem
Zudem sollte wie üblich mit “sudo apt update && sudo apt upgrade -y” das System auf den neuesten Stand gebracht werden.
Installation der SvxLink Abhängigkeiten
Nach einem Neustart geht es weiter mit der Installation der Abhängigkeiten, um SvxLink zu compilieren und zu benutzen.
SvxLink ist nicht in aktuellen Debian-Paketquellen enthalten, daher müssen wir das Programm selbst compilieren.
Mit folgenden Befehlen werden die notwendigen Bibliotheken und Hilfsprogramme installiert:
sudo apt install cmake git sudo apt install libsigc++-2.0-dev sudo apt install libpopt0 libpopt-dev tcl tcl-dev libgcrypt20 libgcrypt20-dev libasound2 libasound2-dev libgsm1 libgsm1-dev libspeex1 libspeex-dev libopus0 libopus-dev librtlsdr0 librtlsdr-dev libcurl4 libcurl4-gnutls-dev libjsoncpp-dev libgpiod-dev libogg-dev sudo apt install alsa-utils opus-tools
Anlegen des SvxLink-Benutzers
SvxLink wird unter einem eigenen Benutzerkonto ausgeführt. Dieses wird angelegt mit:
sudo groupadd svxlink sudo useradd -g users -rG svxlink,audio,plugdev,gpio,dialout svxlink
Download & Compilieren von SvxLink
Es gibt unter https://github.com/sm0svx/svxlink zwar eine Unterseite “Releases”, diese wird jedoch anscheinend nicht gepflegt. Auf Nachfrage wurde mir versichert, dass es OK sei, jeweils den jüngsten Stand des “master” Branches zu benutzen.
Also holen wir uns den aktuellsten Code und entpacken ihn:
wget https://github.com/sm0svx/svxlink/archive/refs/heads/master.zip unzip master.zip cd svxlink-master
Danach wird compiliert:
cd src mkdir build cd build cmake -DUSE_QT=OFF -DWITH_SYSTEMD=ON .. make -j 4 sudo make install sudo ldconfig
Mit -DUSE_QT=OFF werden die graphischen Anwendungen (qtel) nicht gebaut, da wir das auf dem Repeater nicht benötigen. -DWITH_SYSTEMD=ON konfiguriert SvxLink als systemd Service, was z.B. den automatischen Start beim Boot vereinfacht.
Download & Installation der Sounddateien
Für die gesprochenen Soundausgaben ist es notwendig, ein Sprachpaket herunterzuladen. Das Standard-Sprachpaket ist en_US.
cd /usr/local/share sudo mkdir -p svxlink/sounds && cd svxlink/sounds/ sudo wget https://github.com/sm0svx/svxlink-sounds-en_US-heather/releases/download/19.09/svxlink-sounds-en_US-heather-16k-19.09.tar.bz2 sudo tar xvjf svxlink-sounds-en_US-heather-16k-19.09.tar.bz2 sudo ln -s en_US-heather-16k en_US
Es gibt im Internet auch deutsche Sprachpakete zum Download, teilweise sind diese allerdings mit lizenzierter Sprachsynthesesoftware erstellt worden, daher verlinke ich nicht direkt auf ein Paket. Kurze Suche sollte zum Erfolg führen, die Lizenzbedingungen bitte selber prüfen. Das deutsche Sprachpaket wird dann in einen neuen Ordner de_DE ins “/usr/local/share/svxlink/sounds” Verzeichnis entpackt und die Sprache in der SvxLink Konfiguration (siehe unten) als DEFAULT_LANG=de_DE aktiviert.
SvxLink Konfiguration
GPIO Pins
In /usr/local/etc/svxlink/gpio.conf die Pins einstellen die an SQL und PTT angeschlossen werden. In unserem Fall:
GPIO_IN_LOW="gpio22" GPIO_OUT_LOW="gpio17"
Diese Konfiguration wird vom Service “svxlink_gpio_setup” automatisch vor dem Start des eigentlichen SvxLink Services ausgeführt.
SvxLink Konfiguration
In /usr/local/etc/svxlink/svxlink.conf ist die Konfiguration der SvxLink Software gespeichert. Hier ein Auszug relevanter Teile unserer Konfiguration:
[GLOBAL] LOGICS=RepeaterLogic CFG_DIR=svxlink.d TIMESTAMP_FORMAT="%c" CARD_SAMPLE_RATE=48000 LOCATION_INFO=LocationInfo TIME_FORMAT="24" [RepeaterLogic] TYPE=Repeater RX=Rx1 TX=Tx1 MODULES=ModuleHelp,ModuleParrot,ModuleEchoLink CALLSIGN=DB0TR SHORT_IDENT_INTERVAL=10 EVENT_HANDLER=/usr/local/share/svxlink/events.tcl DEFAULT_LANG=de_DE RGR_SOUND_DELAY=0 MACROS=Macros FX_GAIN_NORMAL=0 FX_GAIN_LOW=0 IDLE_TIMEOUT=3 OPEN_ON_SQL=0 OPEN_SQL_FLANK=OPEN [Rx1] TYPE=Local AUDIO_DEV=alsa:plughw:1 AUDIO_CHANNEL=0 SQL_DET=GPIO SQL_START_DELAY=0 SQL_DELAY=0 SQL_HANGTIME=0 GPIO_PATH=/sys/class/gpio GPIO_SQL_PIN=gpio22 DEEMPHASIS=0 SQL_TAIL_ELIM=0 PREAMP=3 PEAK_METER=1 DTMF_DEC_TYPE=INTERNAL DTMF_MUTING=1 DTMF_HANGTIME=40 DTMF_SERIAL=/dev/ttyS0 [Tx1] TYPE=Local AUDIO_DEV=alsa:plughw:1 AUDIO_CHANNEL=0 PTT_TYPE=GPIO PTT_PIN=gpio17 TX_DELAY=0 PREEMPHASIS=0 DTMF_TONE_LENGTH=100 DTMF_TONE_SPACING=50 DTMF_DIGIT_PWR=-15 MASTER_GAIN=6.0
Die Variablen PREAMP und MASTER_GAIN steuern die Verstärkung des ein- und ausgehenden Audiostreams, separat zu dem synthethisch erzeugtem Audio, das mit den FX_GAIN_… Variablen gesteuert wird. Weitere Stellschrauben für die Lautstärken sind der Linux alsamixer und die Potis auf der Platine.
Falls wie in unserem Fall das Modul Echolink benutzt wird, muss zusätzlich noch die Datei ./svxlink.d/ModuleEcholink.conf angepasst werden.
In der Datei /usr/local/default/etc/svxlink muss der Pfad der Logdatei noch auf /var/log/svxlink angepasst werden.
Aktivieren von Autostart von SvxLink und erster Start
Nachdem die Konfiguration durchgeführt wurde, kann der SvxLink Service gestartet werden:
sudo systemctl start svxlink
Der Erfolg kann mit
sudo systemctl status svxlink
kontrolliert werden. Die Logdatei ist unter /var/log/svxlink zu finden.
Damit SvxLink beim nächsten Systemstart automatisch ausgeführt wird, kann der Service dauerhaft aktiviert werden:
sudo systemctl enable svxlink
Ausblick
Im nächsten Teil stelle ich die erweiterte Konfiguration unseres Setups vor. Wir ändern ein paar Dinge in SvxLink die nicht einfach über die Konfigurationsdatei zu ändern sind (z.B. Korrektur der Zeitansage in deutsch) und verpassen dem Raspberry ein read-only Dateisystem um die SD-Karte zu schonen.
Einen schönen guten Morgen.
Wir möchten an meinem Relais DB0MHF (70cm) im Mülheim am Flugplatz gerne eine Echolink Anbindung machen.
Um es einfach zu machen, die Frage habt Ihr ein IMG für den Raspberry (z.B. 3+) so das wir nur die Configdatei anpassen müssen???
Gruß Ulrich
Hallo Ulrich,
ich kann mal schauen was sich machen lässt, habe ein relativ unangetastetes Image, das kann ich dir ggf. am Wochenende hochladen.
73, Chris
Hallo !!
Ich habe jetzt auch einen DjSpot bekommen und bin auf der suche nach einem cleanen Grundimage wo aber die gpio ports und audio usw schon dabei ist . Bin nicht so der linux profi aber das wäre sehr nett von euch wenn mir so etwas jemand zur verfügung stellen könnte ?
Lg robert
hallo,
ich habe das Problem das er sich nicht mit dem Echolink Server verbindet. Könnt Ihr mal bitte Euch meine Config ansehen ob da was falsch drin ist?
###############################################################################
#
# Configuration file for the RemoteTrx application. A remote transceiver
# for the SvxLink server system.
#
###############################################################################
[GLOBAL]
TRXS=NetUplinkTrx
#CFG_DIR=remotetrx.d
TIMESTAMP_FORMAT=”%c”
#CARD_SAMPLE_RATE=48000
#CARD_CHANNELS=1
[NetUplinkTrx]
TYPE=Net
RX=Rx1
TX=Tx1
LISTEN_PORT=5210
#FALLBACK_REPEATER=1
AUTH_KEY=”Change this key now!”
#MUTE_TX_ON_RX=1000
[RfUplinkTrx]
TYPE=RF
RX=Rx1
TX=Tx1
UPLINK_TX=UplinkTx
UPLINK_RX=UplinkRx
MUTE_UPLINK_RX_ON_TX=1
LOOP_RX_TO_TX=0
#DETECT_1750=1000
#DETECT_CTCSS=136.5:1000
[Voter]
TYPE=Voter
RECEIVERS=Rx1,Rx2,Rx3
VOTING_DELAY=200
#BUFFER_LENGTH=0
#REVOTE_INTERVAL=1000
#HYSTERESIS=50
#SQL_CLOSE_REVOTE_DELAY=500
#RX_SWITCH_DELAY=500
[NetTrxAdapter]
TYPE=NetTrxAdapter
LISTEN_PORT=5210
#RX_ID=?
RX_SIGLEV=1
[Rx1]
TYPE=Local
#RX_ID=?
AUDIO_DEV=alsa:plughw:0
AUDIO_CHANNEL=0
LIMITER_THRESH=-6
SQL_DET=VOX
SQL_START_DELAY=0
SQL_DELAY=0
SQL_HANGTIME=2000
#SQL_EXTENDED_HANGTIME=1000
#SQL_EXTENDED_HANGTIME_THRESH=15
#SQL_TIMEOUT=600
#HID_DEVICE=/dev/hidraw3
#HID_SQL_PIN=VOL_UP
VOX_FILTER_DEPTH=20
VOX_THRESH=1000
#CTCSS_MODE=2
CTCSS_FQ=136.5
#CTCSS_SNR_OFFSET=0
#CTCSS_SNR_OFFSETS=88.5:-1.0,136.5:-0.5
#CTCSS_OPEN_THRESH=15
#CTCSS_CLOSE_THRESH=9
#CTCSS_BPF_LOW=60
#CTCSS_BPF_HIGH=270
SERIAL_PORT=/dev/ttyS0
SERIAL_PIN=CTS
#SERIAL_SET_PINS=DTR!RTS
#EVDEV_DEVNAME=/dev/input/by-id/usb-SYNIC_SYNIC_Wireless_Audio-event-if03
#EVDEV_OPEN=1,163,1
#EVDEV_CLOSE=1,163,0
#GPIO_SQL_PIN=gpio30
#SQL_GPIOD_CHIP=gpiochip0
#SQL_GPIOD_LINE=22
#SQL_GPIOD_BIAS=PULLDOWN
#PTY_PATH=/tmp/rx1_sql
#SIGLEV_DET=TONE
SIGLEV_SLOPE=1
SIGLEV_OFFSET=0
#SIGLEV_BOGUS_THRESH=120
#TONE_SIGLEV_MAP=100,84,60,50,37,32,28,23,19,8
SQL_SIGLEV_OPEN_THRESH=30
SQL_SIGLEV_CLOSE_THRESH=10
DEEMPHASIS=0
#SQL_TAIL_ELIM=300
#PREAMP=6
PEAK_METER=1
DTMF_DEC_TYPE=INTERNAL
DTMF_MUTING=1
DTMF_HANGTIME=40
DTMF_SERIAL=/dev/ttyS0
#DTMF_PTY=/tmp/rx1_dtmf
#DTMF_MAX_FWD_TWIST=8
#DTMF_MAX_REV_TWIST=4
#SEL5_DEC_TYPE=INTERNAL
#SEL5_TYPE=ZVEI1
#FQ=433475000
#MODULATION=FM
#WBRX=WbRx1
#OB_AFSK_ENABLE=0
#OB_AFSK_VOICE_GAIN=6
#IB_AFSK_ENABLE=0
[WbRx1]
#TYPE=RtlUsb
#DEV_MATCH=0
#HOST=localhost
#PORT=1234
#CENTER_FQ=435075000
#FQ_CORR=0
#GAIN=0
#PEAK_METER=1
#SAMPLE_RATE=960000
[Tx1]
TYPE=Local
AUDIO_DEV=alsa:plughw:0
AUDIO_CHANNEL=0
LIMITER_THRESH=-6
PTT_TYPE=NONE
PTT_PORT=/dev/ttyS0
PTT_PIN=DTRRTS
#SERIAL_SET_PINS=DTR!RTS
#HID_DEVICE=/dev/hidraw3
#HID_PTT_PIN=GPIO3
#GPIO_PATH=/sys/class/gpio
#PTT_GPIOD_CHIP=gpiochip0
#PTT_GPIOD_LINE=17
TIMEOUT=300
TX_DELAY=500
#CTCSS_FQ=136.5
#CTCSS_LEVEL=9
PREEMPHASIS=0
DTMF_TONE_LENGTH=100
DTMF_TONE_SPACING=50
DTMF_DIGIT_PWR=-15
#MASTER_GAIN=0.0
#OB_AFSK_ENABLE=0
#OB_AFSK_VOICE_GAIN=-6
#OB_AFSK_LEVEL=-12
#OB_AFSK_TX_DELAY=100
#IB_AFSK_ENABLE=0
#IB_AFSK_LEVEL=-6
#IB_AFSK_TX_DELAY=100
[UplinkRx]
TYPE=Local
#RX_ID=?
AUDIO_DEV=alsa:plughw:0
AUDIO_CHANNEL=1
SQL_DET=VOX
SQL_START_DELAY=0
SQL_DELAY=0
SQL_HANGTIME=2000
#SQL_TIMEOUT=600
VOX_FILTER_DEPTH=20
VOX_THRESH=1000
#CTCSS_MODE=2
CTCSS_FQ=136.5
#CTCSS_SNR_OFFSET=0
#CTCSS_SNR_OFFSETS=88.5:-1.0,136.5:-0.5
#CTCSS_OPEN_THRESH=15
#CTCSS_CLOSE_THRESH=9
#CTCSS_BPF_LOW=60
#CTCSS_BPF_HIGH=270
SERIAL_PORT=/dev/ttyS0
SERIAL_PIN=CTS
#SERIAL_SET_PINS=DTR!RTS
#EVDEV_DEVNAME=/dev/input/by-id/usb-SYNIC_SYNIC_Wireless_Audio-event-if03
#EVDEV_OPEN=1,163,1
#EVDEV_CLOSE=1,163,0
#GPIO_SQL_PIN=gpio30
#SQL_GPIOD_CHIP=gpiochip0
#SQL_GPIOD_LINE=22
#SQL_GPIOD_BIAS=PULLDOWN
#PTY_PATH=/tmp/uplinkrx_sql
#HID_DEVICE=/dev/hidraw3
#HID_SQL_PIN=VOL_UP
#SIGLEV_DET=TONE
SIGLEV_SLOPE=1
SIGLEV_OFFSET=0
#SIGLEV_BOGUS_THRESH=120
#TONE_SIGLEV_MAP=100,84,60,50,37,32,28,23,19,8
SQL_SIGLEV_OPEN_THRESH=30
SQL_SIGLEV_CLOSE_THRESH=10
DEEMPHASIS=0
#SQL_TAIL_ELIM=300
#PREAMP=6
PEAK_METER=1
DTMF_DEC_TYPE=INTERNAL
DTMF_MUTING=1
DTMF_HANGTIME=40
DTMF_SERIAL=/dev/ttyS0
#DTMF_PTY=/tmp/uplink_dtmf
#DTMF_MAX_FWD_TWIST=8
#DTMF_MAX_REV_TWIST=4
#SEL5_DEC_TYPE=INTERNAL
#SEL5_TYPE=ZVEI1
#FQ=433475000
#MODULATION=FM
#WBRX=WbRx1
[UplinkTx]
TYPE=Local
AUDIO_DEV=alsa:plughw:0
AUDIO_CHANNEL=1
PTT_TYPE=NONE
PTT_PORT=/dev/ttyS0
PTT_PIN=DTRRTS
#SERIAL_SET_PINS=DTR!RTS
#HID_DEVICE=/dev/hidraw3
#HID_PTT_PIN=GPIO3
#GPIO_PATH=/sys/class/gpio
#PTT_GPIOD_CHIP=gpiochip0
#PTT_GPIOD_LINE=17
TIMEOUT=300
TX_DELAY=500
#CTCSS_FQ=136.5
#CTCSS_LEVEL=9
PREEMPHASIS=0
DTMF_TONE_LENGTH=100
DTMF_TONE_SPACING=50
DTMF_DIGIT_PWR=-15
#TONE_SIGLEV_MAP=100,84,60,50,37,32,28,23,19,8
#TONE_SIGLEV_LEVEL=10
#OB_AFSK_ENABLE=0
#OB_AFSK_CENTER_FQ=5500
#OB_AFSK_SHIFT=170
#OB_AFSK_BAUDRATE=300
#OB_AFSK_LEVEL=-6
#OB_AFSK_VOICE_GAIN=-6
#MASTER_GAIN=0.0
Hallo Ulrich,
die Konfiguration scheint nicht die default-Konfiguration zu sein, die bei svxlink dabei ist.
Dort ist nämlich EchoLink schon fast fertig konfiguriert.
In der Sektion [GLOBAL] fehlt z.B. die “LOGICS” Einstellung die überhaupt mal ein Transceivermodul lädt (z.B. Repeater). Innerhalb der Sektion des entsprechenden Moduls, also z.B. [Repeater] muss dann mit MODULES=ModuleEchoLink das Echolink-Modul geladen werden.
Also eigentlich so wie im Beitrag beschrieben. Falls ihr keinen RF-Repeater haben wollt sondern euch z.B. ins FM Funknetz einhängen wollt, eben dementsprechend andere LOGIC Module laden.
Die EchoLink Verbindungseinstellungen müssen dann noch in ./svxlink.d/ModuleEchoLink.conf gemacht werden.
73, Chris
Das ist die RemoteTrx.conf da kann man kein Echolink konfigurieren, das geht nur in der svxlink.conf und dann in der svxlink.d/ModuleEcholink.conf
vy 73 Jens DJ1JaY
moin Christian,
ok, läuft jetzt.
Was ich noch nicht hin bekommen habe ist der Autostart und Read Only. Hast Du dafür noch eine Tipp?
Gruß Ulrich DL3ED
Hallo Ulrich,
Read-Only ist hier beschrieben: https://charly14.de/svxlink-teil-ii-weitere-konfiguration/
Autostart aktiviert man mit ‘sudo systemctl enable svxlink’ (wie im Teil I beschrieben)
Vg
hallo Christian,
den Autostart habe ich so eingegeben, aber ging nicht. Was kann ich da falsch machen? Ist die Reihenfolge falsch?