Hallo,
Ich habe eine Android App, die meinen elektrischen Bootsmotor
kontrolliert. Damit kann ich das Boot auf Autopilot fahren lassen, zB
indem ich eine Route per Google-Maps overlay zeichne, also direkt in der
App. Blöd nur, dass das keine Seekarte ist und man im Zweifel Wegpunkte
irgendwo und blaue setzt. Deshalb würde ich gern GPX Dateien in die App
"laden".
Im Prinzip werden die Routen die man in der App zeichnet irgendwie
gespeichert. Ich weiß nur nicht wie. Ich vermute Mal irgendeine
Datenbank.
Könnte mir jemand ein paar Tipps geben, wie man versuchen würde, sich da
heranzutasten, diese Datenbank zu bearbeiten?
Hallo!
Da würde ich einfach den Programmierer der App fragen. Ändern kannst Du
das aber m. W. nur wenn es XML-Dateien sind, meist aber nur mit
Adminrechten (dazu muss das Smartphone gerootet werden). Und ohne
XML-Kenntnisse wirst Du es schwer haben.
Gruß, René
PittyJ schrieb:> Bei einem Boot sollte man die Wegpunkte schon ins Blaue setzen. Das ist> das Wasser. Grün wäre falsch.
Der Punkt ist, dass es bei einer Seekarte auf dem Wasser noch etwas mehr
gibt als nur "das Blaue".
Alligator schrieb:> Könnte mir jemand ein paar Tipps geben, wie man versuchen würde, sich da> heranzutasten, diese Datenbank zu bearbeiten?
Du müsstest halt mehr über die App selbst herausfinden. Oder du
schneidest die Kommunikation zwischen der App und der Steuerung mit und
versuchst, das Protokoll nachzubilden.
Es kommt letztendlich auch darauf an, ob hier auf Standards gesetzt oder
irgendwas durchweg proprietäres verwendet wird.
Alligator schrieb:> Im Prinzip werden die Routen die man in der App zeichnet irgendwie> gespeichert. Ich weiß nur nicht wie. Ich vermute Mal irgendeine> Datenbank.> Könnte mir jemand ein paar Tipps geben, wie man versuchen würde, sich da> heranzutasten, diese Datenbank zu bearbeiten?
Ich würde als erstes einfach mal schauen, was die App so an Daten
speichert.
Unter Android hat glaube ich jede App normalerweise ich ein eigenes
Verzeichnis, in dem die Daten der App abgelegt werden. Daher würde ich
einfach als erstes mal untersuchen, was da so für Dateien liegen.
Die Standard-Datenbank unter Android ist glaube ich sqlite. Von daher
findest Du im Daten-Verzeichnis der App möglicherweise sogar irgendeine
sqlite-Datenbank-Datei, die Du vglw. einfach bearbeiten kannst.
Ansonsten hättest Du zumindest theoretisch auch die Möglichkeit, den
Datenverkehr zwischen Deinem Smartphone und dem Motor mitzuschneiden,
das Protokoll zu analysieren und Deine eigene App zu schreiben. Der
Datenverkehr wird ja sicherlich per Bluetooth geschehen, dann kann man
ihn über die Android-"Entwickleroptionen" bequem mitschneiden und in
Wireshark analysieren.
Was soll denn das Rumgeeiere? Du möchtest Hilfe, dann liefere wenigstens
ein paar Fakten, wie z.B. den Namen der App.
Wenn die App wirklich so beschränkt ist (oder hast du gar kein richtiges
Boot, sondern nur ein Fernsteuerspielzeug oder Bait-Boot?), dann
analysiere lieber, wie die Daten an den "Autopiloten" gesendet werden
und implementiere das neu.
Gibt ja genügend gute Software rund um OpenCPN und Avnav für echte Boote
und rund um Ardupilot für Ferngesteuertes, welche man ggf. nutzen
könnte.
Es handelt sich um die App "Helmsman" von Haswing, einem chinesischen
Hersteller. Die App verbindet sich mit der Verbedienung des Motors via
Bluetooth und diese verbindet sich wiederum mit dem Motor. Lädt man eine
Karte, werden die einzelnen Wegpunkte als GPS Datenpunkte an den Motor
gesendet. Im Prinzip ist der Motor dann also autonom, fährt bis zum
letzten und hält die Position.
Ich will aber gar nicht in die Kommunikation des Motors eingreifen,
sondern nur der App eine anderweitig erstellte Karte unterschieben.
Anbei ist ein Screenshot des Verzeichnisses der App, was da an Dateien
vorhanden ist.
Naja, mit den Dateinamen kommt man kein Stück weiter.
Da sollte man mal reinschauen.
Und Matlab-Code wird das bestimmt nicht sein.
Also schau doch mal in die Dateien rein, ob da was nettes drinnen steht.
Wenns kein ASCII ist, dann kommt man eh nicht weiter. Aber vielleicht
ist da ja irgendwo eine Textliste oder ähnliches.
Wenn SQLITE ist, dann kann man manchmal die Datenbank auch selber
fragen, welche Tabellen und Attribute vorhanden sind.
SQLITE ist allesdings nicht ASCII, doch ein more auf der Kommandozeile
zeigt ähnliche Steuerbytes an, so dass man darauf schliessen kann. Und
dann ist programmieren angesagt. Wobei SQLITE in C recht einfach zu
bedienen ist.