Auto LOG und QRZ.com Upload mit FT8 und wsjtx (für Linux)

FT8 ist weitverbreitet und selbst im Sonnenfleckenminimum sind weltumspannende QSOs fast täglich möglich.

Wenn man ein Logbuch führen will (oder muss, z.B. auf 6 und 4m), so schaltet man die Logging Funktion ein "Prompt me to log QSO":

                   

nach jedem erfolgreichen QSO klappt ein Fenster auf, wo die QSO-Daten bereits eingetragen sind. Man muss nur mehr auf OK klicken und das QSO wird in den Log-Dateien gespeichert.

Ein griechischer OM hat mich mit seinem YouTube Video auf eine Idee gebracht. Er hat (unter Windows, mit Zusatzprogrammen) einen automatischen Klick auf den OK-Button gemacht.

Automatik unter Linux:

Viele OMs, wie auch ich, betreiben FT8 auf einem Odroid, Raspi oder einem anderen der vielen Einplatinencomputer, oder auch auf einem Linux-PC.

Glücklich ist wer Linux benutzt (!), denn Linux hat alles was wir brauchen standardmäßig mit an Board. Keine Zusatzprogramme, keine wilden Tricksereien sondern alles klar und geradlinig.

Für ein automatisches Logging brauchen wir nicht mal ein Programm, es reicht ein kleines Shell-Script welches von den leistungsfähigen Bash-Kommandos gebrauch macht. Dieses möchte ich euch hier vorstellen. Wir gehen schrittweise vor, erstmal das einfachste, und danach die Erweiterung zum qrz.com Upload.

Das komplette fertige Script:

* Kopiere dieses Script in eine Textdatei z.B.: logqso

* Mache diese Textdatei ausführbar mit dem Befehl:  chmod 755 logqso

* Und rufe sie in einer Konsole auf:  ./logqso

DOWNLOAD:

klick: logqso Script zum Download

Das Script im Detail:

Automatisches Klicken des OK Buttons im Log Fenster:

1. Abfrage ob das wsjtx-Log-Fenster geöffnet ist

Auflisten aller offenen Fenster:

wmctrl -l   (falls wmctrl auf eurem System nicht vorhanden ist, dann einfach installieren)

aus dieser Liste das Log-Fenster herausfiltern:

wmctrl -l | grep 'Log QSO'

die Infos zum Log-Fenster in der Variablen wininfo speichern:

wininfo="$(wmctrl -l | grep 'Log QSO')"

der Rückgabewert jedes Kommandos kann man $? abgefragt werden. Ist das Log-Fenster vorhanden, so ist $? null, ist das Fenster nicht vorhanden dann 1.

2. Endlosschleife mit der Fensterabfrage

damit wir laufend checken ob das Log-Fenster aufgeht, lassen wir obiges Kommando in einer Endlosschleife laufen:

while true
do
  wininfo="$(wmctrl -l | grep 'Log QSO')"
  if [ $? == 0 ] 
  then
    ... mache irgend etwas ...
  fi
  sleep 2
done

sobald das Log-Fenster aufgeht, werden die Befehle bei "mache igend etwas" ausgeführt. Ist das Log-Fenster nicht da, so passiert nichts. Das "sleep 2" sorgt bei jedem Durchlauf für eine Pause von 2 Sekunden. Das ist wichtig weil der Computer auch andere Aufgaben hat als nur das Log-Fenster zu checken.

3. Drücken des OK-Buttons

jetzt füllen wir "...mache irgend etwas..." mit den gewünschten Funktionen.

Das wichtigeste ist, dass der OK Button gedrückt wird und somit das QSO geloggt wird.
Das wird mit folgendem Kommando gemacht:

Als erstes brauchen wir die ID des Log-Fensters, welche aus der vorher gelesenen Fensterliste kommt und mit diesem Kommando daraus extrahiert wird:

winID=$(echo $wininfo | cut -d " " -f 1)

Jetzt haben wir die Fenster-ID und stellen die Maus auf die Position x=360 und y=255 bezogen auf die linke, obere Ecke des Log-Fensters wo derOK-Button ist, mit dem Zusatz "click 1" lassen wir die Maus auch gleich klicken.

xdotool mousemove --window $winID 360 255 click 1        (falls xdotool auf eurem System nicht vorhanden ist, dann einfach installieren)

Der OK-Button im Log-Fenster wurde jetzt automatisch geklickt, das Logfenster schließt sich wieder und das QSO ist geloggt.

4. Warte bis wsjtx fertig ist

Zunächst machen wir eine Pause von 1s damit wsjtx alle logs schreiben kann

sleep 1

Danach prüfen wir noch ob das Log-Fenster auch wirklich weg ist. Diese Prüfung ist wichtig, da sonst im Fehlerfall unschöne Endlosschleifen entstehen könnten.

wmctrl -l | grep 'Log QSO' &> /dev/null
while [ $? == 0 ]; do sleep 1; done;

5. und noch eine schöne Ausgabe in der Konsole

Damit es auch schön aussieht, drucken wir noch das Call des gerade gespeicherten QSOs aus:

Dazu lesen wir die letzte Zeile der Log Datei:

arr="$(awk 'NF{a=$0} END{print a}' /home/odroid/.local/share/WSJT-X/wsjtx.log)"

(man kann das auch mit "tail" machen, aber ich wollte es mal so probieren :-)  )

dann extrahieren wir das Rufzeichen:

call=$(echo $arr | cut -d "," -f 5)

und schreiben eine Meldung in die Konsole:

echo -ne "QSO logged : $call, uploading to QRZ.COM ... "

Upload des QSOs nach QRZ.com

jeder kann auf qrz.com ein Logbuch anlegen und führen. Richtig nutzbar wird es aber erst wenn man die billigste Subscription kauft. Damit hat man nicht nur eine Export Möglichkeit sondern auch Zugriff via XML und somit über ein Script wie dieses.

API-Key zuweisen:

Sobald man die Subscription gekauft hat, wird im qrz.com Logbuch (Klicke SETTINGS, Abschnitt "Logbook Info") ein Book API Key angezeigt. Diesen weisen wir zunächt einer Veriablen zu:

    qrzkey="1234-5678-90AB-CDEF"

ADIF Daten des letzten QSOs laden:

QRZ.com benötigt QSO Daten im ADIF Format. wsjtx bietet wieder auch im ADIF Format an. Perfekt, wir müssen nichts weiter tun als die letzte (aktuelle) Zeile des wsjtx Log auszulesen und zu qrz.com zu schicken.

adi="$(tail -n 1 /home/odroid/.local/share/WSJT-X/wsjtx_log.adi)"

man kann das Ergebnis dieser Abfrage mit dem Befehl:  echo $arr  überprüfen.

Upload zu qrz.com:

dazu wird das unter Linuxern bekannte und beliebte Programm "curl" benutzt:

res="$(curl -s --data "KEY=$qrzkey&ACTION=INSERT&ADIF=$adi" http://logbook.qrz.com/api)"

der Rückgabewert des curl Befehls schreiben wir in die Variable "res". Hier können wir nachsehen ob der Upload erfolgreich war:

if [[ $res = *"RESULT=OK"* ]]; then echo "Upload OK"; else echo "Upload FAILED: $res"; fi;

Fertig

Sobald wir ein QSO abgeschlossen haben wir dieses Script den OK Button drücken und das QSO nach qrz.com hochladen.