Daten filtern

Um aus dem NMEA-Datenstrom die Koordinaten zu extrahieren, greifen Sie zu Awk. Das Programm filtert den Datenstrom, den es über eine Pipe erhält. Dabei dient im Beispiel aus Listing 5 das Komma als Feldtrenner (FS). Das Tool gibt das erste Feld ($1) aus, hier also das Dollar-Zeichen und die fünf folgenden Buchstaben. Im Beispiel aus Listing 6 wertet es nur diejenigen Zeilen aus, die den String GPGGA enthalten, und nennt die Felder für die Zeit und Position (Listing 6).

Listing 5

$ cat < /dev/ttyUSB0 | awk 'BEGIN { FS = "," } ; { print $1 }'

Listing 6

$ cat < /dev/ttyUSB0 | awk 'BEGIN { FS = "," } /GPGGA/ \
  { print "ID: ", $1, "Zeit: ",  $2, \
    "Breite: ",    $3, "Länge: ", $5, "Höhe: ", $10}'

Das Beispiel in Listing 7 formatiert die Ausgabe so, dass die Koordinaten in Dezimalgrad erscheinen statt in Grad und Minuten (Abbildung 2). Fünf Nachkommastellen genügen für eine metergenaue Positionsangabe, entsprechend der Auflösung von GPS. Die Variable OFMT regelt, dass die Software diese fünf Nachkommastellen anzeigt. Für Europa genügt die Beschränkung auf zwei führende Ziffern für die Grad-Angabe.

Listing 7

$ cat < /dev/ttyUSB0 | awk 'BEGIN { FS = "," } {OFMT = "%2.5f"} /GPGGA/ \
  { print "Uhrzeit:", \
    substr($2,1,2), ":", substr($2,3,2), ":", substr($2,5,4), ";", \
    "Breite:", substr($3,1,2)+ substr($3,3,7)/60, \
    "Länge:",  substr($5,1,3)+ substr($5,4,7)/60, \
    "Höhe:",   $10, "m"}'
Abbildung 2: Mithilfe von Awk formatieren Sie die Ausgabe der GPS-Maus so um, dass die Felder der Datenzeilen für Menschen leichter lesbar sind.

Erscheinen Ihnen die Vorbereitungen zu mühselig, um die Daten in die Konsole umzuleiten, greifen Sie zum Programm Putty, das Sie über sudo apt-get install putty auf einem Debian-System installieren (Abbildung 3). Setzen Sie den Aufruf sudo putty -log terminaldata.nme in einem Terminal ab, dann landen alle eingelesenen Daten in der entsprechenden Datei.

Abbildung 3: Das Terminalprogramm Putty hilft Ihnen dabei, die Daten aus einer GPS-Maus in einer Datei zu speichern.

Damit das klappt, passen Sie nach dem Start von Putty die drei Parameter Connection type (Serial), Serial line (/dev/ttyUSB0) und Speed (4800) an. Die Daten der Protokolldatei stehen für eine nachträgliche Analyse bereit. Dazu ersetzen Sie den Parameter < /dev/ttyUSB0 durch den Dateinamen der Protokolldatei aus der Putty-Session, hier terminaldata.nme.

Komfortabler bereitet das Programm Gpsmon die NMEA-Daten auf (Abbildung 4). Es gehört zum Paket gpsd-clients, dessen Programme fast alle auf Gpsd aufsetzen. Das Programm agiert flexibel: Es startet ohne Gpsd, anschließend übergeben Sie ihm einfach den Namen der entsprechenden Gerätedatei (im Beispiel /dev/ttyUSB0). Rufen Sie die Software ohne Parameter auf, holt es sich die Informationen über den Gpsd-Daemon.

Abbildung 4: Das Programm Gpsmon liefert eine übersichtliche Ausgabe der GPS-Daten, die es aus einer via USB angeschlossenen GPS-Maus ausliest.

Die Applikation präsentiert alle Daten, die sie in den Datenströmen findet. Das Feld Cooked PVT fasst Zeit und Position zusammen. Die Höhe fehlt an dieser Stelle, was auf den Ursprung des Datenformats hinweist: In der Hochseeschifffahrt bewegen sich alle Teilnehmer immer auf einer Höhe um null Meter.

Die Angabe Sentences listet die unterschiedlichen NMEA-Zeilen, hier sieben Gruppen. Die Daten im Feld (GP)GSV benennen die erkannten Satelliten. Die Auswertung erläutern wir im Zusammenhang mit dem Programm Xgps im Abschnitt "Genauigkeit". Zeit und Position stehen im Feld (GP)RMC – im Format, in dem NMEA sie ausgibt. Dabei handelt es sich um eine Reminiszenz an die Zeit, in der die angeschlossenen Geräte lediglich Zahlen anzeigten, aber nicht selbst umrechneten.

