Zurück in die Zukunft – Krassy goes NMEA2000

Die Krassy ist ein echter Oldtimer. Das ist in vielerlei Hinsicht schön: Sie sieht hübscher aus als ihre jüngeren Geschwister, sie ist stabiler, sie ist gutmütiger, hat viel Holz vor der Hütt’n (oder an Deck) und, vielleicht habe ich es schon erwähnt, sie ist echt hübsch! Es hat aber auch ein paar Nachteile, einen Oldtimer sein Eigen zu nennen. Ständig hat irgendetwas den End-of-life-Status erreicht, und dann wird’s teuer, arbeitsreich, mitunter ärgerlich und meistens kommt gleich eine ganze Kaskade Folgeprobleme auf einen zu. Nachdem das Großprojekt „neuer Motor“ erfolgreich abgeschlossen war, sollte es natürlich nicht langweilig werden, es wurde es Zeit für ein Folgeprojekt mit etwas mehr Wohlfühl-Faktor: Die Navigations-Elektronik.

Die Krassy wurde werftseitig mit schönen analogen VDO-Instrumenten ausgestattet. Die Original-Sensorik bestand im Prinzip nur aus einem Echolot, einer Logge und einem Windinstrument. So hatte die Krassy 4 VDO-Uhren im Cockpit, eine für Geschwindigkeit und „Kilometerzähler“, und drei für den Wind (Stärke, Richtung 360° und Windlupe). Das klassische Echolot stand auf der Ablage neben dem Niedergang. Der Voreigner hat der Krassy dann mal ein einfaches Garmin 126 GPS spendiert, und das war’s im Prinzip auch schon. Alle diese Geräte waren Insellösungen, die in keinster Weise miteinander kommuniziert haben.

Auch wenn ich die VDO-Uhren echt gemocht habe, haben sie langsam begonnen zu nerven. Die Logge funktionierte nur noch gelegentlich, das Zählen von Seemeilen hat sie schon vor längerer Zeit gänzlich aufgegeben. Die Windrichtungs-Anzeige war irgendwann auch defekt, und Ersatzteile sind schwer zu bekommen und im Zweifelsfall mit Gold aufzuwiegen. 

So saß ich im Corona-Winter 2020/2021 mit zu wenig zu tun und vielleicht auch mit zu viel Geld auf dem Konto in unserer Wohnung und langweilte mich erbärmlich. Ich begann zu überlegen, wie ich mich über den Winter beschäftigen konnte, eingesperrt wie wir waren. So entstand die Idee für ein Projekt: Ich würde der Krassy einen Satz neue Instrumente spendieren, alle vernetzt mit dem modernen (und mittlerweile auch 20 Jahre alten) NMEA2000-Standard. Das würde mich aber nicht über den Winter bringen. Immerhin stand das Boot in der Halle auf Fehmarn.

Wer unseren alten Blog kennt und unsere letzte Reise verfolgt hat, erinnert sich vielleicht noch an mein Raspberry Pi – AIS-Projekt. Ich habe einen Standalone-AIS-Empfänger mit einem Raspberry Pi verbunden, der die Daten dann in einem Bord-WLAN verteilt. Eine selbst entwickelte Android-App stellt die AIS-Lage dann auf dem Telefon oder Tablet dar.

Hier wollte ich nun ansetzen. Die AIS-Lösung soll natürlich weiterlaufen wie gehabt. Zusätzlich wollte ich die Daten aus dem NMEA2000-Netzwerk über den Raspberry im Netz verteilen und eine neue App entwickeln, die die relevanten Daten dann anzeigen kann. Damit kann man sich schon eher einen Winter lang beschäftigen.

Ich ging also einkaufen, Instrumente mussten her. Wir entschieden uns für die Garmin-Produktpalette. Ich bestellte ein Bundle aus Windinstrument und Echolot/Log mit integrierten Lagewinkelsensoren, dann wollten wir zumindest drei Anzeigen haben, eine für Wind und zwei weitere für alles andere. Selbstverständlich muss auch ein GPS ins Netzwerk eingebunden werden. Und weil ich in meiner App gerne eine Kompassrose darstellen wollte, brauchte ich auch einen Heading-Sensor (Kompass). Dann gab es noch einen neuen Raspberry und ein Modul (PiCAN-M), mit dem ich den Raspberry ins NMEA2000-Netzwerk einbinden kann. Das ist erstmal die Grundbetankung.

Als so langsam alle Bestellungen eingetrudelt sind, war es eine echte Freude, alles einmal zusammenzustöpseln. NMEA2000 ist, was die Installation angeht, echt Plug and Play. Alles zusammenstöpseln, Stromversorgung dran, und läuft. Schon schlagen die Anzeigen aus, wenn man bei der Logge oder dem Windinstrument am Rad dreht. 

