In diesem Beitrag wird gezeigt, wie du aus einem Raspberry Pi und einem RTL-SDR ein APRS iGate zusammenbaust. Als Grundlage dieser Anleitung dienten die Informationen von Marco Kubon
Ein iGate empfängt APRS-Pakete und leitet diese über das Internet an APRS-Server weiter. Ein gutes Netz mit vielen APRS iGates ist damit eine wichtige Basis für Webseiten wie aprs.fi.
Neben Grundlagen-Wissen zum Betriebsystem Linux benötigst du einen mit Raspian bespielten Raspberry Pi oder einen anderen stromsparenden Computer. Stromsparend deshalb, weil so ein iGate ja rund um die Uhr Betrieb machen sollte. Weiterhin ist ein USB-Verteiler mit eigener Stromversorgung sinnvoll, aber nicht unbedingt notwendig.
Darüber hinaus benötigst du eine funktionierende Internetverbindung auf dem Raspberry Pi. Außerdem solltest wissen, wie du dich in der Konsole einloggst und dass der Befehl sudo benötigt wird, um Administrationsrechte zu erlangen.
Bevor du anfängst, solltest du dein System auf einen aktuellen Stand bringen. Das erledigst du am einfachsten mit den folgenden Befehlszeilen.
1 2 |
sudo apt-get update sudo apt-get upgrade |
Für das Firmwareupdate benutzten wir Hexxeh’s praktisches Updateskript das uns die aktuellste Firmware herunterlädt und installiert. Ich setze voraus, dass git bereits installiert ist.
1 |
sudo rpi-update |
Danach solltest du sicherstellen, dass der richtige Treiber für den DVB-T Stick geladen wird. In neueren Kernel befindet sich nämlich ein Treiber, mit dem man zwar TV schauen könnte, aber den Stick eben nicht als SDR nutzen kann.
Dazu muss die Datei /etc/modprobe.d/raspi-blacklist.conf mit einem Texteditor um die folgenden Zeilen erweitert werden. Wenn du noch keinen Editor kennst, nimm erstmal nano.
1 |
sudo nano /etc/modprobe.d/raspi-blacklist.conf |
1 2 3 4 5 |
blacklist dvb_usb_rtl28xxu blacklist dvb_usb_v2 blacklist rtl_2830 blacklist rtl_2832 blacklist r820t |
Bevor du den neuen Treiber verwenden kannst, muss der alte Treiber entfernt werden. Dies kannst du entweder mit einem Neustart deines Raspberry Pis erreichen oder mit der folgenden Befehlszeile
1 |
sudo rmmod dvb_usb_rtl28xxu |
Wenn du eine Fehlermeldung erhältst, weil der Treiber nicht geladen war, kannst du sie ignorieren.
Nun legen wir uns ein Arbeitsverzeichnis an.
1 |
mkdir ~/src |
Installation der Treiber
Die neuen Treiber für deinen RTL-SDR-Stick werden via git heruntergeladen und installiert.
1 2 3 4 5 6 7 8 9 10 |
cd ~/src sudo apt-get install git build-essential cmake libusb-1.0-0-dev 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 |
Das Kompilieren sollte erfolgreich durchlaufen, wenn die obigen Schritte alle korrekt ausgeführt worden sind.
Zum Testen des Sticks und der Bestimmung der möglichen Werte für die Verstärkung (gain) kannst du den Befehl rtl_test ausführen. Wenn die Ausgabe von rtl_test fehlerfrei ist, dann ist alles gut.
1 |
sudo rtl_test |
Kalibrieren des Sticks
Dein Stick empfängt nicht genau auf der Frequenz die du einstellst. Er weicht leicht davon ab. Wie stark er abweicht kannst du herausfinden, wenn du einen genauen Messsender hast.
Du hast grade keinen Messender zur Hand? Dann nimmst du einfach den stärksten Mobilfunkmast in deiner Umgebung.
Mit den folgenden Befehlen kompilierst und installierst du die dafür notwendige Software.
1 2 3 4 5 6 7 8 9 |
cd ~/src 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 |
Sofer dieser Fehler nach ./configure auftaucht
1 2 |
./configure: line 5083: syntax error near unexpected token `FFTW3,' ./configure: line 5083: `PKG_CHECK_MODULES(FFTW3, fftw3 >= 3.0)' |
dann noch das Paket pkg-config installieren
1 |
sudo apt-get install pkg-config |
Um den stärksten Sender in deiner Nähe zu finden, gibst du einfach kal -s GSM900 in der Kommandozeile ein und lässt es eine Weile laufen.
1 |
kal -s GSM900 |
Kanal 42 ist bei mir demnach am stärksten zu empfangen.
1 |
kal -c 42 |
Nun ermitteln wir mit kal -c 42 die Frequenzabweichung in Parts per Million (ppm). Bei dem von mir verwendeten Stick beträgt die Abweichung 36,328 ppm. (36 /32.8)
Supported gain
… kannst Du hier sehen:
1 |
sudo rtl_test |
Installation des multimonNG Decoders
Mit dem multimonNG kannst du zielmlich viele digitale Übertragungsverfahren decodieren. Wir beschränken uns zwar in diesem Beispiel auf APRS, aber falls du mehr machen willst, schau dich im multimonNG Repository auf Github um.
1 2 3 4 5 6 7 8 9 |
cd ~/src sudo apt-get install qt4-qmake libpulse-dev libx11-dev patch pulseaudio git clone https://github.com/EliasOenal/multimonNG.git cd multimonNG mkdir build cd build qmake ../multimon-ng.pro make sudo make install |
Nicht irritieren lassen durch diese Meldung:
1 2 3 |
Benutzer pulse wird zur Gruppe audio hinzugefügt. [warn] PulseAudio configured for per-user sessions ... (warning). pulseaudio-utils (2.0-6.1) wird eingerichtet ... |
Testen des Empfangs
Im Prinzip kannst du jetzt schon APRS Pakete empfangen. Mit der folgenden Befehlszeile stellst du den Empfänger auf die APRS-Frequenz von 144,800MHz ein. Hinter dem Parameter –p gibst du die Frequenzabweichung in ppm ein und hinter –g landet der Wert für die Verstärkung.
1 |
sudo rtl_fm -f 144800000 -s 22050 -p 36 -g 32.8 - | multimon-ng -a AFSK1200 -A -t raw - |
Wenn du das jetzt eine Weile laufen lässt, dann sollten irgendwann APRS-Pakete dekodiert und angezeigt werden. Wenn du einen anderen Empfänger hast, dann stell ihn auf 144,800 MHz ein. Dann hörst du die Signale und siehst ob sie zeitgleich dekodiert werden können.
Installation der APRS IGate Software
Damit die empfangen Pakete auch ins Internet weitergeleitet werden, musst du noch pymultimonaprs installieren und konfigurieren.
1 2 3 4 5 |
cd ~/src sudo apt-get install python2.7 python-pkg-resources git clone https://github.com/asdil12/pymultimonaprs.git cd pymultimonaprs sudo python2 setup.py install |
Konfigurationsdatei anpassen
Damit pymultimonaprs die Daten ins Internet leiten kann, muss die Konfigurationsdatei angepasst werden. Dazu benötigst du die diese Informationen:
- Rufzeichen
- den APRS-IS Passcode passend zum Rufzeichen
- die Geokoordinaten vom Standort des iGates
Das generieren des APRS-IS Passworts für dein Rufzeichen funktioniert wie folgt:
1 2 3 |
cd ~/src/pymultimonaprs ./keygen.py DO7PSL Key for RUFZEICHEN: 21425 |
Rufzeichen OHNE SSID eingeben !
Nun musst du die Datei /etc/pymultimonaprs.json mit dem Editor öffnen.
1 |
sudo nano /etc/pymultimonaprs.json |
Ergänze dann die Datei, bis sie deinen Anforderungen genügt. Trage dein Rufzeichen, dein Passwort, die Frequenzabweichung, die Verstärkung und die Koordinaten vom Standort ein und speichere die Datei.
Als Symbol habe ich „" eingetragen. Da erscheint dann ein Satellit Damit ist ein TCP/IP-Gateway auf der Webseite aprs.fi gut zu erkennen.
Kommentar und Statustext solltest du mit Infos zu deiner Station oder deinem Standort versehen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
{ "callsign": "DO7PSL-10", "passcode": "21425", "gateway": "euro.aprs2.net:14580", "append_callsign": true, "source": "rtl", "rtl": { "freq": 144.800, "ppm": 36, "gain": 32.8, "offset_tuning": false, "device_index": 0 }, "alsa": { "device": "default" }, "beacon": { "lat": 48.7326, "lng": 9.14849, "table": "/", "symbol": "`", "comment": "PyMultimonAPRS iGate", "status": { "text": "Raspi PI 2 TCP/IP igate (RX only) in S-Moehringen", "file": false }, "weather": false, "send_every": 300, "ambiguity": 0 } } |
Hinweise:
- der Passcode gilt immer für das Rufzeichen ohne die SSID
- Die GPS Position wird jeweils in Dezimalgraden angegeben und ohne führenden "0"
alternativ:
pymultimonaprs starten...
1 |
pymultimonaprs -v |
in der Konsole mit dem Parameter -v starten. Dann siehst du welche Pakete dein iGate ins Internet überträgt.
Läuft alles im Testbetrieb nach deinen Vorstellungen, kannst du dir ein Startscript installieren. Dann startet pymultimonaprs nach dem Systemstart automatisch, sofern du das Startscript installierst.
Startscript für pymultimonaprs
1 2 3 |
sudo cp pymultimonaprs.init /etc/init.d/pymultimonaprs sudo chmod +x /etc/init.d/pymultimonaprs sudo update-rc.d pymultimonaprs defaults |
Wenn du das Script starten möchtest, kannst du es wie folgt ausführen.
1 |
sudo /etc/init.d/pymultimonaprs start |
Um es wieder zu stoppen verwendest du die Option stop.
1 |
sudo /etc/init.d/pymultimonaprs stop |
Weitere Info´s gibt's hier
Tips am Rande...
mit diesem Befehl kannst Du das Signal am Kopfhörerausgang ausgeben:
1 |
rtl_fm -f 144800000 -s 44100 -g 9 -l 0 - | aplay -t raw -f S16_LE -r 44100 -c 1 |
Übrigens… einen Radiosender hören und an den Kopfhörerausgang umleiten geht mit:
1 |
rtl_fm -f 92.2e6 -s 200000 -r 48000 - | aplay -r 48k -f S16_LE -t raw |
Here is an installer script
… for: rtl_sdr, multimon-ng and kalibrate-rtl RPi Installer
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
#!/bin/sh # install : # curl -o installer.sh https://gist.github.com/iNem0o/6346423/raw && chmod +x installer.sh && sudo ./installer.sh sudo apt-get update sudo apt-get --no-install-recommends -y install git cmake libusb-1.0-0-dev libpulse-dev libx11-dev screen qt4-qmake libtool autoconf automake libfftw3-dev mkdir ~/src echo "Installation de rtl_sdr" cd ~/src git clone git://git.osmocom.org/rtl-sdr.git cd ~/src/rtl-sdr mkdir build cd build cmake ../ -DINSTALL_UDEV_RULES=ON make sudo make install sudo ldconfig echo "Installation de multimon-ng" cd ~/src git clone https://github.com/EliasOenal/multimonNG.git cd ~/src/multimonNG mkdir build cd build qmake ../multimon-ng.pro make sudo make install echo "Installation de Kalibrate" cd ~/src git clone https://github.com/asdil12/kalibrate-rtl.git cd kalibrate-rtl git checkout arm_memory ./bootstrap ./configure make sudo make install |
pymultimonaprs
Symbol Table
Symbol | Table / | Table \ |
---|---|---|
! | Triangle w/! | Triangle w/! |
" | Rain Cloud | Rain Cloud |
# | Digi | DIGI |
$ | Phone Symbol | $ Symbol |
% | DX | DX |
& | GATE-HF | GATE |
’ | Small Aircraft | Aircraft Crash |
( | Cloud | Cloud |
) | TBD | |
* | SNOW Flake | SNOW Flake |
+ | Red Cross | |
, | Reverse L | |
– | House w/omni | |
. | Small x | |
/ | Red Dot | |
0 | 0 in a box | Circle |
1 | 1 in a box | |
2 | 2 in a box | |
3 | 3 in a box | |
4 | 4 in a box | |
5 | 5 in a box | |
6 | 6 in a box | |
7 | 7 in a box | |
8 | 8 in a box | |
9 | 9 in a box | GAS |
: | Fire | ? |
; | Tent | Tent |
< | Motorcycle | Pennant |
= | Train Engine | |
> | Car | Car |
? | POS Antenna | ? in a box |
@ | HURRICANE/STORM | HURRICANE/STORM |
A | First Aid | Box |
B | BBS | Blowing Snow |
C | Canoe | |
D | D in a circle | |
E | E in a circle | Smoke Stack |
F | F in a circle | |
G | Grid Square Antenna | ? |
H | Hotel/Bed | |
I | TCP/IP | ? |
J | J in a circle | Lightening |
K | School House | |
L | Light House | Light House |
M | Mac | |
N | NTS | ? |
O | Balloon | |
P | Police car | Rx |
Q | Circle with in Circles | Circle with in Circles |
R | RV | Restaurant |
S | Shuttle | Satellite |
T | Thunderstorm (cloud/bolt) | Thunderstorm (cloud/bolt) |
U | School Bus | Sun |
V | VORTAC | VORTAC Symbol |
W | National Weather Service | NWS-Digi |
X | Helicopter | |
Y | Sail Boat | |
Z | Windows | |
[ | Runner | WC |
\ | DF Triangle | |
] | Packet Mail Box | |
^ | Large Aircraft | Large Aircraft |
_ | Weather Station | WS-Digi |
Satellite Dish | ||
a | Ambulance | |
b | Bike | blowing cloud |
c | DX antenna | |
d | Fire dept. | DX Antenna |
e | Horse | Sleet cloud |
f | Fire Truck | FC Cloud |
g | glider | Pennant (2) |
h | Hospital | HAM |
i | Island | Island |
j | Jeep | Jeep |
k | Truck | Truck |
l | Small dot | Small Dot |
m | MIC | Mile Post |
n | N | Small Triangle |
o | EOC | Dot with in Circles |
p | Puppy | Dot with in Circles |
q | GS Antenna | GS Antenna |
r | Antenna Tower | Antenna Tower |
s | Boat | Boat |
t | TS | ? |
u | 18 Wheel Truck | |
v | Van | Dot with in Circles |
w | H20 | Flood |
x | X Windows | Red Dot |
y | House w/Yagi | House w/yagi |
z | X Windows | |
{ | FOG | FOG |
[PIPE] | Black Line | Black Line |
} | TCP | TCP |
~ | Sail Boat | Sail Boat |