Im Prinzip ließe sich die Geschwindigkeit aus der Dopplerverschiebung der Signale vom Satelliten unabhängig von der Position berechnen. Einfache Geräte wie die vorliegende GPS-Maus verzichten darauf. Stattdessen leiten sie die Geschwindigkeit aus der zeitlichen Änderung des Orts ab, ebenso den Kurs. Ein ruhender GPS-Empfänger dieser Bauart kennt keine Orientierung und weiß nicht, wo Norden ist.

Besondere Bedeutung hat der Eintrag FAA. Der Buchstabe D bedeutet, dass die Hardware Korrektursignale über geostationäre EGNOS-Satelliten (Europa) oder die WAAS-Pendants (USA) empfängt. Bei schlechtem Empfang gelingt das nicht, FAA trägt dann den Wert A.

Das GPS-System weiß erst einmal nichts über die Qualität der Signale. Als Hinweis dient die abgeleitete Größe Dilution of Precision (DOP). Der Geometriefaktor sagt aus, wie gut die Satelliten am Himmel verteilt sind. Ein Wert kleiner 2 ist gut, einer über 5 schlecht. Der Geometriefaktor zählt zu den Gründen, warum das Bestimmen der Höhe weniger präzise erfolgt als das Bestimmen der Position in der Ebene: Die Erde schirmt die Satelliten unterhalb des Betrachters ab. Ein weiterer Grund liegt in der Unsicherheit der Geoidbestimmung, also der Berechnung der Entfernung vom Erdmittelpunkt zur Erdoberfläche.

Schnittstelle

Gpsd [3] filtert als Hilfsprogramm die Nutzdaten aus dem NMEA-Datenstrom eines GPS-Geräts und stellt sie für andere Programme am Port 2947 auf Abruf bereit. Geht alles gut, erkennt die Software das angeschlossene Gerät und vereinbart den bestmöglichen Datenaustausch.

Die hier verwendete GPS-Maus nimmt keine Steuerbefehle entgegen. Deshalb beschränkt sich Gpsd darauf, die Baudrate richtig zu erkennen. Seine Default-Werte holt sich das Programm aus der Datei /etc/default/gpsd (Listing 8). Der erste Wert legt fest, dass die Software als Hintergrunddienst ("Daemon") startet, mit USBAUTO=true erkennt es automatisch angeschlossene GPS-Geräte.

Listing 8

START_DAEMON="true"
GPSD_OPTIONS="-n -b"
DEVICES=""
USBAUTO="true"
GPSD_SOCKET="/var/run/gpsd.sock"

So einfach der Einsatz scheint, gibt es dennoch zwei Dinge, die Benutzer unter Umständen in die Verzweiflung treiben. So kennt das Protokoll NMEA keinen Rückkanal. Um dennoch Parameter für das Gerät einzustellen, wie etwa die Übertragungsrate, nehmen manche GPS-Geräte chipspezifische Binärcodes entgegen. Viele davon kennt Gpsd und versucht, die Baudrate zu optimieren. Manche Geräte interpretieren die Befehlsfolgen jedoch falsch und verweigern anschließend das Übermitteln der Daten. Sicherheitshalber haben die Entwickler die Liste der Optionen um den Schalter -b ergänzt, um ein Senden durch Gpsd zu unterbinden.

Das zweite Problem tritt auf, wenn der Daemon mit einem anderen Dienst konkurriert – beispielsweise mit sich selbst, wenn Sie den Dienst mit anderen Parametern oder mit dem Programm Gpsfake starten möchten. Listing 9 veranschaulicht das Problem am Beispiel des Aufrufs gpsd -N -n -D 3 /dev/ttyUSB0, der oft bei der Fehleranalyse zum Einsatz kommt.

Listing 9

$ sudo killall gpsd
$ gpsd -N -n -D 3 /dev/ttyUSB0
gpsd:INFO: launching (Version 3.11)
gpsd:ERROR: can't bind to IPv4 port gpsd, Address already in use
$ gpsmon
tcp://localhost:2947          JSON slave driver>

Der Befehl killall in Zeile 1 beendet Gpsd. Mit den Schaltern -N (nicht als Daemon starten) und -D 3 (im Terminal anzeigen, was gerade passiert) schlägt der Neustart des Programms (Zeile 2) mit der Fehlermeldung already in use fehl (Zeile 4).

Den Aufruf von Gpsmon ohne Angabe des GPS-Geräts hätte das Programm mit der Fehlermeldung gpsmon: activation of device tcp://localhost:2947 failed, errno=111 (Connection refused) quittieren müssen, wenn Gpsd nicht aktiv ist. Stattdessen startet das Programm, wartet aber erfolglos auf Daten.

Ein kurzes Abziehen und erneutes Einstecken der GPS-Maus startet den Daemon korrekt; Gpsmon erhält nun die Daten vom Satelliten. In dem Zustand hilft das Programm Lsof [1] dabei, den Port 2947 zu untersuchen, auf dem der Daemon sendet (Listing 10). Wie erwartet laufen die Programme Gpsmon und Gpsd (Zeile 5 bis 8).

