Nebelhorn
Aktives Mitglied
Hallo zusammen,
in der Grundausstattung besitzt der Raspberry Pi keinen GPS-Empfänger. Ich möchte mir eigentlich kein weiteres Gerät kaufen, nur um die GPS-Koordinaten an den Raspberry Pi, auf dem bei mir Astroberry läuft, zu übermitteln. Da ich mein (Android)-Handy eigentlich immer dabei habe, habe ich mir eine einfache Lösung gebastelt, um per Knopfdruck auf meinem Handy, die Uhrzeit und die Geokoordinaten des Astroberrys einzustellen. Bei meiner Recherche konnte ich den von mir gewählten Weg noch nirgendwo dokumentiert finden, weshalb ich mir dachte, dass das vielleicht für irgendjemand interessant sein könnte.
Meine Lösung berücksichtigt ganz sicherlich nicht alle Eventualitäten von potentiellen Fehlern. Vielmehr ist es eine Bastellösung. Sicherheitsaspekte spielen für mich auch keine große Rolle, weil ich den Astroberry nur für das Teleskop verwende. Ob ich mit dem Thema hier im richtigen Unterforum gelandet bin, weiß ich leider nicht.
Hier also meine Kurzanleitung: Mein Astroberry hat die IP 10.42.0.1 und ich verwende den Benutzer astroberry. Auf dem Handy müssen die Apps Termux, Termux-API und Termux-Widget installiert werden. Diese Apps habe ich über den Appstore F-Droid bezogen. Termux ist eine Art Terminal, in dem man viele Programme installieren kann, die man aus dem Linuxumfeld kennt. In Android muss man Termux die Berechtigung geben, sich automatisch über andere Apps hinweg sichtbar schalten zu können. Diese Berechtigung ist erforderlich, damit das Widget ein Terminal starten und in den Vordergrund bringen kann (siehe).
In Termux muss man die Programme python und openssh installieren (pkg install python openssh). Man muss in Termux ein Unterverzeichnis namens .shortcuts erstellen, sofern es noch nicht vorhanden ist (mkdir .shortcuts). Damit man sich ohne Passwortabfrage in Astroberry einloggen kann, muss ein SSH-Schlüsselpaar erzeugt werden. Bei mir hat es dafür ausgereicht, im Termuxterminal den Befehl ssh-keygen auszuführen. Es wird ein Schlüssel erzeugt, man darf diesem Schlüssel aber kein Passwort geben. Anschließend muss der Schlüssel auf den Astroberry kopiert werden (ssh-copy-key astroberry@10.42.0.1). Nun sollte es möglich sein, sich aus dem Termuxterminal in den Astroberry ohne Passwort einzuloggen. Das sollte man testen (ssh astroberry@10.42.0.1), wobei man sich mit dem Befehl exit wieder ausloggen kann.
Auf dem Astroberry müssen ein paar Kleinigkeiten konfiguriert werden, das habe ich aber nicht über das Handy bewerkstelligt. Dem Benutzer astroberry muss die Berechtigung gegeben werden, ohne Passwortabfrage die Uhrzeit setzen und den Dienst virtualgps neustarten zu können. Letzteres ist vermutlich erforderlich, denn, wenn ich das im Quellcode richtig sehe, liest virtualgps die Konfigurationsdatei nur einmalig beim Starten ein. Die Berechtigungen kann man mit dem Befehl "sudo visudo" an den Nutzer astroberry vergeben, indem man ganz unten Folgendes einfügt:
Da die Datei /etc/location.conf nicht so einfach an Ort und Stelle vom Benutzer astroberry geschrieben werden kann, habe ich sie kurzerhand an eine andere Stelle kopiert:
Dafür gibt es sicherlich auch elegantere Lösungen.
Die Uhrzeit und die GPS-Koordinaten werden auf dem Handy mit dem Script ausgelesen, das an diesen Beitrag angehängt ist. Das Script muss in das Unterverzeichnis .shortcuts kopiert werden. Das geht auf meinem Handy aus Sicherheitsgründen nur über einen Hook im Dateimanager und nicht in Termux selber. Bei mir hat Termux diese Verknüpfung aber automatisch in den Dateimanager gesetzt. Eventuell muss man ausgeblendete Dateien einblenden, damit der Dateimanager das Verzeichnis .shortcuts anzeigt.
Das Script kann man nun starten, indem man auf dem Homescreen ein Widget hinzufügt und als Datei das Script auswählt. Auf meinem Handy kann ich dann nach dem Verbindungen mit dem Astroberry-Hotspot durch Drücken auf den Widgetknopf das Script starten, welches daraufhin die Zeit und Geokoordinaten setzt. Wenn ich dann in KStars Ekos starte und GPSD als AUX-Port auswähle, dann werden über virtualgps die Koordinaten an Indi gesendet, welches das dann an Ekos und KStars weiterreicht. Ich hoffe, dass ich in meiner Anleitung alles Wesentliche aufgeführt habe.
Viele Grüße
Jörg
--
in der Grundausstattung besitzt der Raspberry Pi keinen GPS-Empfänger. Ich möchte mir eigentlich kein weiteres Gerät kaufen, nur um die GPS-Koordinaten an den Raspberry Pi, auf dem bei mir Astroberry läuft, zu übermitteln. Da ich mein (Android)-Handy eigentlich immer dabei habe, habe ich mir eine einfache Lösung gebastelt, um per Knopfdruck auf meinem Handy, die Uhrzeit und die Geokoordinaten des Astroberrys einzustellen. Bei meiner Recherche konnte ich den von mir gewählten Weg noch nirgendwo dokumentiert finden, weshalb ich mir dachte, dass das vielleicht für irgendjemand interessant sein könnte.
Meine Lösung berücksichtigt ganz sicherlich nicht alle Eventualitäten von potentiellen Fehlern. Vielmehr ist es eine Bastellösung. Sicherheitsaspekte spielen für mich auch keine große Rolle, weil ich den Astroberry nur für das Teleskop verwende. Ob ich mit dem Thema hier im richtigen Unterforum gelandet bin, weiß ich leider nicht.
Hier also meine Kurzanleitung: Mein Astroberry hat die IP 10.42.0.1 und ich verwende den Benutzer astroberry. Auf dem Handy müssen die Apps Termux, Termux-API und Termux-Widget installiert werden. Diese Apps habe ich über den Appstore F-Droid bezogen. Termux ist eine Art Terminal, in dem man viele Programme installieren kann, die man aus dem Linuxumfeld kennt. In Android muss man Termux die Berechtigung geben, sich automatisch über andere Apps hinweg sichtbar schalten zu können. Diese Berechtigung ist erforderlich, damit das Widget ein Terminal starten und in den Vordergrund bringen kann (siehe).
In Termux muss man die Programme python und openssh installieren (pkg install python openssh). Man muss in Termux ein Unterverzeichnis namens .shortcuts erstellen, sofern es noch nicht vorhanden ist (mkdir .shortcuts). Damit man sich ohne Passwortabfrage in Astroberry einloggen kann, muss ein SSH-Schlüsselpaar erzeugt werden. Bei mir hat es dafür ausgereicht, im Termuxterminal den Befehl ssh-keygen auszuführen. Es wird ein Schlüssel erzeugt, man darf diesem Schlüssel aber kein Passwort geben. Anschließend muss der Schlüssel auf den Astroberry kopiert werden (ssh-copy-key astroberry@10.42.0.1). Nun sollte es möglich sein, sich aus dem Termuxterminal in den Astroberry ohne Passwort einzuloggen. Das sollte man testen (ssh astroberry@10.42.0.1), wobei man sich mit dem Befehl exit wieder ausloggen kann.
Auf dem Astroberry müssen ein paar Kleinigkeiten konfiguriert werden, das habe ich aber nicht über das Handy bewerkstelligt. Dem Benutzer astroberry muss die Berechtigung gegeben werden, ohne Passwortabfrage die Uhrzeit setzen und den Dienst virtualgps neustarten zu können. Letzteres ist vermutlich erforderlich, denn, wenn ich das im Quellcode richtig sehe, liest virtualgps die Konfigurationsdatei nur einmalig beim Starten ein. Die Berechtigungen kann man mit dem Befehl "sudo visudo" an den Nutzer astroberry vergeben, indem man ganz unten Folgendes einfügt:
Code:
astroberry ALL=(ALL) NOPASSWD:/bin/date
astroberry ALL=(ALL) NOPASSWD:/bin/systemctl restart virtualgps
Da die Datei /etc/location.conf nicht so einfach an Ort und Stelle vom Benutzer astroberry geschrieben werden kann, habe ich sie kurzerhand an eine andere Stelle kopiert:
Bash:
sudo cp /etc/location.conf /etc/location.conf_backup
sudo chown astroberry:astroberry /etc/location.conf
sudo cp /etc/location.conf /home/astroberry/location.conf
sudo rm /etc/location.conf
sudo ln -s /home/astroberry/location.conf /etc/location.conf
Dafür gibt es sicherlich auch elegantere Lösungen.
Die Uhrzeit und die GPS-Koordinaten werden auf dem Handy mit dem Script ausgelesen, das an diesen Beitrag angehängt ist. Das Script muss in das Unterverzeichnis .shortcuts kopiert werden. Das geht auf meinem Handy aus Sicherheitsgründen nur über einen Hook im Dateimanager und nicht in Termux selber. Bei mir hat Termux diese Verknüpfung aber automatisch in den Dateimanager gesetzt. Eventuell muss man ausgeblendete Dateien einblenden, damit der Dateimanager das Verzeichnis .shortcuts anzeigt.
Das Script kann man nun starten, indem man auf dem Homescreen ein Widget hinzufügt und als Datei das Script auswählt. Auf meinem Handy kann ich dann nach dem Verbindungen mit dem Astroberry-Hotspot durch Drücken auf den Widgetknopf das Script starten, welches daraufhin die Zeit und Geokoordinaten setzt. Wenn ich dann in KStars Ekos starte und GPSD als AUX-Port auswähle, dann werden über virtualgps die Koordinaten an Indi gesendet, welches das dann an Ekos und KStars weiterreicht. Ich hoffe, dass ich in meiner Anleitung alles Wesentliche aufgeführt habe.
Viele Grüße
Jörg
--
Python:
#!/data/data/com.termux/files/usr/bin/env python
import json
import os
import datetime
import time
astroberryhost = '10.42.0.1'
astroberryuser = 'astroberry'
def sshcmd(c):
cmd = "ssh {}@{} ".format(astroberryuser,astroberryhost) + c
print(cmd)
os.system(cmd)
date=str('sudo date -s \\"{} {}:{}:{}\\"'.format(datetime.date.today(), datetime.datetime.now().time().hour, datetime.datetime.now().time().minute, datetime.datetime.now().time().second))
sshcmd(date)
x=os.popen('termux-location').readlines()
if(len(x) == 0):
raise ValueError('error location dictionary length = 0')
d=json.loads("".join([_.strip() for _ in x]))
s_long = "longitude"
s_alt = "altitude"
s_lat = "latitude"
for s in [s_long, s_alt, s_lat]:
if s in d:
pass
else:
raise ValueError('location key {} missing'.format(s))
latitude = float(d[s_lat])
longitude = float(d[s_long])
elevation = float(d[s_alt])
if (abs(latitude) > 90.0):
raise ValueError('latitude error: {}'.format(latitude))
if (abs(longitude) > 180.0):
raise ValueError('longitude error: {}'.format(longitude))
if (elevation > 9000.0 or elevation < -1000.0):
raise ValueError('elevation error: {}'.format(elevation))
print("\n\nlongitude = {}\nlatitude={}\naltitude={}\n\n".format(longitude, latitude, elevation))
geo='\"printf \\"[default]\\nlatitude = {}\\nlongitude = {}\\nelevation = {}\\n\\" > /home/astroberry/location.conf\"'.format(latitude,longitude, elevation)
sshcmd(geo)
sshcmd('sudo systemctl restart virtualgps')
print('Done. Sleep for 20 s.')
time.sleep(20)