Im ersten Schritt musste der Raspberry eingerichtet werden. Das war wieder ein kleiner Kampf, ich bin nicht gerade ein Linux-Freak und fange eigentlich immer wieder bei Null an. So brauchte ich schon ein paar Tage, bis er eingerichtet und konfiguriert war, bis das NMEA-Modul installiert und konfiguriert war, und bis ich endlich den NMEA-Rohdatenstream über den Bildschirm laufen sah. 

Nun müssen die NMEA-Messages irgendwie ausgelesen und dann im Bord-WLAN verteilt werden. Das PiCAN-M Modulkommt mit einer Python-Bibliothek, über die das Modul angesteuert und konfiguriert werden kann, und über die Messages im NMEA-Netzwerk gesendet und empfangen werden können. Ein kleines Python-Skript war schnell geschrieben, welches beim Start des Raspberry die NMEA-Schnittstelle einrichtet und in einer Endlosschleife Daten daraus empfängt und an eine Java-Software weiterleitet, die bereits im Rahmen des AIS-Projekts entstanden ist, und die sämtliche Nachrichten per UDP/TCP im Bord-WLAN verteilt. So standen nun neben den bereits vorhandenen NMEA0183-Messages des AIS auch die neuen NMEA2000-Messages im Netz zur Verfügung. Zuletzt zeichnete ich noch ein paar Daten von meinem Test-Aufbau auf, um für die weitere Arbeit nicht immer das NMEA-Netzwerk anschmeißen zu müssen. 

Der eigentliche Spaß, nämlich die App-Entwicklung für Android, konnte nun beginnen. Das war allerdings zunächst eine schmerzhafte Angelegenheit. Seit 2016/2017, als meine AIS-App entstand, hat sich in der Android-Welt viel geändert. Hier musste ich erst einmal wieder tief einsteigen, um mit dem neuen Android Studio zurechtzukommen, um dort meine alten Projekte zu laden und auf eine aktuellere Android-Version zu heben. Ich wollte das Rad natürlich nicht ganz neu erfinden und viel von dem AISViewer-Code wiederverwenden. 

Die größte Schwierigkeit bestand tatsächlich darin, die NMEA2000-Nachrichten zu decodieren. Der NMEA2000-Standard hat nämlich leider nichts, aber auch gar nichts mehr mit dem alten NMEA0183-Standard zu tun. NMEA2000 setzt auf dem CAN-Bus auf, ein Standard, der in der Automobilindustrie Gang und Gäbe ist, und der mit der seriellen Datenübertragung nicht mehr viel gemeinsam hat. Während die übertragenen Daten in NMEA0183-Nachrichten (abgesehen vom AIS) mehr oder weniger in Klartext drinstehen, war es selbst für die aus Datensparsamkeits-Gründen speziell codierten AIS-Nachrichten mit Hilfe vieler im Netz verfügbarer Informationen und Code-Beispiele gut zu bewältigen, die relevanten Daten herauszulesen. 

Der NMEA2000-Standard macht es einem da nicht so einfach. Eine Message sieht (zumindest in meiner Raspberry-Konfiguration) zum Beispiel so aus: 

09F80100   [8]  43 2C A4 1F 7F 30 48 05

Der erste Block enthält Informationen über den Sender und darüber, um welche Message es sich handelt, die hexadezimalen Zahlen enthalten die eigentlichen Daten (8 Byte). Einige Messages bestehen aus nur einem solchen Block, andere setzen sich aus mehreren Blöcken zusammen. Wenn man weiß, mit welcher Nachricht man es zu tun hat, kann man gut herausfinden, welche Daten in ihr codiert sind, da gibt es ganz gute Übersichten im Netz. Was man aber nicht weiß ist, wo exakt welche Daten stehen, und wie sie codiert sind. 

Im Prinzip kann man es sich so vorstellen, dass so eine Datenzeile aus einer Folge von 64 Eisen und Nullen besteht. Ein Kurs kann nun z.B. 16bit codiert sein (durch 16 Einsen und Nullen), oder auch 32bit. Nur welche 16 bzw. 32 Einsen und Nullen in der Sequenz enthalten den Kurs? Geht das gleich beim ersten Bit los? Oder steht da noch irgendeine Information vor, z.B. ein Zeitstempel oder eine Info darüber, ob es sich um einen Magnetkompasskurs oder einen rechtweisenden Kurs handelt? Ist das erste Bit das größte oder kleinste? Und wenn wir jetzt eine richtig große Message haben, die aus 5 oder mehr solcher Blöcke besteht, wird es nicht einfacher.

