AvNav-Android

AvNav Android

Nachdem die Navigations-App für die Nutzung mit dem Raspberry Pi  bereits einige Jahre erfolgreich im Einsatz ist, gibt es jetzt auch eine Version, die direkt (ohne einen Raspberry) auf Geräten mit Android läuft, z.B Tablets oder Handys. Sie erfordert Android ab 4.4 (KitKat).

Die aktuellste Version kann man unter Downloads herunterladen oder im AppStore.
Ältere Versionen oder "daily builds" findet man über die Installationsbeschreibung.

Sie verpackt im Wesentlichen die Web App (siehe Beschreibung) in eine Android Applikation - siehe dort auch die Verfahren zum Erzeugen/Konvertieren der Karten.

Funktion 

(neu ab 20210424)

Die App besteht intern aus mehreren Funktionsblöcken .

Der NMEA-Multiplexer verarbeitet NMEA0183-Daten von den verschiedenen Quellen. Neben dem internen Geräte-GPS können die Daten von Quellen wie TCP-Verbindungen, UDP Ports, USB-Geräten oder Bluetooth-Verbindungen kommen. Die meisten Quellen unterstützen das gleichzeitige Senden und Empfangen von Daten. Es können jeweils mehrere Quellen des gleichen Typs konfiguriert werden (in der App-Konfiguration existiert für jede Quelle ein sogenannter "Handler").

Name in der App Beschreibung
InternalGPS Die Daten des internen GPS werden als NMEA-Daten eingespeist.
TcpReader Eine TCP-Verbindung zu einem externen System. AvNav ist dabei ein TCP-Client und öffnet die Verbindung.
Als Adresse kann sowohl eine IP-Adresse, als auch ein Hostname angegeben werden. Auch ein mDNS-Name wie avnav.local kann benutzt werden.
TcpWriter AvNav ermöglicht es einer anderen App oder einem anderen System, sich zu verbinden und Daten zu empfangen. AvNav ist hier der TCP-Server.
UdpReader AvNav empfängt UDP-Daten auf dem konfigurierten Port.
UdpWriter AvNav sendet UDP-Daten zur konfigurierten Adresse und zum konfigurierten Port.
UsbConnection Daten können über einen angeschlossenen USB-Seriell-Wandler gesendet umd empfangen werden. Das erfordert allerdings USB-OTG-Funktionalität auf dem Gerät.
Bluetooth Eine Verbindung zu einem Bluetooth-Gerät. Das Pairing des Gerätes muss vorher außerhalb von AvNav erfolgen.
NMEA0183 service Eine Verbindung zu einem System, das seine NMEA0183-Daten als TCP-Service über mDNS (Bonjour/Avahi) bereit stellt.
AvNav öffnet eine TCP-Verbindung zu einem solchen Gerät.

Der NMEA-Multiplexer kann sehr flexibel konfiguriert werden. Zu jeder Verbindung lassen sich Eingangs- und Ausgangsfilter festlegen.

Der Multiplexer reicht intern die Daten auch an die anderen Bereiche der App weiter. Der Dekoder bereitet die Daten dann für die Nutzung innerhalb der App auf.

Die eigentliche App mit der Kartendarstellung und den Anzeigen kann einerseits ganz normal als Android-App genutzt werden. Parallel dazu kann der integrierte Webserver aktiviert werden. Das ermöglicht den Zugriff mit einem Browser von weiteren Geräten aus, so wie auch in der Server-Variante.

Der Anzeige-Teil der App kann beendet werden, sodass der Multiplexer allein im Hintergrund weiter läuft. Damit kann AvNav auch genutzt werden, um NMEA-Daten für andere Android-Apps bereitzustellen. In AvNav konfiguriert man dazu einen TcpWriter, in den zugreifenden Apps verbindet man sich über die Adresse 127.0.0.1 und den vorher konfigurierten Port).

Karten und gespeicherte Daten

AvNav speichert alle seine Daten und die Karten in einem Arbeitsverzeichnis. Es kann gewählt werden, ob das Verzeichnis im "internal storage" oder im "external storage" liegt. Je nach Gerät kann das externe Verzeichnis auf einer SD-Karte liegen. In beiden Fällen ist das Verzeichnis aufgrund der Android-Restriktionen aber nicht für andere Apps zugreifbar.
Daher müssen die Daten über die AvNav App geladen oder exportiert werden. Ausnahme ist ein zusätzliches externes Kartenverzeichnis, aus dem AvNav gemf-Karten (oder xml Dateien) lesen kann.

