6. Dezember 2024

APRS iGate mit Raspberry Pi, RTL-SDR Stick und pymultimonaprs

Nachdem ich bereits ein paar LoRa-APRS iGates und LoRa-APRS Tracker aufgebaut habe, dachte ich mir es wäre schön wenn man einige meiner Standorte mit einem 2m APRS iGate komplettieren würde. Das Gateway empfängt die APRS Pakete auf der europäischen APRS-Frequenz 144.800 MHz (2m Band) und überträgt diese über Internet (bzw. HAMNET) an einen APRS-IS-Tier2-Server weiter.

Die hier aufgelisteten Arbeitsschritte sind ein Werk aus meiner Erfahrung beim Aufbau der iGates und einer Zusammenfassung aus den Blog´s von
– Stefan (OE1SCS): https://stefan.schultheis.at/2016/aprs-igate-hamnet-pymultimonaprs/
– Benjamin (DL6BEN): http://dl6ben.darc.de/?APRS-Rasperry_iGate
– Stephan (DO7PSL): https://do7psl.de/aprs-igate-raspberry-pi/
– Raspberry Headless Setup & RTL-SDR: https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/raspberry-headless-setup-rtl-sdr
– Marco (DL1MX) english: https://www.kubonweb.de/?p=130

Der Aufbau eines solchen iGates ist relativ einfach und in der hier beschriebenen Reihenfolge habe ich mein APRS iGate konfiguriert. Folgendes Equipment wird zum Aufbau benötigt

  • Raspberry Pi (ich verwende einen Pi2)
  • RTL-SDR Stick (RTL2832U, DVB-T Stick)
  • Antenne (ich verwende einmal eine einfach Magnetfußantenne und einmal eine Diamond X-30)
  • eventuell benötigst du noch Adapter für den Antennenanschluss an den RTL-SDR Stick

Hat man alles zusammen kann man mit der Installation und Konfiguration der Software beginnen.

Installation

Raspberry Pi updaten

  • sudo apt-get update
  • sudo apt-get upgrade

Standard RTL-Treiber deinstallieren

Als erstes muss man die standard RTL-Treiber des Raspberry deinstallieren. Das ist notwendig damit man RTL-SDR Stick auf der gewollten 144.800 MHz nutzen kann . Dazu muss man die Datei /etc/modprobe.d/raspi-blacklist.conf anpassen damit die Standard-Treiber nicht geladen werden.

Die Datei /etc/modprobe.d/raspi-blacklist.conf wird nun mit

  • cd ~
  • cd /etc
  • cd modprobe.d
  • sudo nano raspi-blacklist.conf

aufgerufen und die notwendigen Zeilen eingetragen.

blacklist dvb_usb_rtl28xxu
blacklist rtl_2832
blacklist rtl_2830
blacklist r820t

Die Datei speichern und schliessen.
Um die alten Treiber zu entfernen muss man den Raspberry Pi neu starten.

  • sudo reboot

RTL-SDR Software und Treiber installieren
Den RTL-SDR USB Stick am Raspberry Pi anstecken.

  • cd ~
  • sudo apt-get install git git-core cmake libusb-1.0-0-dev build-essential
  • git clone git://git.osmocom.org/rtl-sdr.git
  • cd rtl-sdr
  • mkdir build
  • cd build
  • cmake ../ -DDETACH_KERNEL_DRIVER=ON -DINSTALL_UDEV_RULES=ON
  • make
  • sudo make install
  • sudo ldconfig
  • sudo cp ~/rtl-sdr/rtl-sdr.rules /etc/udev/rules.d/
  • sudo reboot

RTL-SDR Stick und Treiber testen

Anzeigen der USB Geräte

  • lsusb

Mit folgenden Befehl kannst du den Stick testen

  • rtl_test -t

Wenn alles geklappt hat, wird der RTL-SDR Stick erkannt und angezeigt.

pi@raspberrypi:~ $ rtl_test -t
Found 1 device(s):
  0:  Realtek, RTL2838UHIDIR, SN: 00000001

Using device 0: Generic RTL2832U OE
Found Rafael Micro R820T tuner
Supported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 16.6 19.7 20.7 22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9 44.5 48.0 49.6
[R82XX] PLL not locked!
Sampling at 2048000 S/s.
No E4000 tuner found, aborting.
pi@raspberrypi:~ $