Der Weg zum Erfolg ist bekanntermaßen Beharrlichkeit. Den Standard findet man im Netz nicht, man kann ihn aber gegen eine horrende Gebühr bei der National Marine Electronics Association käuflich erwerben (naja, horrend für Hobby-App-Entwickler für den Eigenbedarf). Im Standard steht genau drin, wie die Daten zu interpretieren sind. Wenn man aber ungefähr weiß, welche Daten in einer Message enthalten sind, und auch weiß, welche Werte sie ungefähr haben müssen, und das in Kombination mit Tipps und Code-Schnipseln aus dem Netz, kann man hier tatsächlich etwas erreichen! Mit der Zeit setzt auch ein Lerneffekt ein. Immerhin werden ja immer wiederkehrende Codierungen benutzt. Letztendlich ist es mir nach sehr vielen Iterationen gelungen, die wesentlichen Nachrichten zu decodieren. Nun war der Weg frei für die eigentliche App-Entwicklung!

Mir schwebte eine App vor, die aus drei Hauptseiten besteht. Eine soll sämtliche Wind-bezogenen Daten anzeigen, und auch den Verlauf der Windstärke in der Vergangenheit anzeigen, eine soll einen Einblick in die GPS-Daten geben und eine weitere soll die Haupt-Navigationsdaten anzeigen. Ich wollte eine Darstellung des Wassertiefen-Verlaufs, und eine Alarmierung, wenn’s zu flach wird. Und so kamen immer mehr Ideen dazu. Nach vielen Wochen intensiver Programmier-Arbeit zu Steffis Leidwesen (ich bin nämlich kaum ansprechbar, wenn ich erst so richtig eingetaucht bin) stand ein erster Prototyp. 

Es war an der Zeit, die App einmal mit Echtzeit-Daten zu testen. Ich stöpselte meine Geräte also wieder zusammen, bändselte den Wind-Sensor am Balkon fest, startete den Raspberry und konnte mit Freude beobachten, wie sich meine Anzeigen mit Daten füllten.

Von nun an begann eine lange Phase der Optimerung, Fehlerbehebung und des Hübsch-Machens. Viele Fehler zeigen sich erst im echten Betrieb auf See. Also war der Laptop nachher beim Segeln immer dabei, um festgestellte Fehler direkt korrigieren zu können.

Noch stand der ganze Kram aber bei uns zu Hause rum. Gottseidank war der Winter allmählich vorbei, und die Saison rückte näher, auch der Krantermin (dank Corona-Sonderregelung für Bootsbesitzer) konnte zu Ostern stattfinden. Es fehlte hier die Zeit, alle Instrumente einzubauen. Wir bauten noch den Echolot/Log-Sensor ein, und das Windinstrument. Dafür mussten wir ein Mastkabel (das vom alten Instrument) austauschen, was erstaunlicher Weise besser funktioniert hat als erwartet. Für den Einbau der Instrumente und für die Verkabelung fehlte die Zeit. So mussten wir uns ohne Windinstrument auf den Weg zum neuen Heimathafen der Krassy machen (Cuxhaven), Log und Echolot konnten wir dank einer Bluetooth-Verbindung übers Telefon auslesen.

In Cuxhaven angekommen, nutzen wir die ersten Wochenenden, um alles schick und fertig zu machen. NMEA2000 ist wie gesagt ziemlich Plug-and-Play, aber bis man die richtigen Kabelwege und Einbauorte für die übrigen Sensoren gefunden hat, alles sauber verlegt wurde, und bis die Instrumente dann an Ort und Stelle waren, fertig verkabelt, und funktionierend, gingen viele Stunden ins Land. Und wo wir schon am Instrumenten-Panel dabei waren, haben wir der Krassy gleich noch ein paar schöne Außen-Lautsprecher gegönnt (und bei der Gelegenheit auch ein neues, Bluetooth- und DAB-fähiges Radio). Ach ja, und mit der Zeit gesellte sich auch noch ein Thermometer und ein Barometer im NMEA-Netzwerk dazu.

Jetzt, nach ein Paar Saisons mit den neuen Instrumenten, können wir sagen, dass sich die Arbeit gelohnt hat. Es ist schon ein anderer Schnack, wenn die Instrumente und Sensoren miteinander verknüpft sind, und man einfach zwischen wahrem und scheinbarem Wind umschalten kann, oder von einer Darstellung von Kurs und Geschwindigkeit durchs Wasser zu über Grund. Die App ist cool und war ein schönes Projekt, aber wirklich viel nutzen wir sie nicht. Wenn man aber unten in der Koje liegt, und wissen möchte, woher der Wind kommt, ist sie echt Gold wert! Tja, unsere alte Lady ist tatsächlich im Jahr 2000 angekommen.