WSPR RX mit dem Banana PI

WSPR Empfänger mit dem Banana PI 
als vollautomatische Konsolenlösung

Diese WSPR Konsolen-Installation benötigt keinerlei Bedienung. Nach dem Einschalten ist der ARM Computer sofort als WSPR Empfänger in Betrieb, empfängt über die Soundkarte, dekodiert die WSPR Spots und lädt diese nach wsprnet.org hoch.

Betriebssystem installieren und vorbereiten:

dieser Vorgang ist HIER beschrieben.

Schritte zum vollautomatischen WSPR Empfänger (ohne Benutzeroberfläche):

  1. fertige Installation wie beschrieben
  2. K9AN Decoder herunterladen und erstellen
  3. Empfänger einschalten und eine Aufnahme manuell machen
  4. diese Aufnahme dekodieren
  5. einen Cronjob erstellen
  6. das record Script erzeugen
  7. des decoder Script erzeugen

 

hier folgt die Detailbeschreibung:

Der K9AN Dekoder:

Dieser WSPR Dekoder ist ein Kommandozeilenprogramm. Es bekommt als Eingabe eine wav Audiodatei welche WSPR Signale enthält. Als Ausgabe werden die dekodierten WSPR Infos angezeigt.

Zuerst lädt man sich diese Software herunter, in das Home-Verzeichnis:

cd /home/bananapi

jetzt geht man mit einem Browser auf die Webseite https://github.com/k9an/wsprcan

und klickt dort auf "Download ZIP" um sich die Software herunterzuladen. Man speichert sie in /home/bananapi und entpackt sie mit:

unzip wsprcan-master.zip

und erstellt das Programm mit:
make

Die fertige Datei k9an-wsprd ist jetzt verfügbar. Mit einer WAV Datei mit WSPR Daten kann man es schon testen.
Ich hatte damit nur Erfolg, wenn diese Datei mit 12000 bps aufgenommen wurde. WAV Datein von einem Windows PC wurden nicht dekodiert. 

Testen des Decoders:

der Banana PI hat ein Mikrofon. Der Line-In ist zwar vorhanden, jedoch schlecht zugänglich. Die ersten Tests macht man daher so, dass man im Transceiver eine WSPR Frequenz einstellt und einen Kopfhörer anschließt. Diesen "setzt" man dem BananaPI auf, so dass das Mikrofon beschallt wird. Das reicht für mehr als guten WSPR Empfang völlig aus (nein, das ist kein Scherz, das klappt wirklich und zwar gut !)

Um unter Linux eine Audio-Aufnahme zu machen, benutzt man folgendes Kommando:

arecord -d 112 -f S16_LE -r 12000 -t wav  test.wav

es wird jetzt 112 Sekunden lang aufgenommen. Man startet die Aufzeichnung mit dem Beginn eines 2-Minuten WSPR Durchgangs, also zu Beginn einer geradzahligen Minute.

Ist die Aufnahme fertig kann man sie zur Kontrolle anhören:  aplay  test.wav

und danach dekodieren lassen:  ./k9an-wsprd  -f 10.1387 test.wav
nach kurzer Zeit werden die Rufzeichen angezeigt (falls die Aufnahme welche enthält).

Eine von mir aufgezeichnete wav Datei zum ersten Testen gibt es HIER. Sie enthält 5 Rufzeichen vom 30m Band.

Was können wir bis jetzt ?
a) Eine wav Datei mit WSPR Signalen aufzeichnen.
b) die Rufzeichen mit dem K9AN Dekoder dekodieren.

Automatischer WSPR Empfänger:

bisher hatten wir alles per Hand gemacht. Jetzt soll das System so aufgesetzt werden, dass der komplette WSPR Empfang inkl. der Upload der Spots nach wsprnet.org automatisch abläuft. Die folgenden Schritt sollte man nur dann machen, wenn man bereits manuell erfolgreich WSPR Daten gesehen hat, wie vorher beschrieben !

Start der Aufzeichnung, alle 2 Minuten:

