PyMultimonAPRS : Passerelle APRS internet.

J'ai découvert PyMultimonAPRS au travers de la distribution HamsrvPI, permettant de décoder les trames APRS et de les envoyer vers un Serveur APRS-IS

La configuration de PyMultimonAPRS est très simple, dans le cas présent un Raspberry PI sous distribution HamsrvPI est utilisé et une clef RTL SDR RT820T. Une solution minimaliste et très économe en énergie pour une passerelle internet APRS.

A la connexion de la clef RTL_SDR sur le Raspberry PI, faire un cat /var/log/syslog ou avant la connexion du RTL SDR faire un tail -f /var/log/syslog, les lignes suivantes ou très similaires doivent apparaître.

Jan 15 23:36:45 nocall kernel: [ 1197.351392] usb 1-1.3.4: new high-speed USB device number 7 using dwc_otg
Jan 15 23:36:45 nocall kernel: [ 1197.463720] usb 1-1.3.4: New USB device found, idVendor=0bda, idProduct=2838
Jan 15 23:36:45 nocall kernel: [ 1197.463783] usb 1-1.3.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Jan 15 23:36:45 nocall kernel: [ 1197.463804] usb 1-1.3.4: Product: RTL2838UHIDIR
Jan 15 23:36:45 nocall kernel: [ 1197.463821] usb 1-1.3.4: Manufacturer: Realtek
Jan 15 23:36:45 nocall kernel: [ 1197.463837] usb 1-1.3.4: SerialNumber: 00000001


Lancer rtl_test, le RTL SDR doit être détecté.

sysop@nocall /etc $ rtl_test
Found 1 device(s):
  0:  ezcap USB 2.0 DVB-T/DAB/FM dongle

Using device 0: ezcap USB 2.0 DVB-T/DAB/FM dongle
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

Info: This tool will continuously read from the device, and report if
samples get lost. If you observe no further output, everything is fine.

Reading samples in async mode...
lost at least 112 bytes


Lancer une calibration avec KAL, cette application permet de définir l'offset du RTL SDR en se basant sur les émissions des relais GSM.

sysop@nocall /etc $ kal -s GSM900
Found 1 device(s):
  0:  ezcap USB 2.0 DVB-T/DAB/FM dongle

Using device 0: ezcap USB 2.0 DVB-T/DAB/FM dongle
Found Rafael Micro R820T tuner
Exact sample rate is: 270833.002142 Hz
kal: Scanning for GSM-900 base stations.
GSM-900:
        chan: 9 (936.8MHz + 17.205kHz)  power: 41145.98
        chan: 83 (951.6MHz + 16.280kHz) power: 29213.18
        chan: 86 (952.2MHz + 15.901kHz) power: 28002.47
        chan: 106 (956.2MHz + 15.735kHz)        power: 47412.55
      

Exécuter ensuite KAL avec l'option -c et le canal le plus puissant, ici le 106

sysop@nocall /etc $ kal -c 106
Found 1 device(s):
  0:  ezcap USB 2.0 DVB-T/DAB/FM dongle

Using device 0: ezcap USB 2.0 DVB-T/DAB/FM dongle
Found Rafael Micro R820T tuner
Exact sample rate is: 270833.002142 Hz
kal: Calculating clock frequency offset.
Using GSM-900 channel 106 (956.2MHz)
average         [min, max]      (range, stddev)
+ 15.700kHz             [15657, 15736]  (80, 19.215935)
overruns: 0
not found: 0
average absolute error: -16.419 ppm


L'offset est ici de -16.419 ppm, il faudra l'intégrer dans la commande, le RTL SDR sera alors pile sur (les) la fréquence de réception.

Faire un essai de réception APRS :

sysop@nocall /etc $ rtl_fm -f 144800000 -s 22050 -p -16.419 -g 42.0 - | multimon-ng -a AFSK1200 -A -t raw -

Found 1 device(s):
  0:  Realtek, RTL2838UHIDIR, SN: 00000001

 POCSAG512 POCSAG1200 POCSAG2400 EAS UFSK1200 CLIPFSK AFSK1200 AFSK2400 AFSK2400_2 AFSK2400_3 HAPN4800 FSK9600 DTMF ZVEI1 ZVEI2 ZVEI3 DZVEI PZVEI EEA EIA CCIR MORSE_CW DUMPCSV SCOPE