Hier werden dir dann auch die unterstützen Werte für die Verstärkung „gain“ aufgelistet. Am besten hier einen screenshot machen, damit man die möglichen gain Werte für die weitere Konfoguration bei der Hand hat. Eventuell muß man hier nämlich ein bisschen mit den gain Werten probieren um das Optimum für den Standort zu finden.

RTL-SDR Stick kalibrieren

Da der Stick nicht genau auf der eingestellten Frequenz empfängt, muss er vorher noch kalibriert werden.
Die dafür notwendige Software installierst du wie folgt.

  • cd ~
  • sudo apt-get install libtool autoconf automake libfftw3-dev
  • git clone https://github.com/asdil12/kalibrate-rtl.git
  • cd kalibrate-rtl
  • git checkout arm_memory
  • ./bootstrap
  • ./configure
  • make
  • sudo make install

Dann suchst du mit folgendem Befehl den stärksten Mobilfunksender in deiner Umgebung.

  • kal -s GSM900
pi@raspberrypi:~ $ kal -s GSM900
Found 1 device(s):
  0:  Generic RTL2832U

Using device 0: Generic RTL2832U
Found Rafael Micro R820T tuner
Exact sample rate is: 270833.002142 Hz
[R82XX] PLL not locked!
kal: Scanning for GSM-900 base stations.
GSM-900:
        chan: 2 (935.4MHz - 27.784kHz)  power: 66035.60
        chan: 3 (935.6MHz + 36.185kHz)  power: 1083181.23
        chan: 4 (935.8MHz - 27.566kHz)  power: 2205988.43
        chan: 13 (937.6MHz - 26.764kHz) power: 1077050.72
        chan: 15 (938.0MHz - 26.575kHz) power: 451110.93
        chan: 24 (939.8MHz - 25.804kHz) power: 192925.85
        chan: 64 (947.8MHz - 25.107kHz) power: 129985.50
pi@raspberrypi:~ $

Es werden je nach Empfang mehrere Kanäle „chan“ angezeigt.
Der „chan“ mit dem höchsten „power“-Wert wird nun ausgewählt. (Kanalnummer notieren)

Nun wird mit folgendem Befehl die Frequenzabweichung in Parts per Million (ppm) ermittelt. (ppm Wert notieren)

  • kal -c Kanalnummer
pi@raspberrypi:~ $ kal -c 4
Found 1 device(s):
  0:  Generic RTL2832U

Using device 0: Generic RTL2832U
Found Rafael Micro R820T tuner
Exact sample rate is: 270833.002142 Hz
[R82XX] PLL not locked!
kal: Calculating clock frequency offset.
Using GSM-900 channel 4 (935.8MHz)
average         [min, max]      (range, stddev)
- 22.090kHz             [-22106, -22073]        (33, 9.302522)
overruns: 0
not found: 0
average absolute error: 23.606 ppm
pi@raspberrypi:~ $

APRS IGate Software installieren

Zuerst benötigt man den multimon-ng Decoder, da pymultimonaprs die Messages nicht selbst dekodiert.

  • cd ~
  • sudo apt-get install cmake
  • git clone https://github.com/EliasOenal/multimon-ng.git
  • cd multimon-ng
  • mkdir build
  • cd build
  • cmake ..
  • make
  • sudo make install

Du kannst jetzt schon APRS Pakete empfangen. Mit der folgenden Befehlszeile stellst du den Empfänger auf die APRS-Frequenz von 144.800 MHz ein. Hinter dem Parameter –gibst du die Frequenzabweichung in ppm ein und hinter –g den Wert für die Verstärkung.

  • rtl_fm -f 144800000 -s 22050 -p 23 -g 48.0 – | multimon-ng -a AFSK1200 -A -t raw –

Nach einiger Zeit sollten dann APRS-Pakete dekodiert und angezeigt werden.

Dann folgt die Installation der pymultimonaprs Software, damit die empfangen APRS Pakete auch ins Internet weitergeleitet werden.

  • cd ~
  • sudo apt-get install python2.7 python-pkg-resources
  • git clone https://github.com/asdil12/pymultimonaprs.git
  • cd pymultimonaprs
  • sudo python2 setup.py install

Startscript erstellen

Folgendes Startscript sorgt dafür das pymultimonaprs nach dem Systemstart automatisch gestartet wird.

  • cd ~
  • cd pymultimonaprs
  • sudo cp pymultimonaprs.init /etc/init.d/pymultimonaprs
  • sudo chmod +x /etc/init.d/pymultimonaprs
  • sudo update-rc.d pymultimonaprs defaults

Konfiguration

