Pendahuluan
Entah bagaimana pelacak GPS Cina ST-901 jatuh ke tangan saya. Perangkat ini dirancang terutama untuk digunakan dalam teknologi mobil dan sepeda motor, memiliki modul 2G gsm untuk komunikasi dengan dunia luar, wadah anti air yang disegel, baterai kecil built-in yang memungkinkan Anda untuk bekerja sekitar 2-3 hari tanpa daya eksternal ketika mengirimkan sinyal setiap 3 menit, serta kabel pengapian sinyal, yang memungkinkan Anda untuk memperingatkan tentang awal mesin. Anda dapat mengelola pelacak ini melalui perintah SMS ke nomor pelacak, dan berkomunikasi dan menerima pemberitahuan baik melalui SMS maupun dengan menghubungkannya ke cloud melalui GPRS. Setelah bermain dengannya sebentar, saya melemparkannya ke dalam laci sampai HomeAssistant muncul di rumah. Ada ide untuk menghubungkannya ke rumah pintar.
Tugasnya
Untuk menghubungkan pelacak ke HomeAssistant, Anda perlu menyelesaikan dua masalah: dapatkan koordinat dari pelacak dan menulisnya ke HomeAssistant. Jika untuk tugas kedua ada beberapa kemungkinan solusi sekaligus (misalnya,
gpslogger atau
owntracks_http ), maka solusi untuk tugas pertama dalam kasus saya dipersulit oleh kenyataan bahwa dalam pengaturan pelacak untuk mentransfer koordinat Anda hanya dapat menentukan alamat IP, bukan nama domain. Karena saya tidak memiliki alamat statis di rumah, muncul ide untuk menggunakan perantara.
Saya perhatikan bahwa dengan cara ini, Anda dapat menghubungkan hampir semua pelacak GPS (dan tidak hanya dipertimbangkan dalam artikel saya), yang kompatibel dengan sumber daya perantara . Semua orang yang tertarik dengan apa yang terjadi, selamat datang di kucing.
Ide
Seperti yang saya katakan di atas, pelacak ini dapat dihubungkan ke banyak layanan cloud. Beberapa dari mereka dengan batasan tertentu memungkinkan Anda untuk menggunakan layanan ini secara gratis. Beberapa layanan memiliki API lengkap untuk berinteraksi dengan mereka, tetapi saya belum menemukan yang seperti itu di antara yang gratis. Tetapi hampir semua layanan menyediakan layanan "berbagi" lokasi pelacak melalui tautan permanen. Setelah melalui beberapa layanan ini dan mencari-cari kode sumber dari halaman bersama, saya menemukan apa yang saya cari di layanan
livegpstracks : permintaan koordinat. Dengan demikian, skema umum pekerjaan adalah sebagai berikut: pelacak terhubung ke layanan livegpstracks dan mentransmisikan koordinatnya, HomeAssistant secara berkala membuat permintaan http ke layanan dan menerima koordinat tercatat terakhir, yang ditulis ke HomeAssistant oleh permintaan http lain. Berikut adalah
tautan ke daftar semua pelacak yang kompatibel dengan layanan.
Implementasi
1. Mendapatkan koordinat berdasarkan permintaanKami mendaftar di layanan
livegpstracks dan menghubungkan pelacak kami (situs ini memiliki petunjuk rinci untuk berbagai model). Setelah itu, melalui bilah alat di situs, buat tautan pribadi untuk pelacakan. Tautan memiliki bentuk:
https://livegpstracks.com/dv_USERID.html
di mana USERID adalah ID digital bola Anda.
Itu saja. Anda dapat mengakses layanan melalui permintaan. Agar tidak menyiksa Anda untuk waktu yang lama, saya hanya akan memberikan format permintaan:
https://livegpstracks.com/viewer_coos_s.php?username=USER&ctp=one&code=USERID&tgst=site&tgsv=12&tkv11=TIMENOWMS
Di sini USER adalah pengguna yang Anda daftarkan di layanan livegpstracks, USERID adalah ID digital yang ditetapkan untuk tautan bersama, TIMENOWMS adalah waktu saat ini dalam milidetik (waktu unix).
Jawaban tipikal adalah:
[{"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":""}]
Catatan: Saya secara signifikan mengurangi output, dan juga mengubah kode parameter, id, lat, lng.
Metode untuk mendapatkan koordinat dalam python terlihat seperti ini:
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"]
Saya pikir Anda tidak perlu menjelaskan apa pun dalam kode ini: kami mendapatkan waktu saat ini, membuat permintaan dapatkan, mendapatkan tanggapan json, menguraikannya dan mendapatkan garis lintang, bujur, kecepatan, arah gerakan dan waktu server menerima koordinat terakhir.
2. Rekam koordinatUntuk merekam, saya menggunakan modul GPSLogger untuk HomeAssistant, karena berfungsi melalui permintaan http dan memungkinkan Anda untuk menggunakan kata sandi terpisah, berbeda dari kata sandi untuk seluruh HA. Dokumentasi (
gpslogger ) menunjukkan bahwa permintaan memiliki format berikut:
https://HAADRESS:HAPORT/api/gpslogger?latitude=LAT&longitude=LON&device=DEV&accuracy=ACC&speed=SPD&direction=DIR&api_password=PASS
Di sini HAADRESS adalah alamat ip atau nama server dengan HA, HAPORT adalah port server, LAT adalah garis lintang, LON adalah garis bujur, DEV adalah nama perangkat untuk ditampilkan dalam HA, ACC adalah keakuratan menentukan koordinat (untuk beberapa alasan itu tidak berfungsi dalam HA, itu memberikan kesalahan, saya tidak menggunakannya), SPD - kecepatan, DIR - arah gerakan, PASS - kata sandi untuk transmisi koordinat
Metode untuk menulis koordinat dalam python terlihat seperti ini:
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")
Saya pikir di sini juga komentar tidak berguna.
3. ModulKode lengkap modul untuk menerima dan merekam koordinat diberikan di bawah ini.
Untuk menghubungkan modul ini, kode harus disalin ke direktori "config_folder_homeassistant / custom_components / sensor / car_location.py", dan juga tambahkan baris berikut ke konfigurasi:
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
Berikut adalah semua variabel dari bagian "Mendapatkan Koordinasi dengan Permintaan".
Modul ini telah bekerja di HA selama lebih dari sebulan tanpa kegagalan atau masalah lain.
Sekian, terima kasih atas perhatiannya.
UPD:HomeAssistant memperbarui komponen GPSLogger, sehubungan dengan versi mod dan pengaturan yang baru:
pengaturan baru device_tracker: - platform: gpslogger sensor: - platform: car_location name: car_sensor user: USER myid: USERID haddr: YOUR_HA_ADDRESS_WEBHOOK
YOUR_HA_ADDRESS_WEBHOOK - alamat weblog GPSLogger, Anda bisa mendapatkannya di bagian Pengaturan - Integrasi - GPSLogger.
UPD2:HomeAssistant memperbarui logika kerja dari versi 0.88, sehubungan dengan versi mod:
sensor yang baruUPD3:Versi integrasi baru. Proyek dipindahkan ke
GitHub . Versi saat ini ada di sana.