Server Data GPS Sederhana
Kumpulkan posisi GPS dari perangkat (ponsel pintar, pelacak GPS), simpan dalam database SQLite dan izinkan untuk ditampilkan di peta (OSM atau Google).
- Data diterima dari perangkat baik melalui HTTPS (PHP) atau paket tcp/udp (server GO)
- Trek yang disimpan dapat diunduh sebagai file GPX
- Antarmuka admin sederhana untuk menambah dan mengedit perangkat baru
Persyaratan
- Server web (Apache atau sejenisnya), yang mendukung otentikasi (untuk halaman admin)
- PHP dengan API SQLITE3 (misalnya paket php-sqlite3) dan soket (misalnya paket php-sockets) diinstal
- Kompiler GO untuk jembatan TCP/UDP-HTTP (hanya diperlukan untuk perangkat pelacakan komersial seperti TK103 atau GPS Logger dalam mode UDP). Paket tambahan golang.org/x/crypto diperlukan. Instal dengan "go get golang.org/x/crypto"
- skrip java GPXViewer oleh Jürgen Berkemeier (folder
js/GM_utils/
)
Instalasi
- Menggunakan Docker
- Salin folder
docker
ke server Anda (ganti nama misalnya menjadi gps-server
) - Salin folder
webapp
(dan jika perlu tcp_udp_http_bridge
) ke direktori gps-server
- Ikuti instruksi di folder buruh pelabuhan
- Instal setiap komponen secara terpisah
- Salin semua file di folder webapp ke folder ruang web (diasumsikan ./gpstracker/ berikut)
- Buat entri yang sesuai di konfigurasi server web untuk memungkinkan akses web dan php berjalan
- Sesuaikan file .htaccess tingkat atas (Apache), atau batasi akses pada konfigurasi Nginx (contoh nginx.conf)
- Atur otentikasi untuk antarmuka admin
- Dalam file
auth/.htpasswd
satu admin
pengguna dengan kata sandi changeme
disertakan - Path ke file .htpasswd harus disesuaikan di
admin/.htaccess
. Jalur absolut diperlukan! - Perbarui .htpasswd dengan pengguna/kata sandi baru. Yang terbaik adalah menggunakan baris perintah
htpasswd /path-to-htpasswd-file/.htpasswd myusername mypassword
atau generator online
- Edit scripts/config.php: sesuaikan pengaturan
- Tentukan zona waktu, peta mana yang akan digunakan, format tanggal/waktu
- Tentukan rentang waktu tanpa gerakan untuk dikenali sebagai jeda
- Tentukan waktu tanpa gerakan untuk memulai trek baru
- Mengaktifkan atau menonaktifkan permulaan server GO tcp/udp bridge
- Dapatkan javascript GPXViewer dari
https://www.j-berkemeier.de/GPXViewer/
dan salin folder GM_Utils ke gpstracker/js/
- Untuk menggunakan Google Maps, diperlukan kunci API, cari
google maps api key application
- Edit file
./js/GM_Utils/GPX2GM_Defs.js
dan hapus komentar pada baris yang berisi JB.GPX2GM.GM_Api_key
dan tambahkan kunci API sebagai nilainya
- TCP/UDP-HTTP-Jembatan
- aktifkan/nonaktifkan di scripts/config.php
- kompilasi kode dengan GO di tcp_udp_http_bridge (go build)
- salin yang dapat dieksekusi ke direktori exe di ruang web
- sesuaikan config.php sesuai (nama dan jalur/yang dapat dieksekusi)
- panggil antarmuka admin untuk memulai server
- tambahkan entri crontab untuk memeriksa sekali per jam, apakah server sedang berjalan (membutuhkan "wget")
1 * * * * /usr/bin/wget -O /dev/null -o /dev/null https://servername/gpstracker?checkserver=SECRETKEY >/dev/null 2>&1
- File database akan dibuat secara otomatis
Masukkan perangkat pelacak
- buka halaman https://servername/gpstracker/admin dan isi formulir
Lihat data
- buka halaman https://servername/gpstracker?id=ID-of-device
- parameter opsional untuk memilih rentang waktu: dt= dalam min(m), jam(h), hari(d) atau tahun(y), misalnya "10d" selama 10 hari
Perangkat pelacakan
- Aplikasi pelacakan yang sesuai dengan OpenGTS atau Traccar akan berfungsi
- Contoh: GPS Logger untuk Android, Klien Traccar ...
- Pencatat GPS untuk Android
- Buka pengaturan -> Detail Logging -> "Masuk ke server OpenGTS" untuk mengaktifkan pelacakan waktu nyata
- server: "<namaserver.com>"
- pelabuhan: 443
- metode komunikasi: HTTPS
- jalur server: /gpstracker
- ID perangkat: ID yang Anda masukkan di antarmuka admin
- uji komunikasi dengan mengklik "periksa sertifikat SSL"
- Metode komunikasi alternatif UDP: gunakan nomor port yang diberikan di config.php (default 20202) -> memerlukan server untuk dijalankan
- Jika biaya transmisi data seluler menjadi masalah, UDP adalah pilihan terbaik, karena jumlah datanya minimal
- Pengaturan->kinerja
- pilih interval (misalnya 20 detik)
- tetap mengaktifkan GPS di antara perbaikan: masuk akal untuk interval pendek, tetapi membutuhkan lebih banyak baterai
- atur jarak antara titik data: tidak mengirim data, ketika jarak di bawah batas tertentu (misalnya 10m)
- aktifkan "berhenti merekam, jika tidak ada gerakan yang terdeteksi"
- Aplikasi klien Owntracks
- Aplikasi mengirimkan data posisi ke server MQTT (dapat dienkripsi). Topik:
owntracks/<username>
misalnya owntracks/gps
- Kode jembatan, yang mengekstrak data dari server MQTT dan mengirimkannya ke Server Data GPS Sederhana, tersedia di bawah
mqtt-bridge
- Contohnya termasuk server MQTT juga
- Ini adalah implementasi buruh pelabuhan murni
- Bagaimana caranya
- Sesuaikan file
docker-compose.yml
ke pengaturan Anda atau atur variabel lingkungan yang sesuai (server, kata sandi, rahasia ...) - Bangun wadah dari kode jembatan
docker-compose build
- Mulai kontainer
docker-compose up -d
- Tetapkan nama pengguna dan kata sandi:
sudo docker exec gps-mqtt sh -c "mosquitto_passwd -b mosquitto/config/password.txt <username> <password>"
- Perangkat komersial biasanya mengirimkan posisi GPS melalui tcp/udp. Ini memerlukan server untuk dijalankan
- atur server dan port TCP/IP di config.php
- konfigurasi server dan port pada alat pelacak (biasanya dilakukan melalui SMS. Cek manual cara melakukannya)
- server harus dikompilasi dan ditempatkan di direktori ./exe/
- salin
devices.config
ke direktori ./exe/. Ini berisi ekspresi reguler untuk format berbeda (misalnya OpenGTS, TK103)- Lebih banyak perangkat dapat ditambahkan
- Jalankan server dengan opsi -verbose untuk mempelajari format dan menambahkan ekspresi reguler yang sesuai ke
devices.config
- server secara otomatis dimulai, ketika antarmuka admin dibuka.
- Hal ini mengharuskan PHP diizinkan untuk memulai server melalui panggilan "exec()".
- Jika hal ini tidak memungkinkan, server harus dijalankan secara manual atau melalui tugas cron.
Konfigurasi peta
- peta dan trek disertakan oleh skrip java GPX Viewer oleh Jürgen Berkemeier (https://www.j-berkemeier.de/GPXViewer/)
- tampilan dan perilaku dapat dikontrol dengan menambahkan parameter opsional (terdaftar pada halaman web di atas) ke dalam template html di
html/gpxviewer_html.template
- peta default dipilih di config.php (OpenStreet-Map (OSM,OSMDE) , Google-Map (Karte))
- untuk menggunakan peta google, diperlukan kunci API. Kuncinya harus dimasukkan ke dalam skrip
js/GM_utils/GPX2GM_Defs.js
Server TCP/UDP
Kode GO membuka port dan menerima koneksi melalui TCP dan UDP. Server hanya mencerna paket dan (biasanya) tidak merespons. Data yang diterima dicocokkan dengan ekspresi reguler dari format perangkat yang dikenal (./exe/devices.config). Jika kecocokan ditemukan dan ID perangkat diketahui, data GPS dikonversi ke format yang diharapkan oleh kode PHP dan diteruskan melalui koneksi HTTP ke server (misalnya localhost/gpstracker/index.php). Lokasi GPS kemudian disimpan dalam database. Parameter yang akan diteruskan ke server:
-port <portnumber>
-httpserver <server name - e.g. localhost>
-urlpath <path on server>
-key <secret key in order to check the status of the server - used by PHP>
-verbose - print raw messages, which allows to determine the format send by the device
Contoh panggilan
nohup tcp_udp_http_bridge -port 20202 -httpserver localhost -urlpath /gpstracker/index.php -key 123456
Enkripsi data UDP
Server tcp/udp dapat menangani paket terenkripsi AES. Ini memerlukan PSK seluruh server di ./exe/encrypt_psk.config
. Saat ini ini hanya diterapkan di GPS logger versi pribadi saya untuk Android.
Informasi tentang format data GPS
Sebagian besar perangkat menyediakan data sebagai catatan NMEA GPRMC (lihat https://de.wikipedia.org/wiki/NMEA_0183)
$GPRMC,162614,A,5230.5900,N,01322.3900,E,10.0,90.0,131006,1.2,E,A*13
identifier, time, Active/Void, latitude, N/S, longitude, E/W, speed, angle, date, magnetic deviation, E/W, signal integrity, check sum
Lintang dan bujur diberikan dalam derajat dan menit (ddmm.mmmm), disimpan oleh server dalam derajat. Kecepatan diberikan dalam knot dan disimpan oleh server dalam m/detik.
Seringkali catatan GPRMC yang dikurangi digunakan (tidak ada deviasi magnetik), dengan pengidentifikasi tambahan untuk jenis perangkat, perangkat diidentifikasi. Yang teridentifikasi sering kali adalah nomor IMEI perangkat. Karena GPRMC kurang memiliki ketinggian dan presisi/akurasi, terkadang hal ini ditambahkan. Jumlah cek dihitung dengan XOR semua karakter (kode ASCII) antara $ dan *
Format HTTP
https://my-server.com?time=UTC&lat=LATITUDE&lon=LONGITUDE&alt=ALTITUDE&acc=ACCURACY&id=DEVICEID (lat and lon given in degree 0-180 and 0-360, respectively) or
https://my-server.com?id=DEVICEID&gprmc=<GPRMC-RECORD> or
Format TCP/UDP
Pencatat GPS untuk Android (format OpenGTS)
uabcde/Y0xXyY/$GPRMC,180725,A,5637.37477,N,1211.26495,E,0.000000,0.000000,021017,,*20
username/deviceid/GPRMC-RECORD
GPS logger untuk Android dengan ketinggian tambahan
uabcde/Y0xXyY/$GPRMC,180725,A,5637.37477,N,1211.26495,E,0.000000,0.000000,021017,,*20,alt=100.5
Perangkat komersial (TCP/UDP)
Ada format yang berbeda. Biasanya header pendek berisi 2-3 karakter diikuti dengan nomor IMEI/identifikasi perangkat, status 2 karakter, dan catatan GPRMC yang kurang lebih lengkap (tanpa header $GPRMC). Beberapa bit status mungkin ditambahkan di bagian akhir. Sebagian besar perangkat juga mengirim pesan hati, yang memiliki format berbeda. Beberapa perangkat memerlukan login untuk memulai komunikasi. Protokol ini disertakan dalam server dan konfigurasi perangkat, namun saat ini belum teruji. Saat ini hanya perangkat TK103B H02 yang disertakan dalam devices.config.
Contoh pesan lokasi GPS melalui UDP
*HQ,7893267561,V1,050316,A,2212.8745,N,11346.6574,E,14.28,028,220902,FFFFFFFF#
HQ adalah ID pabrikan, diikuti dengan nomor identifikasi dan jenis pesan "V1". Catatan GPRMC tidak memiliki header $GPRMC, deviasi magnetik, dan jumlah cek. Di akhir pesan, informasi status diberikan.