Penjelasan singkat parsing data GPS Tracker Concox
Selamat Malam, berikut penjelasan singkat parsing data GPS Tracker Concox semoga bermanfaat,
Diawal memahami struktur Paket Protokol GT06, dimana setiap paket terdiri dari:
1.Start Bit (0x78 0x78 or 0x79 0x79 for long data)
2.Packet Length (Number of bytes following this field)
3.Protocol Number (Defines the type of packet)
4.Data Content (Varies based on the protocol number)
5.Serial Number (Unique identifier for the message)
6.Error Check Code (Checksum) (XOR of all bytes from length to serial number)
7.Stop Bit (0x0D 0x0A)
Protocol Number Packet Type
0x01 Login Packet
0x12 GPS Location Packet
0x13 Status/Alarm Packet
0x15 Heartbeat Packet
Contoh Parsing
Parsing a Location Packet (0x12)
78 78 22 12 0F 03 15 11 23 45 37 C5 06 12 34 56 78 09 87 65 43 10 01 04 CC 00 00 01 23 45 67 89 0D 0A
Kta breakdown:
Start Bit: 78 78
Packet Length: 22 (34 bytes)
Protocol Number: 12 (GPS location)
Date & Time: 0F 03 15 11 23 45 (Year: 0F (2015), Month: 03, Day: 15, Hour: 11, Minute: 23, Second: 45)
Latitude: C5 06 12 34 (Convert to decimal and apply scaling)
Longitude: 56 78 09 87
Speed: 65 (Hex to Decimal = 101 km/h)
Direction & Status: 43 10
LBS Info (Cell Tower Data): 01 04 CC 00
Serial Number: 00 01
Checksum: 23
Stop Bit: 0D 0A
Kode Python untuk Mengurai Data GPS GT06
def parse_gt06_packet(packet):
if packet[:2] == b'\x78\x78': # Check start bit
length = packet[2]
protocol = packet[3]
if protocol == 0x12: # GPS Packet
year, month, day, hour, minute, second = struct.unpack("BBBBBB", packet[4:10])
latitude = struct.unpack(">I", packet[10:14])[0] / 1800000.0
longitude = struct.unpack(">I", packet[14:18])[0] / 1800000.0
speed = packet[18]
direction = struct.unpack(">H", packet[19:21])[0] & 0x03FF # Last 10 bits
print(f"Date: 20{year}-{month:02d}-{day:02d} {hour:02d}:{minute:02d}:{second:02d}")
print(f"Latitude: {latitude}, Longitude: {longitude}")
print(f"Speed: {speed} km/h, Direction: {direction}°")
else:
print(f"Unknown Protocol: {hex(protocol)}")
# Example packet
packet_hex = "787822120F031511234537C5061234567809876543100104CC000001234567890D0A"
packet_bytes = bytes.fromhex(packet_hex)
parse_gt06_packet(packet_bytes)
def parse_gt06_packet(packet):
if packet[:2] == b'\x78\x78': # Check start bit
length = packet[2]
protocol = packet[3]
if protocol == 0x12: # GPS Packet
year, month, day, hour, minute, second = struct.unpack("BBBBBB", packet[4:10])
latitude = struct.unpack(">I", packet[10:14])[0] / 1800000.0
longitude = struct.unpack(">I", packet[14:18])[0] / 1800000.0
speed = packet[18]
direction = struct.unpack(">H", packet[19:21])[0] & 0x03FF # Last 10 bits
print(f"Date: 20{year}-{month:02d}-{day:02d} {hour:02d}:{minute:02d}:{second:02d}")
print(f"Latitude: {latitude}, Longitude: {longitude}")
print(f"Speed: {speed} km/h, Direction: {direction}°")
else:
print(f"Unknown Protocol: {hex(protocol)}")
# Example packet
packet_hex = "787822120F031511234537C5061234567809876543100104CC000001234567890D0A"
packet_bytes = bytes.fromhex(packet_hex)
parse_gt06_packet(packet_bytes)
Untuk menerima data dari perangkat GT06 (seperti Concox ET200), kita perlu membuat socket server yang bisa menangani koneksi TCP dari perangkat dan membaca data biner yang dikirimkan.
1. Cara Kerja Socket Server untuk GT06
Perangkat GPS mengirimkan data melalui GPRS ke IP dan port yang telah dikonfigurasi.
Server menerima data dalam format biner.
Server mengekstrak informasi penting, seperti lokasi, kecepatan, alarm, dll.
Server mengirim respons ke perangkat GPS agar koneksi tetap aktif.
Data disimpan ke database atau diteruskan ke sistem lain (misalnya Traccar).
2. Contoh Kode Python - Socket Server
Kode berikut akan membuat socket server yang bisa menerima dan menampilkan data dari perangkat GPS.
def start_server(host='0.0.0.0', port=5023):
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((host, port))
server.listen(5)
print(f"Server listening on {host}:{port}...")
while True:
client, addr = server.accept()
print(f"Connected by {addr}")
try:
data = client.recv(1024) # Menerima data dari GPS
if data:
print(f"Received raw data: {data.hex()}")
# Kirim respon ACK jika diperlukan
client.send(b'\x78\x78\x05\x01\x00\x01\xD9\xDC\x0D\x0A')
except Exception as e:
print(f"Error: {e}")
finally:
client.close()
if __name__ == "__main__":
start_server()
Perangkat GPS mengirimkan data melalui GPRS ke IP dan port yang telah dikonfigurasi.
Server menerima data dalam format biner.
Server mengekstrak informasi penting, seperti lokasi, kecepatan, alarm, dll.
Server mengirim respons ke perangkat GPS agar koneksi tetap aktif.
Data disimpan ke database atau diteruskan ke sistem lain (misalnya Traccar).
2. Contoh Kode Python - Socket Server
Kode berikut akan membuat socket server yang bisa menerima dan menampilkan data dari perangkat GPS.
def start_server(host='0.0.0.0', port=5023):
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((host, port))
server.listen(5)
print(f"Server listening on {host}:{port}...")
while True:
client, addr = server.accept()
print(f"Connected by {addr}")
try:
data = client.recv(1024) # Menerima data dari GPS
if data:
print(f"Received raw data: {data.hex()}")
# Kirim respon ACK jika diperlukan
client.send(b'\x78\x78\x05\x01\x00\x01\xD9\xDC\x0D\x0A')
except Exception as e:
print(f"Error: {e}")
finally:
client.close()
if __name__ == "__main__":
start_server()
3. Penjelasan Kode
a.socket.AF_INET, socket.SOCK_STREAM → Membuat socket TCP.
b.server.bind(('0.0.0.0', 5023)) → Mengikat server ke semua IP di port 5023.
c.server.listen(5) → Menerima maksimal 5 koneksi secara bersamaan.
d.client.recv(1024) → Menerima data biner dari perangkat GPS.
e.print(data.hex()) → Menampilkan data dalam format heksadesimal.
f.lient.send() → Mengirim ACK sebagai balasan ke perangkat GPS.
a.socket.AF_INET, socket.SOCK_STREAM → Membuat socket TCP.
b.server.bind(('0.0.0.0', 5023)) → Mengikat server ke semua IP di port 5023.
c.server.listen(5) → Menerima maksimal 5 koneksi secara bersamaan.
d.client.recv(1024) → Menerima data biner dari perangkat GPS.
e.print(data.hex()) → Menampilkan data dalam format heksadesimal.
f.lient.send() → Mengirim ACK sebagai balasan ke perangkat GPS.
4.Cara Menghubungkan GPS ke Server
Konfigurasi Server di GPS gunakan perintah SMS untuk mengatur IP dan port:
SERVER,1,IP,PORT,0#
Pastikan Firewall dan Port Terbuka
Cek Log Data yang Diterima
Jalankan server Python dan lihat apakah ada data masuk.
Untuk menyimpan data GT06 dari GPS tracker ke database, kita bisa menggunakan MySQL/PostgreSQL.
Konfigurasi Server di GPS gunakan perintah SMS untuk mengatur IP dan port:
SERVER,1,IP,PORT,0#
Pastikan Firewall dan Port Terbuka
Cek Log Data yang Diterima
Jalankan server Python dan lihat apakah ada data masuk.
Untuk menyimpan data GT06 dari GPS tracker ke database, kita bisa menggunakan MySQL/PostgreSQL.
Berikut langkah-langkahnya:
1. Membuat Database dan Tabel
Kita buat database dan tabel untuk menyimpan data lokasi GPS.
CREATE DATABASE gps_tracker;
USE gps_tracker;
CREATE TABLE tracking_data (
id INT AUTO_INCREMENT PRIMARY KEY,
imei VARCHAR(20),
latitude DOUBLE,
longitude DOUBLE,
speed INT,
direction INT,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
);
2. Menyimpan Data ke Database dengan Python
Tambahkan kode untuk menyimpan data ke database dalam socket server.
Instal Library MySQL (Jika Belum Terinstal)
1. Membuat Database dan Tabel
Kita buat database dan tabel untuk menyimpan data lokasi GPS.
CREATE DATABASE gps_tracker;
USE gps_tracker;
CREATE TABLE tracking_data (
id INT AUTO_INCREMENT PRIMARY KEY,
imei VARCHAR(20),
latitude DOUBLE,
longitude DOUBLE,
speed INT,
direction INT,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
);
2. Menyimpan Data ke Database dengan Python
Tambahkan kode untuk menyimpan data ke database dalam socket server.
Instal Library MySQL (Jika Belum Terinstal)
bash
pip install mysql-connector-python
Kode Python (Menggunakan MySQL)
import socket
import mysql.connector
import struct
Koneksi ke database
db = mysql.connector.connect(
host="localhost",
user="root",
password="password",
database="gps_tracker"
)
cursor = db.cursor()
def save_to_db(imei, latitude, longitude, speed, direction):
sql = "INSERT INTO tracking_data (imei, latitude, longitude, speed, direction) VALUES (%s, %s, %s, %s, %s)"
values = (imei, latitude, longitude, speed, direction)
cursor.execute(sql, values)
db.commit()
print("Data GPS tersimpan ke database.")
def parse_gt06_packet(data):
if data[:2] == b'\x78\x78': # Start bit GT06
protocol = data[3]
if protocol == 0x12: # GPS Data
year, month, day, hour, minute, second = struct.unpack("BBBBBB", data[4:10])
latitude = struct.unpack(">I", data[10:14])[0] / 1800000.0
longitude = struct.unpack(">I", data[14:18])[0] / 1800000.0
speed = data[18]
direction = struct.unpack(">H", data[19:21])[0] & 0x03FF # 10-bit terakhir
imei = "123456789012345" # IMEI bisa didapat dari paket login
print(f"Data GPS: {latitude}, {longitude}, {speed} km/h, {direction}°")
save_to_db(imei, latitude, longitude, speed, direction)
def start_server(host='0.0.0.0', port=5023):
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((host, port))
server.listen(5)
print(f"Server listening on {host}:{port}...")
while True:
client, addr = server.accept()
print(f"Connected by {addr}")
try:
data = client.recv(1024)
if data:
print(f"Received raw data: {data.hex()}")
parse_gt06_packet(data)
client.send(b'\x78\x78\x05\x01\x00\x01\xD9\xDC\x0D\x0A')
except Exception as e:
print(f"Error: {e}")
finally:
client.close()
if __name__ == "__main__":
start_server()
Penjelasan Kode
save_to_db() → Menyimpan data ke tabel `tracking_data`.
parse_gt06_packet() → Mengekstrak data lokasi, kecepatan, dan arah dari paket GT06.
start_server() → Menerima data dari perangkat GPS dan menyimpannya ke database.
Kemudian lajutkan dengan coba
1. Jalankan server Python
bash
python server.py
2. Pastikan GPS Tracker mengirim data ke server
3. Cek database dengan perintah SQL:
sql
SELECT * FROM tracking_data;
Langkah Berikutnya
Tambahkan fitur membaca IMEI dari Login Packet (`0x01`)
Simpan data ke PostgreSQL/MongoDB
save_to_db() → Menyimpan data ke tabel `tracking_data`.
parse_gt06_packet() → Mengekstrak data lokasi, kecepatan, dan arah dari paket GT06.
start_server() → Menerima data dari perangkat GPS dan menyimpannya ke database.
Kemudian lajutkan dengan coba
1. Jalankan server Python
bash
python server.py
2. Pastikan GPS Tracker mengirim data ke server
3. Cek database dengan perintah SQL:
sql
SELECT * FROM tracking_data;
Langkah Berikutnya
Tambahkan fitur membaca IMEI dari Login Packet (`0x01`)
Simpan data ke PostgreSQL/MongoDB
Selamat mencoba
Comments
Post a Comment