Die aktuelle genaue Position des Raspberry Pi oder eines anderen Linux Computer zu kennen, ist unter Umständen eine gute Idee. Dazu schließt man ein GPS Gerät an und startet den GPS Daemon gpsd. Als Nebeneffekt stellt GPS auch absolut präzise Zeitinformationen bereit. Das kann insbesondere für den Raspberry Pi sehr hilfreich sein, da er über keine eingebaute Uhr verfügt. Es muss auch nicht immer das aktuellste GPS Gadget sein - der Artikel zeigt, wie man ein ausgedientes GPS Outdoor Handheld Triton 400 von Magellan mit einem Linux Computer verbindet und ihm damit eine neue sinnvolle Aufgabe gibt.
Die Triton Serie von Magellan GPS besteht aus einer Reihe von Handgeräten, die sich durch ihre Ausstattung (Kompass, Höhenmesser, Kamera) unterscheiden, ansonsten aber weitgehend die gleiche Software verwenden, die auf dem Betriebssystem Windows CE aufbaut.
Ein Triton 400 hat mir einige Jahre lang gute Dienste auf Wanderungen bei der Orientierung im Gelände geleistet. Allerdings war ich nie völlig zufrieden mit dem Gerät, insbesondere häufige Abstürze mit Komplettverlust der Datenbank und die schlechte Windows Software führten vor einem Jahr zur Ablösung des Gerätes durch einen Oregon 600 von Garmin.
Der Triton lag nun nutzlos herum und so stellte sich die Frage, ob man ihn nicht einer sinnvollen Tätigkeit als Positions- und Zeitgeber für einen Raspberry Pi zuführen kann. Im Prinzip ist der Triton dafür geeignet, da er über seinen USB Anschluss die empfangenen GPS Daten im NMEA Format ausgeben kann. Dieses Format ist standardisiert, jede GPS Software sollte damit umgehen können. Allerdings kann Linux mit einem Magellan Triton Gerät zunächst nichts anfangen. Es sind aber nur wenige Schritte erforderlich, um beide zur Zusammenarbeit zu bewegen.
Zunächst ist sicherzustellen, dass im Einstellungsmenü des Triton der korrekte USB Mode NMEA - USB und die Baud Rate 9600,8,N,1 eingestellt sind (Abb. 1). Dann kann man das Gerät mit dem Raspberry Pi (oder einem anderen Linux Rechner) verbinden. Auf dem Triton erscheint jetzt die Aufforderung zur Auswahl des Verbindungsmodus, hier wählt man NMEA - USB aus (Abb. 2). Das Kommando dmesg zur Ausgabe der Kernelnachrichten auf dem Raspi vermeldet dann schon ein erstes Lebenszeichen des Triton:
usb 1-1.4: New USB device found, idVendor=120f, idProduct=5260 usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3 usb 1-1.4: Product: TRITON usb 1-1.4: Manufacturer: MAGELLAN
Wichtig an dieser Information sind die Vendor- und Product-Id, welche den Triton eindeutig identifizieren. Mittels dieser Ids versucht der Kernel ein Modul zu finden und zu laden, das für das Gerät zuständig ist und die weitere Kommunikation übernimmt. Leider ist für die Ids des Triton aktuell kein Modul konfiguriert.
Es gibt allerdings ein Modul, welches die Verbindung zum Triton herstellen kann: ipaq. Es ist eigentlich für PDAs der iPAQ Produktlinie gedacht. Diese laufen genauso wie der Magellan Triton unter Windows CE oder Windows Mobile. Um die Zuständigkeit des ipaq Moduls auch auf den Triton zu erweitern, muss man es explizit laden und ihm dann über einen speziellen sysfs Mechanismus die zusätzlichen Vendor- und Product-Ids mitteilen:
sudo -s modprobe ipaq echo 120F 5260 > /sys/bus/usb-serial/drivers/ipaq/new_id
Der Erfolg zeigt sich unmittelbar im Kernellog per dmesg:
ipaq 1-1.4:1.0: PocketPC PDA converter detected usb 1-1.4: PocketPC PDA converter now attached to ttyUSB0
Das neu erzeugte Device /dev/ttyUSB0 erlaubt nun den Empfang der NMEA Records vom GPS. Testen lässt sich das zum Beispiel mit socat, das die von der seriellen Schnittstelle gelieferten NMEA Daten auf der Konsole ausgibt:
socat /dev/ttyUSB0,b9600,cs8,parenb=0 STDOUT $GPGLL,4957.9685,N,00822.8876,E,235956.033,N,V*4B $GPGGA,235956.03,4957.9685,N,00822.8876,E,0,00,0.0,00095,M,00048,M,,*54 $GPRMC,235956.33,V,4957.9685,N,00822.8876,E,0.00,0.0,281006,,*13
Um das Laden des Moduls und das Schreiben der Ids in das sysfs nicht jedes Mal von Hand erledigen zu müssen, kann man eine udev Regel hinterlegen. Sie reagiert auf das hinzufügen (add) eines Gerätes mit den spezifizierten Attributen Vendor- und Product-Id und führt dann die erforderlichen Aktionen im RUN Block aus. Dazu legt man die neue Datei /etc/udev/rules.d/90-triton.rules an mit dem Inhalt:
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="120f", ATTRS{idProduct}=="5260", RUN+="/bin/bash -c 'modprobe ipaq && echo 120f 5260 > /sys/bus/usb-serial/drivers/ipaq/new_id'"
Das direkte Parsen und Auswerten der NMEA Datensätze kann relativ aufwändig sein. Besser delegiert man diese Aufgabe an den GPS Daemon gpsd, der Bestandteil der meisten Linux Distributionen - auch von Raspbian - ist. Nachdem der Magellan Triton mit dem Raspi verbunden und über die Schnittstelle /dev/ttyUSB0 ansprechbar ist, startet man gpsd per
gpsd /dev/ttyUSB0
Einen ersten Überblick über die Funktion liefern die Tools cgps für die Kommandozeile oder xgps mit einer grafischen Ausgabe der Positionen der GPS Satelliten (Abb. 3).
Mit einem laufenden gpsd öffnet sich die Tür zu vielen ortsbasierten Anwendungen, wie der Linux-Navigationssoftware GpsDrive oder der Kartenanwendung QLandkarte. Der WLAN Detektor Kismet nutzt gpsd zur Bereitstellung von Koordinaten für WLAN Netzwerke. Last but not least kann gpsd auch exakte Zeitinformationen für den Unix Zeitdienst ntp bereitstellen. Details zur Konfiguration finden sich im GPSD Time Service HOWTO. Das ist insbesondere für Raspberry Pis interessant, die über keine Netzwerkverbindung verfügen. Da der Raspi auch keine eingebaute, batteriegepufferte Echtzeituhr (RTC) besitzt, ist dann das GPS eine Alternative, um trotzdem an die aktuelle Uhrzeit zu kommen.