Damit das APRS iGate die empfangenen Daten korrekt ins Internet weiter leitet, wird die Datei pymultimonaprs.json angepasst.
Folgende Infos müssen individuell auf dein Rufzeichen und die Standortkoordinaten des Gateways konfiguriert werden.

  • Rufzeichen des iGates inkl. Suffix
  • APRS-Passcode passend zum Rufzeichen
  • Frequenz (144.800 MHz)
  • Ermittelter ppm Wert
  • Ermittelter gain Wert
  • Koordinaten vom Standort des APRS iGates in Dezimalgrad

Für die Übertragung ins APRS-IS-Netzwerk ist ein Passcode notwendig. Im Internet findet man zahlreiche Seiten um seinen APRS-Passcode zu generieren wie z.B. https://apps.magicbug.co.uk/passcode/
Mit folgendem kleine Script kannst du dir deinen APRS-Passcode direkt am Raspberry generieren. Die Eingabe des Rufzeichens erfolgt ohne SSID.

  • cd ~
  • cd pymultimonaprs
  • ./keygen.py CALLSIGN

Key for CALLSIGN: 26856

Die Datei /etc/pymultimonaprs.json wird nun mit

  • cd ~
  • cd /etc
  • sudo nano pymultimonaprs.json

aufgerufen und die notwendigen Parameter eingetragen.

{
        "callsign": "CALLSIGN-SSID",
        "passcode": "26856",
        "gateway": ["euro.aprs2.net:14580","noam.aprs2.net:14580"],
        "preferred_protocol": "any",
        "append_callsign": true,
        "source": "rtl",
        "rtl": {
                "freq": 144.800,
                "ppm": 0,
                "gain": 0,
                "offset_tuning": false,
                "device_index": 0
        },
        "alsa": {
                "device": "default"
        },
        "beacon": {
                "lat": 48.00000,
                "lng": 16.00000,
                "table": "/",
                "symbol": "&",
                "comment": "MultimonAPRS iGate",
                "status": {
                        "text": "iGate via Raspberry Pi with RTL-SDR dongle",
                        "file": false
                },
                "weather": false,
                "send_every": 1800,
                "ambiguity": 1
        }
}

Die Konfiguration ist nun fertig und das Script wird wie folgt gestartet.

  • sudo /etc/init.d/pymultimonaprs start

bzw. wie folgt beendet.

  • sudo /etc/init.d/pymultimonaprs stop

Weitere Befehle sind noch status (zeigt den aktuellen Status des Scripts) und restart (Neustart des Scripts).

  • sudo /etc/init.d/pymultimonaprs status
  • sudo /etc/init.d/pymultimonaprs restart


Zusatzinfos zur Konfiguration

Mögliche weiter APRS Server

APRS-Server via Internet APRS-Server via Hamnet
euro.aprs2.net
noam.aprs2.net
austria.aprs2.net
germany.aprs2.net
ffl.aprs2.net
rotate.aprs2.net
rotate.aprs.net
OE1XDS: 44.143.10.90 bzw. aprs.oe1.ampr.at
OE2XZR: 44.143.40.90 bzw. aprs.oe2xzr.ampr.at
OE7XGR: 44.143.168.96 bzw. aprs.oe7xgr.ampr.at
OE2XWR: 44.143.43.90
OE2XGR: 44.143.41.29
OE5XUL: 44.143.105.158
DB0FFL: 44.149.16.136
Weitere Infos unter http://www.aprs2.net/

Für die Umrechnung der Koordinaten (falls notwendig) empfehle ich diese Seite: https://www.koordinaten-umrechner.de/

Das angezeigte Symbol kann mit „table“ und „symbol“ eingestellt werden. Ich lasse mal den Defaultwert. Zur Erklärung gibt es einen informativen Link. http://www.aprs.org/symbols.html

Individuelle Kommentare kann man bei „comment“ und „status“ => „text“ eingeben.

Damit meine Aussendung alle 30 Minuten (=1800 Sekunden) übertragen wird, trage ich den Wert 1800 bei „send_every“ ein.

Bei ambiguity wird die Genauigkeit der Positionsdaten festgelegt. Hier habe ich auf „1“ gesetzt um meine Positionen nicht genau im APRS darzustellen. Details dazu auf folgender Seite: https://github.com/asdil12/pymultimonaprs

INFO: Der Betrieb solcher Funkanlagen setzt eine gültige Amateurfunklizenz voraus.

Link Zusammenfassung

Einkaufsliste