WSPR Durchgänge dauern 2 Minuten und werden zu jeder geradzahligen Minute gestartet. Wir müssen also mit Hilfe eines Cronjobs die Aufnahme der Audiodatei wav starten. Dazu wird (als root) folgender Cronjob eingetragen (mit crontab  -e, wie das genau geht findet man leicht im Internet). Man kopiert also folgende Zeile in die crontab:

# Start WSPR Recording at every even minute
0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58 * * * * /home/bananapi/wsprcan-master/record

damit wird das folgende Script "record" alle 2 Minuten aufgerufen.

Das Record Script

DOWNLOAD des Record Scripts hier

der Cronjob ruft alle 2 Minuten folgendes Script auf:

#!/bin/bash
cd /home/bananapi/wsprcan-master/wav
file_num=$(ls -1 --file-type | grep -v '/$' | wc -l)
cd ..
if [ "$file_num" -le "1" ] ; then
   DT=$(date -u +"%y%m%d_%H%M")
   arecord -d 112 -f S16_LE -r 12000 -t wav /home/bananapi/wsprcan-master/wav/wspr_${DT}.wav 
   ./decode $DT &
fi

zunächst wird die Anzahl der wav Dateien festgestellt, denn es können mehr als 1 Aufzeichnung vorhanden sein, falls der Dekoder länger als 2 Minuten gebraucht hat. Wir akzeptieren jedoch maximal 2 gleichzeitige wav Dateien um die CPU nicht zu überfahren.

Wenn also keine oder maximal 1 wav Datei vorhanden ist, dann wird die neue Aufnahme gestartet. Wir zeichnen 112 Sekunden auf mit einer Bitrate von 12000, damit kommt der Dekoder am besten zurecht.

Ist die Aufnahme beendet, so wird der Dekoder aufgerufen, und zwar als Hintergrundprozess (&), denn es beginnt gleich wieder die nächste Aufnahme. Es läuft also immer eine Aufnahme und ein Dekoder gleichzeitig.

Der WSPR Decoder:

DOWNLOAD des Dekoder Scripts hier

ich habe mich für den Dekoder von K9AN entschieden, da dieser leicht zu kompilieren ist, wenig Ressourcen braucht und vor allem ein hervorragendes Dekodierergebis liefert, oft besser als der originale K1JT Dekoder.

./k9an-wsprd -f 0.4742 /home/bananapi/wsprcan-master/wav/wspr_${1}.wav >>spots
rm /home/bananapi/wsprcan-master/wav/wspr_${1}.wav
curl -F allmept=@/home/bananapi/wsprcan-master/wsprd.out -F call=RUFZEICHEN -F grid=QTHLOCATOR http://wsprnet.org/meptspots.php > /dev/null;

zunächst wird der Dekoder aufgerufen. Hier bitte unbedingt die richtige WSPR Frequenz, das Rufzeichen und den QTH-Locator eintragen, sonst verschandelt man die WSPR Webseite mit Fehlspots ! Nach der Dekodierung wird die wav Datei gelöscht.

Die gefundenen WSPR Daten werden in der Datei spots gespeichert, zum mitlesen, und in der Datei wsprd.out in einem Format welches sich für den Upload zu wsprnet.org eignet.

Der Upload erfolgt mit dem Befehl curl, in der angegebenen Schreibweise. Rufzeichen und QTH Locator bitte vorher eintragen.

Verzeichnisstruktur:

damit die Programme alles benötigte finden, sollte folgende Struktur eingehalten werden (oder man ändert die Scripts ab):

alle Programme kommen nach:

/home/bananapi/wsprcan-master

darunter erzeugt man ein Unterverzeichnis wav, also

/home/bananapi/wsprcan-master/wav

hier werden die Sound-Aufzeichnungen gemacht.

Ram-Disk:

Wenn man Bedenken hat dass die Aufzeichnungen mit der Zeit die SD Karte überfordern, so kann man das Unterverzeichnis wav als Ram-Disk anlegen, wie folgt:

Als root öffnet man die Datei:
/etc/fstab

und trägt dort folgende Zeile ein:

tmpfs   /home/bananapi/wsprcan-master/wav  tmpfs  nodev,nosuid,size=10M  0  0

Jetzt hat man eine 10MB große Partition im RAM und die SD Karte wird geschont.