Die Karten werden im gemf- Format erwartet, ab Version 20200325 auch als "mbtiles" oder "*.xml files".

Die Karten müssen auf das Gerät in das "external charts dir" kopiert oder in der App hochgeladen werden . Zusätzlich sind einige Demo-Karten vorinstalliert, die allerdings eine Online-Verbindung erfordern.

Um O-Charts-Vektorkarten (oder S57-Karten) zu nutzen, muss man avocharts installieren und die Karten dort hochladen.

Um Daten auf dem Gerät zu speichern oder sie vom Gerät zu laden, sollte sinnvollerweise ein Dateimanager auf dem Android-Gerät installiert sein.

Benutzung

Nach dem erstmaligen Start der App befindet man sich auf einer Einführungsseite:


Nach dem Klick kommt man auf die Einstellungsseite:

Hier können neben anderen Einstellungen z. B. das interne oder externe Arbeitsverzeichnis gewählt sowie das externe Karten-Verzeichnis gesetzt werden.
Außerdem können hier auch alle Einstellungen zurückgesetzt werden.
Eine Liste aller Einstellungen findet sich hier.
Die Einstellungen für die NMEA-Datenquellen und einige weitere erreicht man in der App über die "Server/Status"-Seite .

Die "Settings"-Seite kann über den "OK"-Button (oben rechts) oder über den "Zurück"-Button verlassen werden.
Immer wenn die Einstellungen verlassen werden, prüft AvNav, ob die notwendigen Berechtigungen erteilt wurden.
AvNav braucht die folgenden Berechtigungen:

  • genauer Standort (GPS) während der Nutzung der App
  • Benachrichtigungen für eine Anzeige, dass AvNav läuft, auch wenn es im Hintergrund ist

Zusätzlich prüft AvNav, ob der Energiesparmodus aktiv ist. Falls ja, kann AvNav im Hintergrund nicht das interne GPS des Gerätes nutzen. AvNav zeigt dann eine Warnung an.

Anschließend wird die Hauptseite der App aufgerufen. Beim ersten Start erhält man vorher noch einen Dialog, um den Nutzungsbedingungen zuzustimmen, und es wird eine Liste der zur Verfügung stehenden Layouts zur Auswahl angeboten.

Das Bild zeigt den Empfang einer gültigen Position (oberer grüner Punkt), aber bisher keinen Empfang von gültigen AIS-Daten (unterer gelber Punkt).
Um zu den Android Einstellungen zu gelangen, muss zunächst die Einstellungsseite in der App aufgerufen werden, dort klickt man dann auf den "Android"-Button.
Bei weiteren Starts erreicht man sofort die Hauptseite der App.
Für eine Beschreibung der Benutzung siehe hier.

Externer Zugriff

(neu ab 20210424).

Die App ermöglicht es, dass man sich mit einem Browser von anderen Geräten verbinden kann. Dazu muss in der App der Web-Server aktiviert werden (Status/Server Seite ).
Bei der Aktivierung des Web-Servers muss zunächst "externalAccess" aktiviert werden. Mit "mdnsEnabled wird dafür gesorgt, dass sich eine Bonjour-fähige App (z.B. BonjourBrowser)sich mit dem Server der App verbinden kann.

In älteren Versionen hat die App dafür 2 Modi genutzt.

  • Normal
  • External Browser
Im Normal-Modus ist der Browser in die App integriert, sie wird wie eine normale Android-App genutzt.
Im "External-Browser"-Modus startet die App einen kleinen Webserver über einen einstellbaren Port (voreingestellt: 34567).



Hintergrund

Der NMEA-Multiplexer und auch der Web-Server von AvNav können ohne Anzeige nur im Hintergrund laufen. Das kann genuzt werden, wenn die Anzeige für Benutzer auf einem anderen Gerät erfolgen soll - oder wenn eine andere App für die Navigation genutzt wird und nur der Multiplexer von AvNav benötigt wird.
Dazu wird nach dem Start auf der Hauptseite über der Beenden-Dialog aufgerufen und dort "BACKGROUND" ausgewählt.
Über die Benachrichtigung (in der Android-Nachrichtenzeile) kann die App wieder in den Vordergrund geholt - oder direkt beendet werden.


Einstellungen

Die Einstellungen gliedern sich in zwei Teile:

  • Spezielle Android-Einstellungen
  • Einstellungen für den Multiplexer und andere Hauptbestandteile

Die Android-Einstellungen erreicht man über den Button auf der Einstellungsseite bzw. der Server/Status Seite.

