Einführung
Irgendwie fiel mir der chinesische GPS-Tracker ST-901 in die Hände. Das Gerät ist hauptsächlich für den Einsatz in der Auto- und Motorradtechnik konzipiert, verfügt über ein gsm 2G-Modul für die Kommunikation mit der Außenwelt, ein versiegeltes wasserdichtes Gehäuse und eine kleine eingebaute Batterie, mit der Sie etwa 2-3 Tage ohne externe Stromversorgung arbeiten können, wenn Sie alle 3 Minuten ein Signal senden. sowie ein Signalzündkabel, mit dem Sie vor dem Starten des Motors warnen können. Sie können diesen Tracker über SMS-Befehle an die Trackernummer verwalten und Benachrichtigungen sowohl per SMS als auch durch Verbindung mit der Cloud über GPRS kommunizieren und empfangen. Nachdem ich eine Weile mit ihm gespielt hatte, warf ich ihn in eine Schublade, bis HomeAssistant zu Hause erschien. Es gab eine Idee, es mit einem Smart Home zu verbinden.
Die Aufgaben
Um den Tracker mit HomeAssistant zu verbinden, müssen Sie zwei Probleme lösen: Die Koordinaten vom Tracker abrufen und in HomeAssistant schreiben. Wenn es für die zweite Aufgabe mehrere mögliche Lösungen gleichzeitig gibt (z. B.
gpslogger oder
owntracks_http ), wurde die Lösung für die erste Aufgabe in meinem Fall dadurch erschwert, dass Sie in den Tracker-Einstellungen für die Übertragung von Koordinaten nur eine IP-Adresse und keinen Domänennamen angeben können. Da ich zu Hause keine statische Adresse habe, entstand die Idee, einen Vermittler zu verwenden.
Ich stelle fest, dass Sie auf diese Weise fast jeden GPS-Tracker (und nicht nur in meinem Artikel berücksichtigt) anschließen können, der mit den Ressourcen eines Vermittlers kompatibel ist . Jeder, der sich für das interessiert, was daraus entstanden ist, ist herzlich willkommen bei cat.
Idee
Wie oben erwähnt, kann dieser Tracker mit vielen Cloud-Diensten verbunden werden. Bei einigen von ihnen mit bestimmten Einschränkungen können Sie die Dienste kostenlos nutzen. Einige Dienste verfügen über vollwertige APIs für die Interaktion mit ihnen, aber ich habe solche unter den kostenlosen nicht gefunden. Fast alle Dienste bieten jedoch den Dienst, den Standort des Trackers über eine permanente Verbindung zu "teilen". Nachdem ich einige dieser Dienste durchgesehen und im Quellcode der freigegebenen Seiten
herumgestöbert hatte , fand ich im
livegpstracks- Dienst, wonach ich suchte: eine Anfrage nach Koordinaten. Das allgemeine Arbeitsschema lautet daher wie folgt: Der Tracker stellt eine Verbindung zum Livegpstracks-Dienst her und überträgt seine Koordinaten. HomeAssistant sendet regelmäßig eine http-Anforderung an den Dienst und empfängt die zuletzt aufgezeichneten Koordinaten, die von einer anderen http-Anforderung an den HomeAssistant geschrieben werden. Hier ist ein
Link zu einer Liste aller mit dem Dienst kompatiblen Tracker.
Implementierung
1. Beschaffung von Koordinaten auf AnfrageWir registrieren uns beim
Livegpstracks- Service und schließen unseren Tracker an (auf der Website finden Sie detaillierte Anweisungen für verschiedene Modelle). Erstellen Sie anschließend über die Symbolleiste auf der Website einen privaten Link für die Nachverfolgung. Der Link hat die Form:
https://livegpstracks.com/dv_USERID.html
Dabei ist USERID die digitale ID Ihrer Bälle.
Das ist alles. Sie können über Anfragen auf den Dienst zugreifen. Um Sie nicht lange zu quälen, gebe ich nur das Anforderungsformat an:
https://livegpstracks.com/viewer_coos_s.php?username=USER&ctp=one&code=USERID&tgst=site&tgsv=12&tkv11=TIMENOWMS
Hier ist USER der Benutzer, unter dem Sie sich im livegpstracks-Dienst registriert haben. USERID ist die digitale ID, die dem freigegebenen Link zugewiesen ist. TIMENOWMS ist die aktuelle Zeit in Millisekunden (Unix-Zeit).
Eine typische Antwort lautet:
[{"code":"xxx","id":"xxx","lat":"44","lng":"48","speed":"0","azimuth":"0","d":"2018-06-19","t":"09:35:17","altitude":"0","battery":"0","gpsaccuracy":""}]
Hinweis: Ich habe die Ausgabe erheblich reduziert und auch den Parametercode, id, lat, lng geändert.
Die Methode zum Abrufen von Koordinaten in Python sieht folgendermaßen aus:
def getInfoFrom(self): timenow = int(datetime.now().strftime("%s")) * 1000 response = requests.get('https://livegpstracks.com/viewer_coos_s.php', params={'username': self._user, 'ctp': 'one', 'code': self._myid, 'tgst': 'site', 'tgsv': 12, 'tkv11': timenow}) data = response.json() self._lat = data[0]["lat"] self._lon = data[0]["lng"] self._speed = data[0]["speed"] self._direction = data[0]["azimuth"] self._last_time_rcv = data[0]["d"] + ' ' + data[0]["t"]
Ich denke, dass Sie in diesem Code nichts erklären müssen: Wir erhalten die aktuelle Uhrzeit, stellen eine Abrufanfrage, erhalten eine Antwort von json, analysieren sie und ermitteln den Breitengrad, den Längengrad, die Geschwindigkeit, die Bewegungsrichtung und die Zeit, zu der der Server die Koordinaten zuletzt erhalten hat.
2. Aufzeichnung der KoordinatenFür die Aufzeichnung habe ich das GPSLogger-Modul für HomeAssistant verwendet, da es über eine http-Anforderung funktioniert und Sie ein separates Kennwort verwenden können, das sich vom Kennwort für die gesamte HA unterscheidet. Die Dokumentation (
gpslogger ) zeigt, dass die Anfrage das folgende Format hat:
https://HAADRESS:HAPORT/api/gpslogger?latitude=LAT&longitude=LON&device=DEV&accuracy=ACC&speed=SPD&direction=DIR&api_password=PASS
Hier ist HAADRESS die IP-Adresse oder der Servername mit HA, HAPORT ist der Server-Port, LAT ist der Breitengrad, LON ist der Längengrad, DEV ist der Name des Geräts, das in HA angezeigt werden soll, ACC ist die Genauigkeit der Koordinatenbestimmung (aus irgendeinem Grund funktioniert es in HA nicht, es gibt einen Fehler, I. nicht verwendet), SPD - Geschwindigkeit, DIR - Bewegungsrichtung, PASS - Passwort für die Übertragung von Koordinaten
Die Methode zum Schreiben von Koordinaten in Python sieht folgendermaßen aus:
def putInfoTo(self): if self._lat != '' and self._lon != '': req_str = self._haddr+'/api/gpslogger' response = requests.get(req_str, params={'latitude': self._lat, 'longitude': self._lon, 'accuracy': 30, 'speed': self._speed, 'direction': self._direction, 'device': self._name, ' api_password': self._pwd}) self._last_time_upd = time.strftime("%Y.%m.%d %H:%M")
Ich denke auch hier sind Kommentare überflüssig.
3. ModulDer vollständige Code des Moduls zum Empfangen und Aufzeichnen von Koordinaten ist unten angegeben.
Um dieses Modul zu verbinden, muss der Code in das Verzeichnis "config_folder_homeassistant / custom_components / sensor / car_location.py" kopiert werden und der Konfiguration die folgenden Zeilen hinzufügen:
device_tracker: - platform: gpslogger password: !secret gpslogger_password sensor: - platform: car_location name: car_sensor user: USER myid: USERID haddr: YOUR_HA_ADDRESS pwd: !secret gpslogger_password
Hier finden Sie alle Variablen aus dem Abschnitt "Koordinaten auf Anfrage abrufen".
Dieses Modul arbeitet seit mehr als einem Monat in HA ohne Fehler oder andere Probleme.
Das ist alles, danke für Ihre Aufmerksamkeit.
UPD:HomeAssistant hat die GPSLogger-Komponente aktualisiert, in Verbindung mit der eine neue Version des Mods und der Einstellungen:
neue Einstellungen device_tracker: - platform: gpslogger sensor: - platform: car_location name: car_sensor user: USER myid: USERID haddr: YOUR_HA_ADDRESS_WEBHOOK
YOUR_HA_ADDRESS_WEBHOOK - Weblog-Adresse von GPSLogger finden Sie im Abschnitt Einstellungen - Integrationen - GPSLogger.
UPD2:HomeAssistant hat die Arbeitslogik von Version 0.88 aktualisiert, in Verbindung mit der die neue Version des mod:
sensorUPD3:Neue Version der Integration. Das Projekt wurde auf
GitHub verschoben . Die aktuelle Version ist da.