multimon-ng  (C) 1996/1997 by Tom Sailer HB9JNX/AE4WA
             (C) 2012/2013 by Elias Oenal
available demodulators: POCSAG512 POCSAG1200 POCSAG2400 EAS UFSK1200 CLIPFSK AFSK1200 AFSK2400 AFSK2400_2 AFSK2400_3 HAPN4800 FSK9600 DTMF ZVEI1 ZVEI2 ZVEI3 DZVEI PZVEI EEA EIA CCIR MORSE_CW DUMPCSV SCOPE
Enabled demodulators: AFSK1200
Using device 0: ezcap USB 2.0 DVB-T/DAB/FM dongle
Found Rafael Micro R820T tuner
Oversampling input by: 46x.
Oversampling output by: 1x.
Buffer size: 8.08ms
Tuned to 145053575 Hz.
Sampling at 1014300 Hz.
Output at 22050 Hz.
Exact sample rate is: 1014300.020041 Hz
Tuner gain set to 42.10 dB.


Si la réception est effective des trames doivent apparaître.

Ensuite configurer et personnaliser pymultimonaprs en éditant le fichier /etc/pymultimonaprs.json

Remplacer dans la ligne 'callsign' NOCALL par l'indicatif utilisé avec le SSID
Remplacer dans la ligne 'passcode' 0 par le code reçu avec UI-View par exemple pour pouvoir se connecter au serveur APRS-IS
Remplacer dans la ligne 'gateway' servercall.ampr.org:14580 par un serveur de la liste  APRS Tier 2 Network
Remplacer dans la ligne 'ppm' 20.000 par l'offset récupéré dans la ligne 'average absolute error' lors de la calibration du RTL SDR
Remplacer dans la ligne 'lat' 51.000000 par votre latitude (format deg.dec)
Remplacer dans la ligne 'lng' 10.000000 par votre longitude présente (format deg.dec)
Remplacer éventuellement dans la ligne 'table' / par la table souhaitée ici / = table primaire
Remplacer éventuellement dans la ligne 'symbol' & par le symbol souhaité ici & = GATE-HF dans la table primaire.
Ajuster dans la ligne 'comment' le commentaire envoyé par la balise 
Ajuster dans la ligne 'text' le texte envoyé par la balise 
Remplacer dans la ligne 'send_every' 900 par 2700 soit l'émission d'une balise toute les 45 minutes (nombre en seconde) 

/etc/pymultimonaprs.json d'origine :

{^M
        "callsign": "NOCALL",^M
        "passcode": "0",^M
        "gateway": "servercall.ampr.org:14580",^M
        "append_callsign": true,^M
        "source": "rtl",^M
        "rtl": {^M
                "freq": 144.800,^M
                "ppm": 20.000,^M
                "gain": 42.0^M
        },^M
        "alsa": {^M
                "device": "default"^M
        },^M
        "beacon": {^M
                "lat": 51.000000,^M
                "lng": 10.000000,^M
                "table": "/",^M
                "symbol": "&",^M
                "comment": "PyMultimonAPRS iGate",^M
                "status": {^M
                        "text": "Running with RTL dongle",^M
                        "file": false^M
                },^M
                "weather": false,^M
                "send_every": 900^M
        }^M
}^M


Au lancement de Pymultimonaprs avec sudo /etc/init.d/pymultimonaprs start, dans le fichier /var/log/syslog il apparaît bien sur avec l'indicatif correct :

Nov 17 13:04:16 nocall # aprsc 2.0.14-g28c5a6a
Nov 17 13:04:16 nocall login F1SRC (PyMultimonAPRS 0.8.4)
Nov 17 13:04:16 nocall # logresp F1SRC verified, server T2


Vérifier que la balise est bien reçue par exemple via aprs.fi et voir si la gateway relaye des stations.

Dans la distribution HamsrvPI, PyMultimonAPRS se lance automatiquement et écoute deux fréquences grace au RTL SDR, le 144,800 et le 145,825 MHz la fréquence APRS / Packet d'ISS.

Ressources :
Site sur github : http://asdil12.github.io/pymultimonaprs/
Config de Marco Kubon : http://www.kubonweb.de/?p=130

> Sommaire