Android Main Einstellungen

Name Bedeutung Default
working directory man kann auswählen, wo das AvNav Arbeitsverzeichnis liegen soll (internal storage oder external storage) internal storage
additional charts directory ein zusätzliches Kartenverzeichnis, das sinnvollerweise auf einer externen SD-Karte angelegt werden sollte ---
reset external chart dir setze das zusätzliche Kartenverzeichnis zurück
show demo charts Anzeige der Demo-Karten. Das erfordert eine aktive Internetverbindung) ein
Alarm-Sounds Hier können die durch den Server erzeugten Alarm-Sounds abgeschaltet werden. Im Browser müssen diese ggf. zusätzlich abgeschaltet werden. ein
Hide System Bars Verberge die Android Kopf- und Fußzeile ein
autoconnect USB devices Wenn eingeschaltet wird AvNav gestartet, sobald ein unterstütztes USB-Gerät verbunden wird. Falls dieser Schalter ausgeschaltet ist, kann man USB-Geräte auch über den + Button auf der Server/Status Seite konfigurieren. ein
allow unknown plugins AvNav hat ein (experimentelles) Plugin Interface, das es anderen Apps ermöglicht, AvNav über bereitgestellte Funktionen zu informieren (im Moment nur Karten). Mit diesem Schalter können das auch Plugins, die noch nicht in AvNav bekannt sind. Anmerkung: avocharts benötigt das nicht. ein
reset to defaults Rücksetzen der Multiplexer-Einstellungen auf Default-Werte


Android Sound-Einstellungen

Name Bedeutung Default
Sound for XXX alarm Hier kann der Ton für die verschiedenen Alarme gewählt werden
reset to defaults Rücksetzen der Sound-Einstellungen auf Defaults

Multiplexer Einstellungen

(neu ab 20210424)

Die Einstellungen für den Multiplexer sind auf der Status/Server Seite verfügbar. Für jede Funktion, z.B. für jede Quelle im Multiplexer, ist ein sogenannter "Handler" vorhanden, der hier konfiguriert werden kann.

Weitere Quellen können über den Button hinzugefügt werden. Es werden dann die Handler angeboten, die möglich sind, z.B. wird "UsbConnection" nur angezeigt, wenn auch ein USB-Gerät angeschlossen ist.

Neben den angezeigten Handlern in der Statusübersicht existiert im Normalfall ein Button, mit dem man den Handler bearbeiten kann.
Die im Bearbeitungs-Dialog angezeigten Parameter haben meist einen Button, über den eine Hilfe angezeigt wird. Mit dem Button kann der jeweilige Parameter auf seinen Default-Wert zurückgesetzt werden.

Einige Parameter tauchen bei mehreren Handlern auf:

Name Beschreibung default
enabled aktviert/deaktiviert diesen Handler je nach Handler
name Name für den Handler. Dieser kann in Blacklists verwendet werden. leer
port TCP- oder UDP-Port
filter/readerFilter/ sendFilter Das ist ein NMEA-Filter. Hier kann definiert werden, welche NMEA-Daten durchgelassen werden sollen. Mehrere Filter werden durch ein Komma (,) getrennt. Für Datensätze, die mit dem Dollarzeichen ($) beginnen, werden die nächsten beiden Zeichen ignoriert (die Talker-Id). Ein Filter für alle RMC-Sätze sieht z.B. so aus:
$RMC
Ausschließlich für alle AIS-Daten:
!
Alle RMC- und RMB-Sätze:
$RMC,$RMB
Falls der Filter negiert werden soll, muss ein ^ dem Ausdruck vorangestellt werden.
^$RMB,^$APB
leer
blacklist eine durch Kommas (,) getrennte Liste von Namen. NMEA-Daten von diesen Quellen werden nicht ausgesendet.
priority Falls dieser Handler Daten liest (oder erzeugt), werden sie vom Dekoder potenziell gelesen und in den internen Speicher von AvNav geschrieben. Falls mehrere Handler die gleichen Daten liefern (z.B. Position), muss entschieden werden, welche davon in den internen Speicher geschrieben werden sollen. Dazu wird diese Einstellung genutzt. Daten mit höherer Priorität gewinnen.
queueAge AvNav hat eine interne Warteschlage (queue), die empfangene Daten aufnimmt und an die Ausgänge weiterreicht. Wenn ein Ausgang zu langsam ist, kann er potenziell nicht alle einlaufenden Daten sofort weiterleiten und diese verbleiben längere Zeit in der Warteschlange. Wenn die Daten älter sind als die hier eingestellte Zeit (in ms), werden sie aus der Warteschlange gelöscht. 3000