Listing 10

$ sudo lsof -i :2947
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
systemd    1 root   39u  IPv6  71185      0t0  TCP ip6-localhost:gpsd (LISTEN)
systemd    1 root   40u  IPv4  71186      0t0  TCP localhost:gpsd (LISTEN)
gpsd    4525 gpsd    4u  IPv6  71185      0t0  TCP ip6-localhost:gpsd (LISTEN)
gpsd    4525 gpsd    5u  IPv4  71186      0t0  TCP localhost:gpsd (LISTEN)
gpsd    4525 gpsd    9u  IPv4  72940      0t0  TCP localhost:gpsd->localhost:57664 (ESTABLISHED)
gpsmon  4556   rp    3u  IPv4  74098      0t0  TCP localhost:57664->localhost:gpsd (ESTABLISHED)
$ sudo killall gpsd
$ sudo lsof -i :2947
COMMAND PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
systemd   1 root   39u  IPv6  71185      0t0  TCP ip6-localhost:gpsd (LISTEN)
systemd   1 root   40u  IPv4  71186      0t0  TCP localhost:gpsd (LISTEN)
$ sudo systemctl stop gpsd.service
Warning: Stopping gpsd.service, but it can still be activated by: gpsd.socket
$ sudo systemctl stop gpsd.socket

Zusätzlich ist ein Socket (Schnittstelle zum System) über Systemd aktiv. Beenden Sie den Daemon mit killall (Zeile 9), bricht Gpsmon erwartungsgemäß ab. Aber das Socket über Systemd bleibt weiterhin präsent. Übersehen Sie diese Tatsache, verzweifeln Sie bei der Fehlersuche: Die GPS-Programme scheinen ordnungsgemäß zu laufen, finden aber keine Daten.

Der Befehl systemclt stop gpsd in Zeile 14 liefert das gleiche Ergebnis wie das Kommando killall. Aber er gibt einen Hinweis, was zu tun ist. Stoppen Sie das Socket (Zeile 16), enden alle Zugriffe auf Port 2947.

Jetzt gelingt auch der Aufruf von Gpsd im Editor-Modus, wie wir ihn bereits in Listing 6 versucht haben. Startet das Programm Gpsmon in einem eigenen Terminalfenster, sehen Sie im Gpsd-Fenster die Daten, die über den Port 2947 fließen.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF
Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Neues auf den Heft-DVDs
    Nur mit dem optimalen System und der richtigen Software nutzen Sie das volle Potenzial Ihres Rechners. Mit der Heft-DVD erhalten Sie nicht nur topaktuelle Distributionen, sondern auch die passenden Programme zu den Artikeln.
  • Software
  • Offroad-Navi auf Linux-Basis im Eigenbau
    Ein alter EeePC mit Linux macht als Basis für ein leistungsfähiges Offroad-Navi eine gute Figur. Beim Zusammenstellen der weiteren Komponenten gilt es aber, einiges zu beachten.
  • Satelliten verfolgen mit Gpredict
    Eine Vielzahl unterschiedlichster Satelliten umkreist mittlerweile unseren Planeten. Welche davon Sie wo am nächtlichen Himmel als Lichtpunkt beobachten können, sagt ihnen Gpredict.
  • Breitband-Internetzugang per Satellit
    Auf den ersten Blick scheinen DSL-Flatrates und Breitbandzugänge allgegenwärtig zu sein. Doch die Versorgung ist keineswegs flächendeckend: Gerade in Randbezirken oder abgelegenen Gebieten muss man weiter auf DSL verzichten. Eine Alternative bietet dort die Versorgung via Satellit.
Kommentare

Infos zur Publikation

LU 12/2017: Perfekte Videos

Digitale Ausgabe: Preis € 5,95
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Stellenmarkt

Aktuelle Fragen

Broadcom Adapter 802.11n nachinstallieren
Thomas Mengel, 31.10.2017 20:06, 2 Antworten
Hallo, kann man nachträglich auf einer Liveversion, MX Linux auf einem USB-Stick, nachträglich...
RUN fsck Manually / Stromausfall
Arno Krug, 29.10.2017 12:51, 1 Antworten
Hallo, nach Absturz des Rechners aufgrund fehlendem Stroms startet Linux nicht mehr wie gewohn...
source.list öffnet sich nicht
sebastian reimann, 27.10.2017 09:32, 2 Antworten
hallo Zusammen Ich habe das problem Das ich meine source.list nicht öffnen kann weiß vlt jemman...
Lieber Linux oder Windows- Betriebssystem?
Sina Kaul, 13.10.2017 16:17, 6 Antworten
Hallo, bis jetzt hatte ich immer nur mit
IT-Kurse
Alice Trader, 26.09.2017 11:35, 2 Antworten
Hallo liebe Community, ich brauche Hilfe und bin sehr verzweifelt. Ih bin noch sehr neu in eure...