Die vorhandenen "Handler" und ihre Parameter. Es werden nur die spezifischen Parameter beschrieben.

Decoder

Parameter Beschreibung default
ownMMSI eigene MMSI, diese wird in der AIS-Anzeige ausgeblendet leer
posAge erlaubtes Alter für die GPS-Position (in sec), nach dieser Zeit wird der Eintrag gelöscht, wenn keine neuen GPS-Daten empfangen wurden 10
nmeaAge erlaubtes Alter für NMEA-Daten (in sec), die keine Positionsdaten enthalten 600
aisAge erlaubtes Alter für AIS-Daten (in sec) 1200

Route

Parameter Beschreibung default
computeRMB erzeuge NMEA-RMB-Datensätze, wenn ein Routing aktiv ist. an
computeAPB rezeuge NMEA-APB Datensätze, wenn ein Routing aktiv ist an
useRhumbLine setze den Routing Mode auf rhumbLine aus
nextWpMode setze den Modus zum Wegepunkt Weiterschalten - late/early/90 late
nextWpTime im Modus "early" die Zeit (in s) nach dem Wegepunkt-Alarm bis zum Weiterschalten auf den nächsten Wegepunkt 10

Track

Parameter Beschreibung default
interval Intervall (in sec) für das Schreiben des Tracks als "gpx"-Datei. 300
distance Minimaler Abstand (in m), bevor ein neuer Trackpunkt geschrieben wird 25
minTime Minimale Zeit (in sec), bevor ein neuer Trackpunkt geschrieben wird 10
length Länge des angezeigten Tracks in Stunden (h). 25

Logger

NMEA-Logger

WebServer

Parameter Beschreibung default
port der TCP-Port, auf dem der Server Verbindungen annimmt. 8080
external Wenn aktiv, dann können sich auch andere Geräte verbinden (sonst nur auf dem eigenen Gerät).
Hinweis: Dieser Parameter sollte mit Vorsicht und nur in vetrauenswürdigen Netzen aktiviert werden. Innerhalb der App gibt es keinen weiteren Schutz!
aus
mdnsEnabled macht den Service per "mDNS" (Bonjour) bekannt. an
mdnsService Der Name, unter dem die App per mDNS/Bonjour erreichbar ist. avnav-android

InternalGPS

Das GPS des Gerätes.

MDNSResolver

Der Handler für die Auflösung und das Bekanntmachen von "mDNS" (Bonjour/Avahi) Services.

Remote Channel

Der Handler für die Fernsteuerung .

TcpReader

Parameter Beschreibung default
ipAddress Die IP-Adresse oder der Hostname für den Server, der kontaktiert werden soll. Das kann auch ein mDNS Name wie z.B. avnav.local sein. ---
port Der Ip-Port, zu dem eine Verbindung aufgebaut werden soll. ---
sendOut Wenn aktiviert, werden auch NMEA-Daten gesendet. Ansonsten wird nur emfangen. aus
readTimeout Markiere die Verbindung als inaktiv, wenn keine Daten nach der eingestellten Zeit (sec) eingegangen sind. 10
writeTimeout Schließe die Verbindung, wenn ein NMEA-Datensatz nicht innerhalb der eingestellten Zeit (sec) geschrieben werden konnte. 5
connectTimeout Timeout für den Verbindungsaufbau (in sec, 0 = System-default) 0
closeOnTimeout Schließe die Verbindung und öffne sie erneut, wenn das readTimeout erreicht wird. an
stripLeading entfernt alle Zeichen in einer empfangenen Zeile vor einem ! oder $ aus

TcpWriter

Ein TCPWriter stellt die NMEA-Daten für andere Anwendungen bereit.

Parameter Beschreibung default
port Der Port, auf dem der Server Verbindungen annimmt ---
externalAccess Wenn aktiv, können sich auch andere Geräte verbinden. Andernfalls können sich nur Apps auf dem selben Gerät verbinden. aus
writeTimeout Schließe die Verbindung, wenn ein NMEA-Datensatz nicht innerhalb der eingestellten Zeit (sec) geschrieben werden konnte. 5
readData Wenn aktiv, empfängt AvNav auch NMEA-Daten über eine aufgebaute Verbindung aus
stripLeading entfernt alle Zeichen in einer empfangenen Zeile vor einem ! oder $ (nur wenn readData aktiv ist) aus
sendOwn Sende Daten, die auf der gleichen Verbindung empfangen wurden (nur sichtbar, wenn readData an ist). Normalerweise sollte man das nicht einschalten, weil man sonst sehr leicht Schleifen erzeugen kann. an
mdnsEnabled mache den Service per mDNS im Netz bekannt (type: _nmea-0183._tcp) aus
mdnsService Der Name, unter dem dieser Server per mDNS erreichbar ist

UdpReader

Ein UDP-Reader empfängt Daten von anderen Apps/Systemen.

Parameter Beschreibung default
port der UDP-Port, auf dem Daten empfangen werden ---
externalAccess wenn aktiv, können Daten von anderen Geräten empfangen werden, sonst nur innerhalb des selben Gerätes. aus
readTimeout zeige die Verbindung als inaktiv, wenn für die eingestellte Zeit (sec) keine Daten empfangen wurden. 10
stripLeading entfernt alle Zeichen in einer empfangenen Zeile vor einem ! oder $ aus

UdpWriter

Ein UDP-Writer sendet NMEA-Daten per UDP an eine andere App.

Parameter Beschreibung default
ipaddress die IP-Adresse oder der Hostname des Ziel-Computers. Es kann auch ein mDNS-Name wie "avnav.local" genutzt werden. ---
port Der Ziel-Port , an den Daten gesendet werden sollen ---
broadcast Sende die Daten als Broadcast, die IP-Adresse muss dann eine gültige Broadcast-Adresse sein. aus

NMEA0183Service

Ein NMEA0183-Service arbeitet im Wesentlichen wie ein TcpReader. Allerdings werden hier nicht Zieladresse und Port vorgegeben. Stattdessen wird der Name eines (mDNS) Services (type: _nmea-0183._tcp) aus einer Liste der verfügbaren Services gewählt. Falls z.B. im Netz ein SignalK-Server oder ein AvNav-Server (> 20210415) vorhanden sind, geben diese ihre NMEA-Ausgänge auf diese Weise im Netzwerk bekannt.
Der Vorteil ist, dass auch bei Wechsel des Netzwerkes der Zugriff im Normalfall wieder funktionieren wird und Verbindungen so automatisch wieder aufgebaut werden können.

Parameter Beschreibung default
service der Name des Service (Auswahl aus der Liste der gefundenen) ---
sendOut sende NMEA-Daten auf dieser Verbindung
readTimeout Markiere die Verbindung als inaktiv, wenn keine Daten nach der eingestellten Zeit (sec) aufgelaufen sind. 10
writeTimeout Schließe die Verbindung, wenn ein Satz nicht innerhalb der eingestellten Zeit (sec) geschrieben werden konnte 5
connectTimeout Timeout für den Verbindungsaufbau (in sec, 0 = System-default) 0
closeOnTimeout Schließe die Verbindung und öffne sie erneut, wenn das readTimeout erreicht wird. an

UsbConnection

AvNav wird aktiv, wenn ein USB-Gerät angeschlossen wird (wenn man das in den Einstellungen aktiviert hat). Es ist daher sinnvoll, zunächst AvNav zu starten und danach das USB-Gerät anzuschließen. Das Gerät kann dann direkt so konfiguriert werden, dass AvNav immer auf dieses Gerät zugreifen darf. AvNav startet dann sofort den Dialog zur Konfiguration des Gerätes.

Parameter Beschreibung default
device Das angeschlossene USB-Gerät, genauer: der Anschluss des Gerätes, Auswahl aus einer Liste ---
baud rate Die Baudrate 9600
flowControl none|xon/xoff|rts/cts - Auswahl der Flusssteuerung (muss vom Adapter unterstützt werden) none
sendOut sende NMEA-Daten auf dieser Verbindung aus
readTimeout Markiere die Verbindung als inaktiv, wenn keine Daten nach der eingestellten Zeit (sec) aufgelaufen sind. 10

Bluetooth

Zum Verbinden z.B.  mit einem Bluetooth-GPS. Das Gerät muss zunächst über die Bluetooth-Einstellungen des Android-Geräts verbunden werden ("pairen").
Parameter Beschreibung default
device Das Bluetooth-Gerät. Bei der Einrichtung werden alle Geräte angeboten, die bereits bekannt sind, erst danach wird versucht, das Gerät zu erreichen. ---
sendOut sende NMEA-Daten auf dieser Verbindung aus
readTimeout Markiere die Verbindung als inaktiv, wenn keine Daten nach der eingestellten Zeit (sec) aufgelaufen sind. 10